构建协作智能体团队¶
某些复杂的任务可能需要多个职责明确的智能体协同工作,并且能从结构化程度较低的过程中受益,特别是对于具有多个实质性子任务的迭代过程。在 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_schema 和 output_schema 构建数据的更多信息,请参见 智能体工作流的数据处理。
模式配置与行为¶
每种协作模式都有与之相关的特定行为和局限性。下表对比了配置为各模式的子智能体属性:
注意:模式仅适用于子智能体
mode 设置专门用于由父协调者智能体调用的子智能体。请不要为根智能体配置模式设置。
| 主题 \ 模式 | chat (默认) |
task |
single_turn |
|---|---|---|---|
| 人机协同 (Human in the Loop) | 完全交互 | 仅用于澄清 | 禁止 |
| 用户交互 | 用户可与智能体自由聊天 | 智能体根据需要提问 | 无用户交互 |
| 控制流 | 智能体控制直到手动交回 | 智能体控制直到任务完成 | 完成任务后立即返回 |
| 并行执行 | 不支持 | 不支持 | 多个任务可并行运行 |
| 返回父级 | 手动(通过 transfer) | 自动(通过 complete_task) |
自动(带结果返回) |
表 1. ADK 协作智能体运行模式的行为与限制对比。
运行考量¶
使用协作智能体模式时,需要考虑一些控制权转移和上下文管理方面的注意事项,如下面各节所述。
工作流节点和智能体转移¶
配置为 任务 (task) 或 单次对话 (single-turn) 模式的智能体可以作为工作流智能体图节点使用,也可以通过 LlmAgent 实例使用。然而,根据调用方(即父智能体)的不同,执行转移行为会有所区别:
作为工作流图节点:当一个任务智能体被放置在工作流图中(例如 SequentialAgent、ParallelAgent)时,该智能体会执行其任务。完成后,控制权会根据工作流智能体图的逻辑自动推进到下一个节点。
作为 LlmAgent 的被转移者:当父级 LlmAgent 通过 request_task 将控制权转移给任务智能体时,该任务智能体会一直执行直到调用 complete_task。由于这一点,控制权会自动返回到发起转移的原始智能体。这与默认的 聊天 (chat) 模式智能体不同,后者需要显式的 transfer_to_agent 调用才能交回控制权。
| 调用上下文 | 任务完成后 |
|---|---|
| 工作流节点 | 推进到图中的下一个节点 |
| 从 LlmAgent 转移 | 将控制权返回给原始智能体 |
这种区别允许同一个任务智能体在两种上下文中重用而无需修改。运行时会根据智能体被调用的方式确定合适的控制流。
智能体上下文隔离¶
每个 任务 (task) 或 单次对话 (single-turn) 模式的智能体都在其独立的会话分支中运行。当这些智能体并行运行时,每个智能体在构建用于 AI 模型调用的上下文时只能看到来自其自身分支的事件,而无法看到对等智能体正在做什么。一旦所有并行分支完成,父智能体就会收到汇总的结果并可以继续后续步骤。
已知限制¶
智能体协作模式存在一些已知限制:
- 任务 (Task) 模式智能体必须是叶子智能体,不能拥有子智能体。