1. Giới thiệu
Tổng quan
Lớp học này hướng dẫn bạn cách điều phối các hệ thống phức tạp có nhiều tác nhân bằng Agent Development Kit (ADK) của Google. Bạn sẽ chuyển từ hệ thống phân cấp đơn giản của nhân viên hỗ trợ sang xây dựng quy trình làm việc tự động và mang tính cộng tác.
Sản phẩm bạn sẽ tạo ra
Bạn sẽ xây dựng 2 hệ thống đa tác nhân riêng biệt:
- Một đại lý lập kế hoạch du lịch đơn giản, học cách chuyển cuộc trò chuyện giữa một đại lý "động não" và một đại lý "lập kế hoạch tham quan".
- Một trình tạo bản đề cử phim tiên tiến hơn sử dụng "phòng viết kịch bản" gồm các tác nhân tự động (như nhà nghiên cứu, nhà biên kịch và nhà phê bình) để cùng nhau làm việc theo một vòng lặp nhằm tạo ra cốt truyện hoàn chỉnh cho bộ phim.
Kiến thức bạn sẽ học được
- Cách tạo mối quan hệ giữa đại lý chính và đại lý phụ.
- Cách ghi dữ liệu vào phiên
statebằng một công cụ. - Cách đọc từ
statebằng cách sử dụng mẫu khoá (ví dụ:{my_key?}). - Cách sử dụng
SequentialAgentcho quy trình từng bước. - Cách sử dụng
LoopAgentđể tạo các chu kỳ tinh chỉnh lặp đi lặp lại. - Cách sử dụng
ParallelAgentđể chạy đồng thời các tác vụ độc lập.
2. Hệ thống đa tác nhân
Bộ công cụ phát triển tác nhân (ADK) giúp nhà phát triển nhận được các hành vi đáng tin cậy, tinh vi và nhiều bước hơn từ các mô hình tạo sinh. Thay vì một câu lệnh phức tạp, ADK cho phép bạn tạo một quy trình gồm nhiều tác nhân đơn giản hơn cộng tác để giải quyết một vấn đề bằng cách chia nhỏ công việc.
Phương pháp này có một số ưu điểm so với việc sử dụng một câu lệnh duy nhất, nguyên khối:
- Thiết kế đơn giản hơn: Thiết kế và sắp xếp một luồng gồm các tác nhân nhỏ, chuyên biệt sẽ đơn giản hơn so với việc thiết kế một câu lệnh lớn và phức tạp.
- Độ tin cậy: Các tác nhân chuyên biệt đáng tin cậy hơn trong các nhiệm vụ cụ thể so với một tác nhân lớn và phức tạp.
- Khả năng duy trì: Dễ dàng sửa chữa hoặc cải thiện một tác nhân nhỏ, chuyên biệt mà không làm hỏng các phần khác của hệ thống.
- Tính mô-đun: Các tác nhân được tạo cho một quy trình làm việc có thể dễ dàng được dùng lại trong các quy trình khác.
Cây tác nhân phân cấp

Trong ADK, bạn sắp xếp các tác nhân theo cấu trúc cây. Hệ thống phân cấp này là chìa khoá để kiểm soát tiến trình của cuộc trò chuyện, vì hệ thống này giới hạn nhân viên hỗ trợ có thể "chuyển" cuộc trò chuyện cho nhân viên hỗ trợ khác. Điều này giúp hành vi của hệ thống dễ dự đoán hơn và dễ gỡ lỗi hơn. Các lợi ích bao gồm:
- Thiết kế trực quan: Cấu trúc này được lấy cảm hứng từ các nhóm trong thế giới thực, giúp bạn dễ dàng suy luận hơn.
- Luồng được kiểm soát: Hệ phân cấp giúp bạn kiểm soát chính xác việc uỷ quyền tác vụ, điều này giúp ích trong việc gỡ lỗi. Ví dụ: cấu trúc cây đảm bảo rằng tác nhân viết báo cáo chính xác được gọi, ngay cả khi bạn có hai tác nhân có nội dung mô tả tương tự.
Toàn bộ cấu trúc bắt đầu bằng root_agent. Tác nhân này đóng vai trò là tác nhân chính và có thể có một hoặc nhiều tác nhân phụ. Các tác nhân phụ này cũng có thể là tác nhân chính của các tác nhân phụ khác, tạo thành cây.
3. Thiết lập dự án
Tài khoản Google
Nếu chưa có Tài khoản Google cá nhân, bạn phải tạo một Tài khoản Google.
Sử dụng tài khoản cá nhân thay vì tài khoản do nơi làm việc hoặc trường học cấp.
Đăng nhập vào Google Cloud Console
Đăng nhập vào Google Cloud Console bằng Tài khoản Google cá nhân.
Bật thanh toán
Đổi 5 USD tín dụng Google Cloud (không bắt buộc)
Để tham gia hội thảo này, bạn cần có một Tài khoản thanh toán có sẵn một số tín dụng. Nếu dự định sử dụng hệ thống thanh toán của riêng mình, bạn có thể bỏ qua bước này.
- Nhấp vào đường liên kết này rồi đăng nhập bằng Tài khoản Google cá nhân.Bạn sẽ thấy nội dung như sau:

