Agent as Tool và Handoff
Trong OpenAI Agents SDK, "Agent as Tool" và "Handoff" là hai khái niệm quan trọng giúp xây dựng quy trình cộng tác linh hoạt giữa các agent. Dưới đây là giải thích chi tiết:
1. "Agent as Tool" – Biến Agent thành một công cụ
Mục tiêu:
Biến một agent thành một tool có thể được gọi bởi agent khác, giống như cách ta gọi một hàm hay API.
Cách hoạt động:
-
Một agent có thể được đóng gói (wrap) lại dưới dạng tool bằng
.as_tool()
để sử dụng trong agent khác. -
Giúp chia nhiệm vụ thành các thành phần nhỏ và có thể tái sử dụng.
tool_1 = sales_agent_1.as_tool( name="Sales_Agent_1", description="Viết cold email chuyên nghiệp" ) # Dùng trong một agent điều phối: agent_coordinator = autogen.AssistantAgent( name="Coordinator", llm_config=..., tools=[tool_1, other_tool] )
-
Lợi ích:
-
Tái sử dụng agent như module.
-
Gọi theo yêu cầu như API.
-
Dễ mở rộng và test từng phần riêng.
-
2. Handoff – Chuyển nhiệm vụ giữa các agent
Mục tiêu:
Cho phép agent này chuyển giao nhiệm vụ (task) cho agent khác khi cần sự hỗ trợ chuyên sâu.
Cách hoạt động:
-
Khi một agent gặp câu hỏi không thể trả lời hoặc thuộc lĩnh vực khác, nó sẽ chuyển giao phiên hội thoại (handoff) cho một agent khác có chuyên môn phù hợp.
-
Không gọi như tool, mà là chuyển luôn vai trò xử lý.
agent_1 = autogen.AssistantAgent(...) agent_2 = autogen.AssistantAgent(...) # Runner có thể tạo ra chuỗi hội thoại luân phiên (handoff) runner = autogen.Runner(...) runner.run([agent_1, agent_2])
-
Lợi ích:
-
Mô phỏng hội thoại con người với nhiều chuyên gia.
-
Phù hợp cho hệ thống đa lĩnh vực.
-
Mỗi agent giữ phiên và ngữ cảnh của mình.
-
So sánh nhanh:
Khía cạnh | Agent as Tool | Handoff |
---|---|---|
Cách gọi | Gọi như một API | Chuyển luôn vai trò trả lời |
Tái sử dụng | Cao | Thấp hơn |
Kiểm soát luồng logic | Do agent chủ động điều phối | Tự động tùy theo nội dung hội thoại |
Duy trì hội thoại | Không giữ hội thoại | Giữ ngữ cảnh và phiên |
Dùng khi nào? | Khi cần gọi tác vụ cụ thể | Khi cần chuyển giao vai trò chuyên gia |
Ví dụ đầy đủ về cách thiết lập handoff giữa nhiều agent bằng OpenAI Agent SDK, mô phỏng một quy trình bán hàng nơi agent có thể chuyển tiếp (handoff) nhiệm vụ nếu không thuộc chuyên môn của mình.
Tình huống
Chúng ta có:
-
agent_sales
: chuyên viết email bán hàng. -
agent_legal
: chuyên xử lý câu hỏi pháp lý. -
agent_support
: chuyên trả lời câu hỏi hậu mãi.
Chúng ta sẽ chạy một hội thoại qua autogen.runner
và để các agent tự động "handoff" khi nội dung vượt khỏi chuyên môn của họ.
Cài đặt các Agent
from autogen import AssistantAgent, UserProxyAgent, run
# User agent
user_proxy = UserProxyAgent(name="user", human_input_mode="NEVER")
# Sales Agent
agent_sales = AssistantAgent(
name="sales_agent",
llm_config={"config_list": config_list},
system_message="Bạn là nhân viên bán hàng. Hãy tư vấn sản phẩm và viết email chào hàng."
)
# Legal Agent
agent_legal = AssistantAgent(
name="legal_agent",
llm_config={"config_list": config_list},
system_message="Bạn là cố vấn pháp lý. Hãy trả lời các câu hỏi pháp lý hoặc điều khoản hợp đồng."
)
# Support Agent
agent_support = AssistantAgent(
name="support_agent",
llm_config={"config_list": config_list},
system_message="Bạn là nhân viên hỗ trợ kỹ thuật. Hãy giải quyết các thắc mắc về sản phẩm sau bán hàng."
)
Chạy Handoff Tự Động với run()
run(
[user_proxy, agent_sales, agent_legal, agent_support],
# user gửi 1 câu hỏi tổng hợp
messages=[
{"role": "user", "content": """
Tôi cần mua phần mềm quản lý doanh nghiệp. Hãy gửi tôi email báo giá.
Ngoài ra, chính sách bảo hành của công ty là gì? Và hợp đồng có điều khoản hoàn tiền không?
"""}
]
)
-
sales_agent
xử lý phần báo giá và email. -
Khi gặp câu hỏi về bảo hành, agent sẽ handoff cho
support_agent
. -
Nếu xuất hiện câu hỏi pháp lý về hoàn tiền, agent sẽ handoff tiếp cho
legal_agent
.
Ghi chú
-
Không cần dùng
.as_tool()
trong ví dụ này. -
Mỗi agent sẽ tự động nhận biết nội dung phù hợp với mình và trả lời, hoặc "im lặng" nếu không liên quan.
-
run()
sẽ điều phối vòng hội thoại cho đến khi kết thúc.
Không có bình luận