多 Agent 协作:入站服务 + 出站委托同进程链式执行

多 Agent 协作:入站服务 + 出站委托同进程链式执行 由 Archify 生成的时序图。 GET /.well-known/agent-card.json AgentCard(本端技能与认证要求) POST SendMessage{message, contextId} worker 线程:newSession().run(message) 模型决策 → A2ATool 工具调用 {message} discover → SendMessage(独立的下游任务) result.task / SSE 事件 工具结果文本回填 AgentResult → transition(COMPLETED) result.task(COMPLETED + artifacts) SubscribeToTask / CancelTask → 本跳 cancel(true) 入站:取卡与发任务 推理 + 出站委托 结果 · 订阅 · 取消 外部调用方 · 上游 A2A 客户端 · 时序参与者 外部调用方 上游 A2A 客户端 A2AServer · 入站 · TaskHandler · 时序参与者 A2AServer 入站 · TaskHandler 本地 Agent · AgentSession 推理 · 时序参与者 本地 Agent AgentSession 推理 A2AClient · 出站 · 经 A2ATool · 时序参与者 A2AClient 出站 · 经 A2ATool 下游 Agent · 另一 A2A 服务 · 时序参与者 下游 Agent 另一 A2A 服务 图例 请求 返回 安全 默认消息

任务边界

  • • 每跳任务独立:上游 taskId / contextId 不透传到下游;A2ATool 只转发 message 文本(A2ATool.java:37-40)
  • • 跨跳关联由编排层负责,协议本身无分布式事务

同进程双角色

  • • A2AServer(入站)与 A2AClient(出站)互不依赖,可同进程共存
  • • 入站跑 workerExecutor(≤32)、出站走 client 自身连接;上游只见本端终态

中断传播

  • • CancelTask 只取消本跳(future.cancel(true) :784-794);下游取消需再发一次
  • • COMPLETED / FAILED / CANCELED 终态不可逆(TaskState.java:116-126)