- Nhấp vào nút NHẤP VÀO ĐÂY ĐỂ TRUY CẬP VÀO KHOẢN TÍN DỤNG.Thao tác này sẽ đưa bạn đến một trang để thiết lập hồ sơ thanh toán

- Nhấp vào Xác nhận
Bạn hiện đã kết nối với một Tài khoản thanh toán dùng thử Google Cloud Platform.

Thiết lập tài khoản thanh toán cá nhân
Nếu thiết lập thông tin thanh toán bằng tín dụng Google Cloud, bạn có thể bỏ qua bước này.
Để thiết lập tài khoản thanh toán cá nhân, hãy truy cập vào đây để bật tính năng thanh toán trong Cloud Console.
Một số lưu ý:
- Việc hoàn thành bài thực hành này sẽ tốn ít hơn 1 USD cho các tài nguyên trên đám mây.
- Bạn có thể làm theo các bước ở cuối bài thực hành này để xoá tài nguyên nhằm tránh bị tính thêm phí.
- Người dùng mới sẽ đủ điều kiện dùng thử miễn phí 300 USD.
Tạo dự án (không bắt buộc)
Nếu bạn chưa có dự án nào muốn sử dụng cho nhãn này, hãy tạo một dự án mới tại đây.
4. Mở Trình chỉnh sửa Cloud Shell
- Nhấp vào đường liên kết này để chuyển trực tiếp đến Cloud Shell Editor
- Nếu được nhắc uỷ quyền vào bất kỳ thời điểm nào trong ngày hôm nay, hãy nhấp vào Uỷ quyền để tiếp tục.

- Nếu thiết bị đầu cuối không xuất hiện ở cuối màn hình, hãy mở thiết bị đầu cuối:
- Nhấp vào Xem
- Nhấp vào Terminal (Thiết bị đầu cuối)

- Trong cửa sổ dòng lệnh, hãy thiết lập dự án bằng lệnh sau:
gcloud config set project [PROJECT_ID]- Ví dụ:
gcloud config set project lab-project-id-example - Nếu không nhớ mã dự án, bạn có thể liệt kê tất cả mã dự án bằng cách dùng lệnh:
gcloud projects list
- Ví dụ:
- Bạn sẽ thấy thông báo sau:
Updated property [core/project].
5. Bật API
Để sử dụng Vertex AI API và tương tác với mô hình Gemini, bạn cần bật Vertex AI API trong dự án Google Cloud của mình.
- Trong dòng lệnh, hãy bật API:
gcloud services enable aiplatform.googleapis.com
Sau đây là các phần được cập nhật, thay thế việc tạo tệp theo cách thủ công bằng hướng dẫn sao chép kho lưu trữ GitHub và cài đặt các phần phụ thuộc.
Giới thiệu về Vertex AI SDK cho Python
Để tương tác với các mô hình được lưu trữ trên Vertex AI từ ứng dụng Python, bạn sẽ sử dụng Vertex AI SDK cho Python. SDK này đơn giản hoá quy trình gửi câu lệnh, chỉ định các tham số mô hình và nhận phản hồi mà không cần xử lý trực tiếp sự phức tạp của các lệnh gọi API cơ bản.
Bạn có thể xem tài liệu đầy đủ về Vertex AI SDK cho Python tại đây: Giới thiệu về Vertex AI SDK cho Python | Google Cloud.
6. Thiết lập môi trường dự án
Sao chép kho lưu trữ
- Trong thiết bị đầu cuối, hãy sao chép kho lưu trữ chứa các tệp khởi đầu.
Cờgit clone --depth 1 https://github.com/GoogleCloudPlatform/devrel-demos.git--depth 1chỉ sao chép phiên bản mới nhất, giúp tăng tốc độ. - Trong thiết bị đầu cuối, hãy chuyển đến thư mục làm việc phù hợp cho lớp học này.
cd devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems
Kích hoạt môi trường ảo
- Trong terminal, hãy tạo và kích hoạt một môi trường ảo bằng cách sử dụng
uv:uv venv source .venv/bin/activate - Trong thiết bị đầu cuối, hãy cài đặt
google-adkvà các phần phụ thuộc khác trong tệprequirements.txt:uv pip install -r requirements.txt
Xem xét cấu trúc tệp
Bây giờ, khi tất cả các tệp của bạn đã được tạo, hãy mở thư mục adk_multiagent_systems trong trình khám phá để xem cấu trúc đầy đủ.
- Trong trình đơn Cloud Shell Editor, hãy chọn File (Tệp) > Open Folder... (Mở thư mục...).

