Skip to content

构建协作智能体团队

Supported in ADKPython v2.0.0Alpha

某些复杂的任务可能需要多个职责明确的智能体协同工作。对于包含多个实质性子任务的迭代过程,协作智能体团队能够从这种结构化且灵活的过程中受益。在 ADK 的协作架构中,一个协调者智能体 (Coordinator Agent) 负责将具体任务委派给一个或多个子智能体 (Sub-agents)。这种方法降低了构建自我管理式复杂系统的门槛:子智能体被定义为处理特定专项任务,并在任务完成后自动将控制权交回给父级。

为了管理子智能体的行为并限制其工作范围,你可以为它们分配特定的运行模式 (Modes)。这些模式为子智能体设定了通用的行为准则,从而打造出更可预测、更可靠的多智能体工作流。ADK 提供了以下协作模式:

  • 聊天 (Chat):完整的用户交互模式,需要手动将控制权返回给父智能体(这是默认行为)。
  • 任务 (Task):仅在需要澄清或补充信息时与用户交互,任务完成后自动返回父智能体。
  • 单次对话 (Single-turn):禁止用户交互,自动返回结果,且支持任务并行运行。

本指南将向你介绍如何为子智能体配置这些模式,以及这些模式如何影响系统的整体行为。

Alpha 发布版说明

ADK 2.0 目前处于 Alpha 阶段,与早期版本相比可能存在破坏性变更。如果你对向后兼容性(如生产环境)有严格要求,请谨慎使用。我们非常欢迎你测试该版本并提供你的反馈意见


快速入门

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

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
人机协同 (HITL) 完全交互 仅用于澄清事实 禁止交互
用户交互感 用户可与该子智能体自由对话 智能体仅在有疑问时主动提问 对用户透明(静默运行)
控制流逻辑 归属于智能体,直至手动释放 归属于智能体,直至任务完成 任务产出结果后立即返回
并行执行支持 不支持 不支持 支持(多个任务并发运行)
返回父级机制 需要调用 transfer 手动交回 自动交回 (通过 complete_task) 自动交回 (携带执行结果)

表 1. ADK 协作模式行为与限制对比表。


运行考量

在使用协作模式时,你需要特别关注控制权转移和上下文隔离的管理。

工作流节点与智能体转移

配置为 任务 (Task)单次对话 (Single-turn) 模式的智能体不仅可以作为独立的 LlmAgent 实例使用,还可以充当工作流图中的节点。其具体的控制权流转行为取决于调用方:

  • 作为图节点 (Graph Node):当任务智能体被放置在工作流图中(如在 SequentialAgentParallelAgent 中)时,它会执行分配的任务。完成后,控制权会按照图定义的逻辑自动流转至下一个节点。
  • 作为 LlmAgent 的转移目标:当父级 LlmAgent 通过 request_task 将控制权交给任务智能体时,该智能体会持续运行直至调用 complete_task。由于 ADK 的自动化机制,完成后控制权会自动重定向回发起任务的原始父级智能体。这显著优于默认的 chat 模式,后者需要显式的 transfer_to_agent 调用才能实现逻辑闭环。
调用上下文环境 任务完成后的行为
作为工作流图节点 自动推进到图中的邻接节点
由 LlmAgent 转移调用 自动将控制权交还给发起方

这种设计允许你在不修改任何代码的情况下,在不同场景中复用同一个任务智能体,运行时会自动识别调用上下文并匹配最优的控制流。

智能体上下文隔离

任务 (Task)单次对话 (Single-turn) 模式下工作的智能体均在独立的会话分支 (Session Branch) 中运行。这意味着在任务并发期间,各个智能体只能访问其自身分支内的事件流,无法“感知”到对等智能体的实时动作。这种隔离机制确保了任务的独立性与安全性。一旦所有分支执行完毕,父级协调者将收到汇总后的多路执行结果,并据此决定后续的全局动作。


已知局限性

目前协作模式存在以下已知限制:

  • 层级限制:处于 任务 (Task) 模式的智能体必须作为末梢智能体 (Leaf Agent),暂不支持配置下属的子智能体。