A2A协议与Agent互操作-Task生命周期

📅 2026/7/14 4:20:55
A2A协议与Agent互操作-Task生命周期
A2A 协议与 Agent 互操作 · Task 生命周期 返回 07-README ⬅️ 13-跨语言混合栈 ➡️ 15-MCP生产宿主定位Agent↔Agent 任务委托的 Staff 专章——Task 生命周期、JSON-RPC/SSE、与 MCP/gRPC 分工。机制散见 04 §8、05 §A2A。§0 面试前 30 分钟 Checklist时间动作5 min背三协议分工A2A / MCP / gRPC5 min画Task 状态机submitted→working→completed/failed5 min口述Artifact vs Tool 结果5 min链release_id与 11 Registry5 min准备§11 STAR超时雪崩5 min过§12 RunbookQ1–Q10开场金句90s「A2A解决Agent 之间派活有状态 Task、可流式进度、可取消MCP解决调工具——单步、无状态。我们 Java Supervisor 对内用gRPC Task13对外联盟伙伴用A2A无论哪种都绑release_idWorker 不信对方传来的订单金额。」L1 · 是什么1.1 一句话A2AAgent2Agent 开放Agent 互操作协议用标准Task抽象把「请另一个 Agent 完成目标」变成可审计、可版本化、可跨厂商的 API——编排层不替代 MCP。1.2 三协议对照必背协议抽象状态典型传输本库章节MCPTool / Resource无状态单步stdio / SSE15A2ATask / Message / Artifact有状态多步HTTP JSON-RPC SSE本篇gRPC Task内部 Protobuf有状态gRPC13A2A TaskgRPCMCP tools/callSupervisor AgentPartner AgentPython WorkerOrder MCP Server1.3 何时用 A2A用 A2A不用 A2A跨团队 / 跨云Agent 能力外包同进程 Multi-Agent内存总线需要任务进度流式推送单次查库存MCP联盟生态互认强同步低延迟内网gRPC1.4 与 Multi-Agent 拓扑的关系拓扑A2A 角色Supervisor–WorkerSupervisor 对外发 A2A Task对等协商双向 Task需冲突解决流水线上游 Artifact 作下游 Task context对照05-Multi-Agent、demo multi-agent-supervisor-springai。L2 · Task 生命周期深展2.1 状态机worker acceptsartifact readyerrorcancel RPCpolicy denysubmittedworkingcompletedfailedcancelledrejected状态含义Supervisor 动作submitted已创建未执行可取消working执行中订阅 SSE / 轮询 getcompleted终态成功取 Artifactfailed终态失败降级 / 转人工cancelled用户或上游取消清理副作用rejected策略拒绝记录 audit不 retry send2.2 核心对象对象字段示意说明Taskid,goal,context,metadata.release_id委托请求Messagerole,parts[]对话片段Artifactparts[],structured_output交付物非 Tool 日志与 [13] gRPC 对齐AgentTask/AgentArtifact是内部实现对外 A2A 用 JSON 字段名遵循开放规范。2.3 JSON-RPC 方法矩阵方法幂等用途tasks/send是同 task_id创建并可选立即执行tasks/get是轮询状态tasks/cancel是取消 workingtasks/subscribe只读流SSE 进度Staffsend必须客户端生成全局唯一 task_id服务端以 task_id 去重。2.4 SSE 事件类型event含义客户端处理status-updateworking 进度更新 UIartifact-update部分交付增量展示error可恢复错误退避重连done流结束再get确认终态2.5 非法迁移 Goldencase期望completed → workingrejectcancel 后 MCP 写无写重复 send 同 id返回同一 TaskL3 · 生产落地3.1 安全与信任规则原因Task 只带case_id / 槽位防 PII、防篡改金额Worker重查权威服务不信 Supervisor 转述mTLS tenant_id联盟多租户release_id在 metadata对齐 113.2 超时与背压层策略Client总 deadline如 120sServer队列深度上限 →rejected重试仅get幂等不盲重发send3.3 与 Registry / Eval绑定说明metadata.release_id全链归因Golden测非法状态迁移、cancel 后无写Gatetask_failed_rate阈值非 Tool 层指标3.4 Java 实现要点组件建议入口Spring MVC/a2aSseEmitter鉴权Gateway OAuth2 scopea2a:invoke执行线程池隔离Worker 池 bulkhead审计每个 Task 写trace_id3.5 Python Worker 要点组件建议框架FastAPI Pydantic Task 模型引擎LangGraph 子图作 Worker取消cooperative cancel token 传 ToolWorker AgentA2A ServerSupervisorWorker AgentA2A ServerSupervisortasks/send task_iddispatchSSE status-updateSSE forwardartifacttasks/get completedL7 · 失败模式目录A2A现象根因止血根治重复 send 风暴把 send 当非幂等熔断只重试 getGolden 重复 sendSSE 断连丢终态只靠 SSE断连后 get终态以 get 为准Artifact 含 PIITool 日志直出结构化脱敏Schema 审查跨租户 Taskmetadata 未校验rejectedGateway 强制 tenantrelease 漂移未 pin WorkerRegistry 门禁双组件 release_idL8 · 迁移路径四阶段阶段动作验收P0内网 gRPC Task 稳定[13] Golden 绿P1只读 A2A 查询伙伴无写 ToolP2写路径 MCP 白名单illegal_tool_rate0P3联盟 SSE SLAtask_failed_rate 达标L9 · 与 Browser / VIP 场景场景A2A 用法Browser外包「复杂填表」给伙伴 Agent本库主路径 05bVIP外包「私人造型」Agent金额承诺仍在 Java 控制面L10 · Runnable 对照工件路径Java Supervisormulti-agent-supervisor-springaiGolden 校验validate_golden.py知识库地图AGENT-KNOWLEDGE-BASE-MAPL11 · Staff 答辩STARA2A 重试风暴要素内容S联盟 Worker 429Supervisor 重试 tasks/send 放大流量A改幂等 task_id指数退避熔断只重试 getM把 send 当非幂等导致重复副作用P限流恢复Golden 增重复 send 负例STARSSE 断连误判失败要素内容S移动端 SSE 断连Supervisor 当 failed 触发补偿写A终态以 get 为准补偿前再 get写操作幂等M补偿写重复发货P关闭自动补偿Runbook 强制 get 二次确认Q1 · A2A 和 MCP标准答案编排 vs ToolTask 有状态 vs tools/call 单步。追问MCP 能否承载多步→ 可以但不推荐审计差。Q2 · 为何不全用 A2A 替代 gRPC标准答案内网延迟、Protobuf 演进、团队边界。追问联盟伙伴只支持 REST 怎么办→ Gateway 翻译。Q3 · Artifact 放什么标准答案结构化结论引用不放全量 Tool 日志。追问需要中间推理链吗→ 进 Trace不进 Artifact。Q4 · 如何版本化标准答案metadata.release_id capability 协商。追问伙伴未升级 schema→ rejected 降级路径。Q5 · OpenClaw 能当 A2A Server标准答案不适合生产见 12。追问个人 Agent 数据驻留→ 企业禁。Q6 · cancel 后副作用标准答案Worker cooperative cancelMCP 写需幂等。追问已写一半怎么办→ saga 补偿。Q7 · 多 Task 并行标准答案Supervisor 预算分配每 Task 独立 task_id。追问共享上下文→ context_slice 最小化。Q8 · A2A 指标标准答案task_failed_rate、P99 latency、cancel 成功率。追问与 Eval acc 关系→ 正交都过才发版。Q9 · 谁生成 task_id标准答案调用方 SupervisorUUIDv7 推荐。追问服务端生成→ 不利于幂等重试。Q10 · 与 Temporal标准答案Temporal 长流程A2A 短委托见 04-java/04。追问二选一→ 组合。L12 · Oncall Runbooktask_failed_rate 告警按 release_id 分组失败率抽样 5 条 Task trace 看 failed 原因若 429 → 降并发 退避若 schema → 回滚 Registry tool_schema 或 Worker恢复后跑 Golden illegal 迁移§15 Checklist三协议分工Task 六状态SSE vs 轮询send 幂等 task_id不信转述金额release_id 透传cancel 无写Golden 非法迁移§16 导航关联路径跨语言 gRPC13MCP15Multi-Agent05完整知识库AGENT-KNOWLEDGE-BASE-MAPL1Model Context ProtocolGoogle A2ASpring AI MCPL2gRPC DeadlinesL4 · 参数与容量深展2.6 生产参数卡 #1参数推荐值说明task_timeout_sec65单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks21Worker 背压retry_get_max3仅 get 重试2.7 生产参数卡 #2参数推荐值说明task_timeout_sec70单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks22Worker 背压retry_get_max3仅 get 重试2.8 生产参数卡 #3参数推荐值说明task_timeout_sec75单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks23Worker 背压retry_get_max3仅 get 重试2.9 生产参数卡 #4参数推荐值说明task_timeout_sec80单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks24Worker 背压retry_get_max3仅 get 重试2.10 生产参数卡 #5参数推荐值说明task_timeout_sec85单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks25Worker 背压retry_get_max3仅 get 重试2.11 生产参数卡 #6参数推荐值说明task_timeout_sec90单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks26Worker 背压retry_get_max3仅 get 重试2.12 生产参数卡 #7参数推荐值说明task_timeout_sec95单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks27Worker 背压retry_get_max3仅 get 重试2.13 生产参数卡 #8参数推荐值说明task_timeout_sec100单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks28Worker 背压retry_get_max3仅 get 重试2.14 生产参数卡 #9参数推荐值说明task_timeout_sec105单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks29Worker 背压retry_get_max3仅 get 重试2.15 生产参数卡 #10参数推荐值说明task_timeout_sec110单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks30Worker 背压retry_get_max3仅 get 重试2.16 生产参数卡 #11参数推荐值说明task_timeout_sec115单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks31Worker 背压retry_get_max3仅 get 重试2.17 生产参数卡 #12参数推荐值说明task_timeout_sec120单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks32Worker 背压retry_get_max3仅 get 重试2.18 生产参数卡 #13参数推荐值说明task_timeout_sec125单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks33Worker 背压retry_get_max3仅 get 重试2.19 生产参数卡 #14参数推荐值说明task_timeout_sec130单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks34Worker 背压retry_get_max3仅 get 重试2.20 生产参数卡 #15参数推荐值说明task_timeout_sec135单 Task 上限sse_heartbeat_sec15保活max_concurrent_tasks35Worker 背压retry_get_max3仅 get 重试