- Trong hộp bật lên, hãy thêm thông tin thư mục sau đây sau tên người dùng của bạn:
devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems/. Nhấp vào OK.
Nó sẽ có dạng như sau:
- Bảng điều khiển trình khám phá ở bên trái sẽ làm mới. Lúc này, bạn sẽ thấy cấu trúc dự án hoàn chỉnh, với các thư mục con
parent_and_subagentsvàworkflow_agents, sẵn sàng cho các bước tiếp theo.
Thiết lập các biến môi trường
- Bạn đã có trong danh bạ
adk_multiagent_systems. Trong terminal (thiết bị đầu cuối), hãy tạo một tệp.envđể lưu trữ các biến môi trường:cloudshell edit .env - Dán nội dung sau vào tệp
.envmở trong trình chỉnh sửa:GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]" GOOGLE_CLOUD_LOCATION=global MODEL="gemini-2.5-flash" - Thay thế
[YOUR-PROJECT-ID]bằng mã dự án thực tế của bạn trên Google Cloud. (ví dụ:PROJECT_ID = "google-cloud-labs")
Nếu bạn không nhớ mã dự án, hãy chạy lệnh sau trong cửa sổ dòng lệnh. Thao tác này sẽ cho bạn thấy danh sách tất cả các dự án và mã dự án của bạn.gcloud projects list - Trong thiết bị đầu cuối, hãy sao chép tệp
.envnày vào các thư mục tác nhân phụ để các thư mục này cũng có thể truy cập vào các biến: Cấu trúc tệp hiện sẽ có dạng như sau:cp .env parent_and_subagents/.env cp .env workflow_agents/.env
7. Khám phá các lượt chuyển giữa đại lý chính, đại lý phụ và đại lý ngang cấp
Cuộc trò chuyện luôn bắt đầu bằng root_agent. Theo mặc định, một tác nhân mẹ sẽ sử dụng description của các tác nhân con để quyết định thời điểm chuyển cuộc trò chuyện. Bạn cũng có thể hướng dẫn rõ ràng các hoạt động chuyển này trong instruction của thành phần gốc bằng cách sử dụng name của các thành phần phụ.
Hãy thử xem.
- Trong Trình chỉnh sửa Cloud Shell, hãy mở
adk_multiagent_systems/parent_and_subagents/agent.py. Hãy lưu ý 3 tác nhân trong tệpagent.py:root_agent(có tên làsteering): Đặt câu hỏi cho người dùng để quyết định chuyển đến tác nhân phụ nào. Ban đầu, nó chỉ dựa vàodescriptioncủa các tác nhân phụ.travel_brainstormer: Giúp người dùng động não để tìm ra các đích đến.attractions_planner: Giúp người dùng liệt kê những việc cần làm ở một quốc gia cụ thể.
- Tạo
travel_brainstormervàattractions_plannerlàm tác nhân phụ củaroot_agentbằng cách thêm dòng sau vào quá trình tạoroot_agent:sub_agents=[travel_brainstormer, attractions_planner] - Trong thiết bị đầu cuối, hãy trò chuyện với nhân viên hỗ trợ:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk run parent_and_subagents - Tại lời nhắc
[user]:trong dòng lệnh, hãy nhập: Ví dụ về kết quả đầu ra (Kết quả của bạn có thể hơi khác):hello[steering]: Hi there! Do you already have a country in mind for your trip, or would you like some help deciding where to go?
- Bây giờ, hãy cho tác nhân biết trong thiết bị đầu cuối:
Ví dụ về kết quả đầu ra (Kết quả của bạn có thể hơi khác):I could use some help deciding. Lưu ý thẻ[travel_brainstormer]: Okay! To give you the best recommendations, I need to understand what you're looking for in a trip. ...
[travel_brainstormer].root_agentđã chuyển quyền kiểm soát chỉ dựa trêndescriptioncủa nhân viên hỗ trợ. - Tại lời nhắc
user:trong cửa sổ dòng lệnh, hãy nhậpexitrồi nhấn ENTER để kết thúc cuộc trò chuyện. - Giờ thì hãy nói rõ hơn. Trong
agent.py, hãy thêm nội dung sau vàoinstructioncủaroot_agent:If they need help deciding, send them to 'travel_brainstormer'. If they know what country they'd like to visit, send them to the 'attractions_planner'. - Trong terminal, hãy chạy lại tác nhân:
adk run parent_and_subagents - Tại lời nhắc
[user]:trong dòng lệnh, hãy nhập:hello - Hãy trả lời rằng:
Ví dụ về kết quả đầu ra (Kết quả của bạn có thể hơi khác):I would like to go to Japan. Lưu ý việc chuyển sang[attractions_planner]: Okay, I can help you with that! Here are some popular attractions in Japan: ...
attractions_planner, theo hướng dẫn mới của bạn. - Giờ đây, hãy trả lời bằng:
Ví dụ về kết quả đầu ra (Kết quả của bạn có thể hơi khác):Actually I don't know what country to visit. Xin lưu ý rằng bạn đã được chuyển đến[travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
travel_brainstormer, một đối tượng ngang hàng củaattractions_planner. Theo mặc định, bạn được phép sử dụng tính năng này. - Tại lời nhắc người dùng, hãy nhập
exitđể kết thúc phiên.
Tóm tắt
Trong phần này, bạn đã tìm hiểu những kiến thức cơ bản về hệ thống phân cấp tác nhân và quy trình trò chuyện:
- Cuộc trò chuyện luôn bắt đầu bằng
root_agent. - Một tác nhân chính có thể tự động chuyển đến một tác nhân phụ dựa trên
descriptioncủa tác nhân đó. - Bạn có thể kiểm soát rõ ràng luồng này bằng cách cho phép
instructionmẹ chuyển sang một tác nhân phụ bằngname. - Theo mặc định, các nhân viên có thể chuyển cuộc gọi cho nhân viên
peer(những người ngang cấp trong hệ thống phân cấp).
8. Sử dụng trạng thái phiên để lưu trữ và truy xuất thông tin
Mỗi cuộc trò chuyện ADK đều có một Session, bao gồm một từ điển trạng thái phiên. Tất cả các tác nhân đều có thể truy cập vào trạng thái này, đây là cách hoàn hảo để truyền thông tin giữa các tác nhân hoặc duy trì dữ liệu (chẳng hạn như danh sách) trong suốt cuộc trò chuyện.
Để khám phá cách thêm và đọc dữ liệu từ trạng thái:
- Quay lại tệp
adk_multiagent_systems/parent_and_subagents/agent.py - Dán định nghĩa hàm sau vào tiêu đề
# Tools: Trong mã này, hãy lưu ý:def save_attractions_to_state( tool_context: ToolContext, attractions: List[str] ) -> dict[str, str]: """Saves the list of attractions to state["attractions"]. Args: attractions [str]: a list of strings to add to the list of attractions Returns: None """ # Load existing attractions from state. If none exist, start an empty list existing_attractions = tool_context.state.get("attractions", []) # Update the 'attractions' key with a combo of old and new lists. # When the tool is run, ADK will create an event and make # corresponding updates in the session's state. tool_context.state["attractions"] = existing_attractions + attractions # A best practice for tools is to return a status message in a return dict return {"status": "success"}- Hàm này nhận
tool_context: ToolContext. Đối tượng này là cổng truy cập vào phiên. - Dòng
tool_context.state["attractions"] = ...đọc và ghi trực tiếp vào từ điển trạng thái của phiên. ADK sẽ xử lý phần còn lại.
- Hàm này nhận
- Thêm công cụ vào tác nhân
attractions_plannerbằng cách thêm tham sốtools:tools=[save_attractions_to_state] - Thêm các dấu đầu dòng sau vào
instructionhiện có của tác nhânattractions_planner:- When they reply, use your tool to save their selected attraction and then provide more possible attractions. - If they ask to view the list, provide a bulleted list of { attractions? } and then suggest some more. - Khởi chạy Giao diện người dùng web của Bộ công cụ phát triển tác nhân bằng lệnh sau trong dòng lệnh:
Đầu raadk webINFO: Started server process [2434] INFO: Waiting for application startup. +-------------------------------------------------------+ | ADK Web Server started | | | | For local testing, access at http://localhost:8000. | +-------------------------------------------------------+ INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) - Trong cửa sổ Cloud Shell, hãy nhấp vào Để xem giao diện web trong một thẻ mới, hãy nhấp vào nút Xem trước trên web rồi chọn Thay đổi cổng.

