Skip to content

构建协作智能体团队

Supported in ADKPython v2.0.0Alpha

某些复杂的任务可能需要多个职责明确的智能体协同工作,并且能从结构化程度较低的过程中受益,特别是对于具有多个实质性子任务的迭代过程。在 ADK 的协作智能体团队中,一个协调者智能体负责将任务委派给一个或多个子智能体。这种方法使得构建复杂的、自我管理的智能体系统变得更加容易,子智能体被定义为处理特定任务,并在完成任务后自动返回到父级。

当使用这种自我管理的智能体团队方法时,子智能体被分配一个运行模式以管理其行为并限制其工作范围。这些模式为子智能体设置了通用行为准则,并创建了更可预测且可靠的多智能体工作流。协作模式有以下设置可用:

  • 聊天 (Chat):完整的用户交互,手动返回父智能体(默认,当前行为)
  • 任务 (Task):仅在需要澄清时进行用户交互,任务完成后自动返回父智能体
  • 单次对话 (Single-turn):无用户交互,自动返回,并且可以并行运行

本指南涵盖了如何为你的子智能体使用模式,以及这些模式如何影响智能体行为。

Alpha 发布版

ADK 2.0 是一个 Alpha 发布版,与之前的 ADK 版本一起使用时可能会导致破坏性变更。如果你需要向后兼容性(例如在生产环境中),请不要使用 ADK 2.0。我们鼓励你测试此版本,并欢迎提供你的 反馈

快速入门

以下代码示例展示了如何为一个小型子智能体团队设置运行模式,并将其分配给一个协调者智能体:

from google.adk.workflow.agents.llm_agent import Agent

# 天气查询智能体
weather_agent = Agent(
    name="weather_checker",
    mode="single_turn",         # 无用户交互
    tools=[get_weather, user_info, geocode_address],
)
# 航班预订智能体
flight_agent = Agent(
    name="flight_booker",
    mode="task",                # 可以向用户提问
    input_schema=FlightInput,
    output_schema=FlightResult,
    tools=[search_flights, book_flight],
)
# 根智能体(协调者)
root = Agent(
    name="travel_planner",      # 协调者智能体
    sub_agents=[weather_agent, flight_agent],
    # 自动注入:request_task_weather_checker, request_task_flight_booker
)

当你运行此工作流时,travel_planner 协调者智能体会自动识别任务并将其分配给子智能体。当子智能体完成任务时,它会自动返回到协调者智能体。 有关在智能体、子智能体和工作流节点中使用 input_schemaoutput_schema 构建数据的更多信息,请参见 智能体工作流的数据处理

模式配置与行为

每种协作模式都有与之相关的特定行为和局限性。下表对比了配置为各模式的子智能体属性:

注意:模式仅适用于子智能体

mode 设置专门用于由父协调者智能体调用的子智能体。请不要为根智能体配置模式设置。

主题 \ 模式 chat (默认) task single_turn
人机协同 (Human in the Loop) 完全交互 仅用于澄清 禁止
用户交互 用户可与智能体自由聊天 智能体根据需要提问 无用户交互
控制流 智能体控制直到手动交回 智能体控制直到任务完成 完成任务后立即返回
并行执行 不支持 不支持 多个任务可并行运行
返回父级 手动(通过 transfer) 自动(通过 complete_task 自动(带结果返回)

表 1. ADK 协作智能体运行模式的行为与限制对比。

运行考量

使用协作智能体模式时,需要考虑一些控制权转移和上下文管理方面的注意事项,如下面各节所述。

工作流节点和智能体转移

配置为 任务 (task)单次对话 (single-turn) 模式的智能体可以作为工作流智能体图节点使用,也可以通过 LlmAgent 实例使用。然而,根据调用方(即父智能体)的不同,执行转移行为会有所区别:

作为工作流图节点:当一个任务智能体被放置在工作流图中(例如 SequentialAgentParallelAgent)时,该智能体会执行其任务。完成后,控制权会根据工作流智能体图的逻辑自动推进到下一个节点。

作为 LlmAgent 的被转移者:当父级 LlmAgent 通过 request_task 将控制权转移给任务智能体时,该任务智能体会一直执行直到调用 complete_task。由于这一点,控制权会自动返回到发起转移的原始智能体。这与默认的 聊天 (chat) 模式智能体不同,后者需要显式的 transfer_to_agent 调用才能交回控制权。

调用上下文 任务完成后
工作流节点 推进到图中的下一个节点
从 LlmAgent 转移 将控制权返回给原始智能体

这种区别允许同一个任务智能体在两种上下文中重用而无需修改。运行时会根据智能体被调用的方式确定合适的控制流。

智能体上下文隔离

每个 任务 (task)单次对话 (single-turn) 模式的智能体都在其独立的会话分支中运行。当这些智能体并行运行时,每个智能体在构建用于 AI 模型调用的上下文时只能看到来自其自身分支的事件,而无法看到对等智能体正在做什么。一旦所有并行分支完成,父智能体就会收到汇总的结果并可以继续后续步骤。

已知限制

智能体协作模式存在一些已知限制:

  • 任务 (Task) 模式智能体必须是叶子智能体,不能拥有子智能体。