SubAgent 委托:模型工具调用如何路由到子 Agent

SubAgent 委托:模型工具调用如何路由到子 Agent 由 Archify 生成的时序图。 execute(call):模型发出 tool_call supports(toolName)?命中 subagent_* 未命中 → delegate.execute(call) 走普通工具 HANDOFF_START · depth+1 · policy 检查通过 run(task, context) → 目标 Agent NEW_SESSION 或 REUSE_SESSION 会话 子 Agent 同步跑完循环 → AgentResult output HANDOFF_END · completed / failed 工具结果回填 → 主循环继续 工具路由 · 策略检查 子 Agent 执行 · 结果回填 主 Agent · BaseAgentRuntime · 时序参与者 主 Agent BaseAgentRuntime SubAgent 执行器 · SubAgentToolExecutor · 时序参与者 SubAgent 执行器 SubAgentToolExecutor SubAgent 注册表 · StaticSubAgentRegistry · 时序参与者 SubAgent 注册表 StaticSubAgentRegistry 子 Agent · 独立 session · 时序参与者 子 Agent 独立 session 事件总线 · AgentEventPublisher · 时序参与者 事件总线 AgentEventPublisher 普通工具 · ToolExecutor 委托 · 时序参与者 普通工具 ToolExecutor 委托 图例 请求 返回 安全 异步追踪 默认消息

工具即子 Agent

  • • StaticSubAgentRegistry 把每个 SubAgentDefinition 暴露成工具:默认 toolName=subagent_<名>,参数 {task*, context}(StaticSubAgentRegistry.java:156-191)
  • • SubAgentToolExecutor 按 supports(toolName) 分流;普通调用转给配置的主执行器(SubAgentToolExecutor.java:67-101)

HandoffPolicy 闸门

  • • maxDepth(默认1)/allowedTools/deniedTools/inputFilter 先检后行;onDenied/onError 默认 FAIL,可配 FALLBACK 回退主执行器(HandoffPolicy.java:19-49)
  • • maxRetries+timeoutMillis 控制重试与超时;每次 handoff 发 HANDOFF_START/END 事件(SubAgentToolExecutor.java:110-152)

会话边界

  • • SubAgentSessionMode:NEW_SESSION 每次新建;REUSE_SESSION 按 toolName 复用同一会话(StaticSubAgentRegistry.java:131-163)
  • • 子 Agent 同步阻塞返回 output;会话不共享——这是内部工具委托,不是 A2A 外部协议