- Nhập số cổng 8000 rồi nhấp vào Thay đổi và xem trước. Một thẻ trình duyệt mới sẽ mở ra cùng với Giao diện người dùng dành cho nhà phát triển ADK.

- Trong trình đơn thả xuống Chọn một nhân viên hỗ trợ ở bên trái, hãy chọn
parent_and_subagents. - Bắt đầu cuộc trò chuyện với:
hello - Sau khi nhân viên hỗ trợ chào bạn, hãy trả lời bằng:
Bạn sẽ được chuyển đếnI'd like to go to Egypt.attractions_plannervà nhận được danh sách các điểm tham quan. - Chọn một điểm tham quan, ví dụ:
I'll go to the Sphinx - Bạn sẽ nhận được câu trả lời như: Được rồi, tôi đã lưu The Sphinx vào danh sách của bạn...
- Nhấp vào hộp công cụ phản hồi (được đánh dấu bằng dấu kiểm) để xem sự kiện được tạo từ phản hồi của công cụ.
Xin lưu ý rằng nó bao gồm một trường actions (hành động) bao gồmstateDeltamô tả các thay đổi đối với trạng thái. - Trả lời bằng một điểm tham quan khác trong danh sách của trợ lý.
- Trên trình đơn điều hướng bên trái, hãy nhấp vào "X" để thoát khỏi chế độ tập trung vào sự kiện mà bạn đã kiểm tra trước đó.
- Trong thanh bên trái, hãy nhấp vào thẻ Trạng thái. Giờ đây, bạn có thể thấy mảng
attractionstrong trạng thái của phiên. Mảng này sẽ chứa cả hai mục bạn đã chọn.
- Gửi tin nhắn này cho nhân viên hỗ trợ:
Giờ đây, tác nhân sẽ đọc từ trạng thái và trả về danh sách của bạn.What is on my list? - Khi bạn hoàn tất việc thử nghiệm với tác nhân, hãy đóng thẻ trình duyệt web và nhấn tổ hợp phím CTRL + C trong Cloud Shell Terminal để dừng máy chủ.
Tóm tắt theo phần
Trong phần này, bạn đã tìm hiểu cách sử dụng trạng thái Session để chia sẻ dữ liệu:
- Để ghi trạng thái: Bạn ghi vào từ điển trạng thái từ bên trong một công cụ, bằng cách sử dụng đối tượng
tool_context.state(ví dụ:tool_context.state["my_list"] = [...]). - Để đọc trạng thái: Bạn chèn dữ liệu trạng thái trực tiếp vào
instructioncủa một tác nhân bằng cách sử dụng mẫu khoá (ví dụ:Here is your list: {my_list?}). - Để kiểm tra trạng thái: Bạn có thể theo dõi trạng thái phiên trực tiếp trong Giao diện người dùng dành cho nhà phát triển ADK bằng thẻ Trạng thái.
9. Nhân viên hỗ trợ quy trình công việc
Cho đến nay, bạn đã thấy cách một tác nhân chính chuyển đến một tác nhân phụ rồi chờ người dùng. Tác nhân quy trình công việc hoạt động khác: chúng thực thi các tác nhân phụ lần lượt trong một quy trình tự động mà không cần chờ người dùng nhập dữ liệu.
Đây là lựa chọn phù hợp cho các tác vụ tự động, nhiều bước như quy trình "Lập kế hoạch và thực hiện" hoặc "Soạn thảo và sửa đổi". ADK cung cấp 3 tác nhân quy trình tích hợp sẵn để quản lý việc này:
SequentialAgentLoopAgentParallelAgent
Phần còn lại của bài tập này sẽ tập trung vào việc xây dựng một hệ thống nhiều tác nhân bằng cách sử dụng 3 tác nhân quy trình công việc này.
Bạn sẽ tạo một đặc vụ để phát triển tài liệu đề cử cho một bộ phim mới về một nhân vật lịch sử. Các trợ lý AI sẽ xử lý việc nghiên cứu, viết lặp đi lặp lại và tạo báo cáo.
Cuối cùng, hệ thống của bạn sẽ có dạng như sau:

