Nhảy đến nội dung chính

Agent as Tool và Handoff

Trong OpenAI Agents SDK, "Agent as Tool""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.