Bạn sẽ xây dựng hệ thống này từng bước một, bắt đầu từ quy trình đơn giản nhất.
10. Xây dựng hệ thống nhiều tác nhân bằng SequentialAgent
SequentialAgent là một tác nhân quy trình công việc thực thi các tác nhân phụ theo một trình tự tuyến tính đơn giản. Mỗi tác nhân trong danh sách sub_agents sẽ chạy lần lượt theo thứ tự. Điều này rất phù hợp với những quy trình mà các tác vụ phải được thực hiện theo một thứ tự cụ thể, chẳng hạn như tác nhân đề xuất phim mà bạn sẽ tạo ngay bây giờ.
Phiên bản đầu tiên này sẽ có cấu trúc như sau:

root_agent(greeter) sẽ chào đón người dùng và lấy chủ đề của bộ phim.- Sau đó, yêu cầu sẽ chuyển đến một
SequentialAgentcó tên làfilm_concept_team. Yêu cầu này sẽ:- Chạy một tác nhân
researcherđể lấy thông tin từ Wikipedia. - Chạy một tác nhân
screenwriterđể sử dụng những thông tin đó nhằm viết cốt truyện. - Chạy tác nhân
file_writerđể lưu biểu đồ cuối cùng vào một tệp.
- Chạy một tác nhân
Hãy chạy thử.
- Trong Cloud Shell Editor, hãy mở
adk_multiagent_systems/workflow_agents/agent.py.
Đọc kỹ tệp định nghĩa tác nhân này. Vì các tác nhân phụ phải được xác định trước khi có thể được chỉ định cho một tác nhân chính, nên để đọc tệp theo thứ tự của luồng trò chuyện, bạn có thể đọc các tác nhân từ cuối tệp lên đầu. - Hãy lưu ý đến công cụ
append_to_state. Hàm trợ giúp này cho phép các tác nhân thêm dữ liệu vào một danh sách trong trạng thái phiên. Đây là cáchresearchervàscreenwritersẽ truyền công việc của chúng. - Dùng thử trợ lý. Trong terminal, hãy khởi chạy giao diện web có bật tính năng tải lại trực tiếp:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk web --reload_agents - Trong cửa sổ Cloud Shell, hãy nhấp vào Để xem giao diện web trong một thẻ mới, hãy nhấp vào nút Xem trước trên web rồi chọn Thay đổi cổng.

- Nhập số cổng 8000 rồi nhấp vào Thay đổi và xem trước. Một thẻ trình duyệt mới sẽ mở ra cùng với Giao diện người dùng dành cho nhà phát triển ADK.

- Trong trình đơn thả xuống Chọn một nhân viên, hãy chọn
workflow_agents. - Bắt đầu trò chuyện với:
hello. Nhân viên hỗ trợgreetersẽ trả lời. - Khi được nhắc, hãy nhập tên một nhân vật lịch sử. Bạn có thể sử dụng một trong những cách này hoặc cách của riêng bạn:
- Zhang Zhongjing
- Ada Lovelace
- Marcus Aurelius
SequentialAgentsẽ tiếp quản. Bạn sẽ không thấy thông báo nào ở giữa.researcher,screenwritervàfile_writersẽ chạy lần lượt. Trợ lý ảo sẽ chỉ phản hồi khi toàn bộ chuỗi hoàn tất.
Nếu không thành công, bạn có thể nhấp vào + Phiên mới ở trên cùng bên phải rồi thử lại.- Sau khi tác nhân xác nhận rằng tệp đã được ghi, hãy tìm và mở tệp
.txtmới trong thư mụcmovie_pitchestrong Cloud Shell Editor để xem đầu ra. - Trong giao diện người dùng dành cho nhà phát triển ADK, hãy nhấp vào biểu tượng tác nhân cuối cùng trong nhật ký trò chuyện để mở chế độ xem sự kiện.
- Chế độ xem sự kiện cho thấy biểu đồ trực quan về cây tác nhân. Bạn có thể thấy cách
greetergọifilm_concept_team, sau đó gọi từng tác nhân phụ theo thứ tự.
- Bạn có thể nhấp vào thẻ Yêu cầu và Phản hồi cho bất kỳ tác nhân nào trong biểu đồ để kiểm tra dữ liệu chính xác đã được truyền, bao gồm cả trạng thái phiên.
Tóm tắt theo phần
Trong phần này, bạn đã tìm hiểu cách sử dụng tác nhân quy trình làm việc:
SequentialAgentsẽ thực thi các tác nhân phụ theo thứ tự, từng tác nhân một mà không cần chờ người dùng nhập dữ liệu giữa các bước.- Đây là một "quy trình công việc" vì người dùng nói chuyện với
root_agent, sau đóroot_agentsẽ chuyển công việc choSequentialAgentđể hoàn tất. - Các tác nhân phụ trong chuỗi sử dụng trạng thái phiên (ví dụ:
{ PLOT_OUTLINE? }) để truy cập vào công việc của các nhân viên hỗ trợ trước đây. - Bạn có thể sử dụng biểu đồ sự kiện trong Giao diện người dùng dành cho nhà phát triển để trực quan hoá và gỡ lỗi toàn bộ quy trình làm việc từ tác nhân đến tác nhân.
11. Thêm LoopAgent để làm việc lặp đi lặp lại
LoopAgent là một tác nhân quy trình công việc chạy các tác nhân phụ theo trình tự rồi lặp lại, bắt đầu từ đầu. "Vòng lặp" này tiếp tục cho đến khi một điều kiện được đáp ứng, chẳng hạn như đạt đến số lượng max_iterations hoặc một tác nhân phụ gọi công cụ exit_loop tích hợp.
Tính năng này hữu ích cho những việc cần làm đòi hỏi phải tinh chỉnh nhiều lần. Bạn sẽ thêm LoopAgent này để tạo "phòng viết kịch bản" cho nhân viên đề xuất ý tưởng phim của bạn. Điều này cho phép researcher, screenwriter và một tác nhân critic mới hoạt động theo vòng lặp, cải thiện cốt truyện qua mỗi lần cho đến khi critic quyết định rằng cốt truyện đã sẵn sàng. Điều này cũng giúp tác nhân xử lý thông tin đầu vào của người dùng mơ hồ hơn (chẳng hạn như "một bác sĩ cổ đại") bằng cách cho phép tác nhân nghiên cứu và tinh chỉnh ý tưởng.

Cách thực hiện những thay đổi này:
- Trong
adk_multiagent_systems/workflow_agents/agent.py, hãy thêm lệnh nhập choexit_loop(gần các lệnh nhậpgoogle.adkkhác):from google.adk.tools import exit_loop - Thêm nhân viên hỗ trợ
criticmới. Nhân viên hỗ trợ này sẽ xem xét cốt truyện. Nếu tốt, nó sẽ gọiexit_loop. Nếu không, nó sẽ thêm thông tin phản hồi vào trạng thái cho vòng lặp tiếp theo.
Dán định nghĩa tác nhân sau đây vào phần# Agents:critic = Agent( name="critic", model=model_name, description="Reviews the outline so that it can be improved.", instruction=""" INSTRUCTIONS: Consider these questions about the PLOT_OUTLINE: - Does it meet a satisfying three-act cinematic structure? - Do the characters' struggles seem engaging? - Does it feel grounded in a real time period in history? - Does it sufficiently incorporate historical details from the RESEARCH? If the PLOT_OUTLINE does a good job with these questions, exit the writing loop with your 'exit_loop' tool. If significant improvements can be made, use the 'append_to_state' tool to add your feedback to the field 'CRITICAL_FEEDBACK'. Explain your decision and briefly summarize the feedback you have provided. PLOT_OUTLINE: { PLOT_OUTLINE? } RESEARCH: { research? } """, before_model_callback=log_query_to_model, after_model_callback=log_model_response, tools=[append_to_state, exit_loop] ) - Tạo
writers_roomLoopAgent. Thao tác này sẽ chứa 3 tác nhân hoạt động trong vòng lặp.
Dán mã sau phía trên định nghĩa tác nhânfilm_concept_team:writers_room = LoopAgent( name="writers_room", description="Iterates through research and writing to improve a movie plot outline.", sub_agents=[ researcher, screenwriter, critic ], max_iterations=5, ) - Cập nhật
film_concept_teamSequentialAgentđể sử dụng vòng lặpwriters_roommới. Thay thếresearchervàscreenwriterbằng một tác nhânwriters_room.Thay thế định nghĩafilm_concept_teamhiện có bằng định nghĩa sau:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, file_writer ], ) - Quay lại thẻ ADK Dev UI rồi nhấp vào + New Session (Phiên mới) ở trên cùng bên phải.
- Bắt đầu cuộc trò chuyện mới với:
hello - Khi được nhắc, hãy cung cấp cho trợ lý một chủ đề rộng hơn lần này. Một số ý tưởng:
- một nhà thiết kế công nghiệp đã tạo ra các sản phẩm cho đại chúng
- người lập bản đồ
- người đã giúp cây trồng cho ra nhiều lương thực hơn
- Khi vòng lặp hoàn tất, tác nhân sẽ ghi tệp. Xem lại tệp đã tạo trong thư mục
adk_multiagent_systems/movie_pitches. - Kiểm tra biểu đồ sự kiện trong Giao diện người dùng dành cho nhà phát triển để xem cấu trúc vòng lặp.
Tóm tắt theo phần
Trong phần này, bạn đã tìm hiểu cách sử dụng LoopAgent:
LoopAgentlà một tác nhân quy trình làm việc lặp lại chuỗi tác nhân phụ của nó, tạo ra một "vòng lặp bên trong" cho các tác vụ lặp đi lặp lại.- Các tác nhân bên trong vòng lặp sử dụng trạng thái phiên để truyền công việc (ví dụ:
PLOT_OUTLINE) và ý kiến phản hồi (ví dụ:CRITICAL_FEEDBACK) cho nhau trong các lượt truyền bóng tiếp theo. - Vòng lặp có thể dừng lại khi đạt đến giới hạn
max_iterationshoặc khi một tác nhân gọi công cụexit_loop.
12. Sử dụng ParallelAgent cho "fan out and gather" (phân phối và thu thập)
ParallelAgent là một tác nhân quy trình làm việc thực thi tất cả các tác nhân phụ cùng một lúc (đồng thời). Điều này rất hữu ích cho những tác vụ có thể chia thành các tác vụ phụ độc lập, chẳng hạn như chạy hai công việc nghiên cứu riêng biệt.
Bạn sẽ dùng ParallelAgent để tạo một "nhóm tiền sản xuất" hoạt động song song. Một người đại diện sẽ nghiên cứu tiềm năng doanh thu phòng vé, trong khi người đại diện khác đồng thời lên ý tưởng về dàn diễn viên. Đây thường được gọi là mẫu "phân phối và thu thập": ParallelAgent "phân phối" công việc và một tác nhân sau đó (file_writer của chúng tôi) "thu thập" kết quả.

Quy trình cuối cùng của nhân viên hỗ trợ sẽ là:
greeter(gốc) bắt đầu cuộc trò chuyện.- Dữ liệu này sẽ được chuyển đến
film_concept_team(SequentialAgent), chạy:writers_room(LoopAgent) để tạo cốt truyện.preproduction_team(ParallelAgent) mới để nghiên cứu doanh thu phòng vé và dàn diễn viên cùng một lúc.file_writerđể thu thập tất cả kết quả và lưu tệp.
Cách thực hiện những thay đổi này:
- Trong
adk_multiagent_systems/workflow_agents/agent.py, hãy dánParallelAgentmới và các tác nhân phụ củaParallelAgenttrong tiêu đề# Agents.box_office_researcher = Agent( name="box_office_researcher", model=model_name, description="Considers the box office potential of this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Write a report on the box office potential of a movie like that described in PLOT_OUTLINE based on the reported box office performance of other recent films. """, output_key="box_office_report" ) casting_agent = Agent( name="casting_agent", model=model_name, description="Generates casting ideas for this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Generate ideas for casting for the characters described in PLOT_OUTLINE by suggesting actors who have received positive feedback from critics and/or fans when they have played similar roles. """, output_key="casting_report" ) preproduction_team = ParallelAgent( name="preproduction_team", sub_agents=[ box_office_researcher, casting_agent ] ) - Cập nhật danh sách
sub_agentscủafilm_concept_teamSequentialAgentđể thêmpreproduction_teammới (giữawriters_roomvàfile_writer).Thay thế định nghĩafilm_concept_teamhiện có bằng định nghĩa này:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, preproduction_team, file_writer ], ) - Cập nhật
instructioncủa tác nhânfile_writerđể tác nhân này "thu thập" các báo cáo mới từ trạng thái và thêm các báo cáo đó vào tệp.
Thay thế chuỗiinstructionchofile_writerbằng nội dung sau:instruction=""" INSTRUCTIONS: - Create a marketable, contemporary movie title suggestion for the movie described in the PLOT_OUTLINE. If a title has been suggested in PLOT_OUTLINE, you can use it, or replace it with a better one. - Use your 'write_file' tool to create a new txt file with the following arguments: - for a filename, use the movie title - Write to the 'movie_pitches' directory. - For the 'content' to write, include: - The PLOT_OUTLINE - The BOX_OFFICE_REPORT - The CASTING_REPORT PLOT_OUTLINE: { PLOT_OUTLINE? } BOX_OFFICE_REPORT: { box_office_report? } CASTING_REPORT: { casting_report? } """, - Quay lại thẻ ADK Dev UI rồi nhấp vào + New Session (Phiên mới).
- Nhấn
hellođể bắt đầu cuộc trò chuyện. - Khi được nhắc, hãy nhập một ý tưởng mới về nhân vật. Một số ý tưởng:
- nữ diễn viên đã phát minh ra công nghệ Wi-Fi
- một đầu bếp tài năng
- những người chơi chủ chốt trong các triển lãm hội chợ thế giới
- Khi tác nhân hoàn tất công việc, hãy kiểm tra tệp cuối cùng trong thư mục
adk_multiagent_systems/movie_pitches. Giờ đây, tài liệu đó sẽ chứa cốt truyện, báo cáo doanh thu phòng vé và báo cáo dàn diễn viên trong cùng một tài liệu.
Tóm tắt theo phần
Trong phần này, bạn đã tìm hiểu cách sử dụng ParallelAgent:
ParallelAgent"phân phối" công việc, chạy tất cả các tác nhân phụ cùng một lúc, thay vì theo trình tự.- Điều này rất hiệu quả đối với những tác vụ không phụ thuộc vào nhau (chẳng hạn như nghiên cứu hai chủ đề khác nhau).
- Kết quả của các tác nhân song song sẽ được một tác nhân sau đó "thu thập". Việc này được thực hiện bằng cách yêu cầu các tác nhân song song lưu công việc của họ vào trạng thái phiên (bằng cách sử dụng
output_key) và yêu cầu một tác nhân cuối cùng (chẳng hạn nhưfile_writer) đọc các khoá đó.
13. Tác nhân quy trình công việc tuỳ chỉnh
Khi các tác nhân quy trình làm việc được xác định trước của SequentialAgent, LoopAgent và ParallelAgent không đáp ứng được nhu cầu của bạn, CustomAgent sẽ mang đến sự linh hoạt để triển khai logic quy trình làm việc mới.
Bạn có thể xác định các mẫu để kiểm soát luồng, thực thi có điều kiện hoặc quản lý trạng thái giữa các tác nhân phụ. Điều này hữu ích cho các quy trình công việc phức tạp, các hoạt động phối hợp có trạng thái hoặc việc tích hợp logic nghiệp vụ tuỳ chỉnh vào lớp phối hợp của khung.
Việc tạo CustomAgent nằm ngoài phạm vi của phòng thí nghiệm này, nhưng bạn nên biết rằng nó tồn tại nếu bạn cần!
14. Xin chúc mừng!
Bạn đã xây dựng thành công một hệ thống nhiều tác nhân phức tạp bằng Bộ công cụ phát triển tác nhân (ADK) của Google. Bạn đã tiến bộ từ mối quan hệ tác nhân mẹ con đơn giản đến việc điều phối các quy trình làm việc phức tạp, tự động có thể nghiên cứu, viết và tinh chỉnh một dự án sáng tạo.
Tóm tắt
Trong phòng thí nghiệm này, bạn đã thực hiện những việc sau:
- Các tác nhân được sắp xếp trong một cây phân cấp với mối quan hệ giữa tác nhân chính và tác nhân phụ.
- Chuyển cuộc trò chuyện có kiểm soát giữa các nhân viên, cả tự động (bằng
description) và rõ ràng (bằnginstruction). - Sử dụng công cụ để ghi dữ liệu vào từ điển
tool_context.state. - Sử dụng mẫu khoá (ví dụ:
{ PLOT_OUTLINE? }) để đọc trạng thái phiên và hướng dẫn lời nhắc của nhân viên hỗ trợ. - Triển khai một
SequentialAgentđể tạo quy trình làm việc đơn giản, từng bước (nghiên cứu -> viết -> lưu). - Sử dụng
LoopAgentvới một tác nhâncriticvà công cụexit_loopđể tạo một chu trình tinh chỉnh lặp đi lặp lại. - Sử dụng
ParallelAgentđể "phân phối" các tác vụ độc lập (chẳng hạn như truyền tin và nghiên cứu doanh thu phòng vé) để chạy đồng thời.
Tiếp tục thử nghiệm
Có nhiều cách để phát triển những gì bạn đã học. Dưới đây là một số ý tưởng:
- Thêm nhiều nhân viên hỗ trợ: Thử thêm một nhân viên hỗ trợ mới vào
preproduction_teamParallelAgent. Ví dụ: bạn có thể tạo mộtmarketing_agentviết khẩu hiệu cho bộ phim dựa trênPLOT_OUTLINE. - Thêm công cụ: Cung cấp thêm công cụ cho tác nhân AI
researcher. Bạn có thể tạo một công cụ sử dụng API Tìm kiếm của Google để tìm thông tin không có trên Wikipedia. - Khám phá
CustomAgent: Phòng thí nghiệm này đề cập đếnCustomAgentcho những quy trình làm việc không phù hợp với các mẫu tiêu chuẩn. Hãy thử tạo một tác nhân có thể chạy có điều kiện, chẳng hạn như chỉ chạy nếu có một khoá cụ thể trong trạng thái phiên.