A2A
A2A(Agent2Agent)是面向独立 Agent 系统互操作的开放协议:通过 Agent Card 发现能力,以 Message、Task、Artifact 等统一模型交换工作,并通过标准 bindings 暴露跨框架、跨厂商协作边界。
[!info] related notes
- 所属 MOC: Agent MOC, AI MOC
- 前置概念: Agent, Orchestration
- 工具协议: MCP 协议
- 应用内协作: Handoffs, Manager (agents as tools)
- 关系笔记: 多 Agent 编排模式
A2A
当前正式规范主线:A2A v1.0.0。协议版本会继续演进,实现时应以官方 spec 为准。
一句话定义
A2A 是让独立、可能使用不同框架和不同内部实现的 Agent 系统进行发现、任务交换与结果协作的互操作协议。
核心边界是:
双方不需要暴露自己的内部 memory、tools 或推理实现,也可以通过稳定协议合作。
A2A 解决什么问题
如果系统内所有 Agent 都属于同一个 Runtime:
Planner
→ Worker
→ Reviewer
通常直接用内部 orchestration 就够了。
A2A 更适合:
System A Agent
↓
standard protocol
↓
System B Agent
例如跨厂商、跨语言、跨 framework、跨组织安全边界或远程 Agent service。
Agent Card
远程 Agent 需要暴露可发现信息,让调用方知道:
- 它是谁;
- 能做什么;
- 服务入口;
- 支持哪些交互/协议能力;
- 认证要求;
- 输入输出能力。
Agent Card 更像 Agent service 的 capability/connection contract,而不是把内部 prompt、memory 或 tool implementation 公开出去。
核心数据模型
Message
一次交互中的消息,可由多个 content parts 组成。
Task
适合需要状态与生命周期的工作单元,可以持续产生状态或结果,而不只是一次 RPC 返回值。
Artifact
Task 产生的可交付结果,例如报告、文件或结构化数据。
Part
Message / Artifact 内的最小内容单元。
因此核心层次可以记成:
Agent
→ Message
→ maybe Task lifecycle
→ Artifact
Protocol Binding
A2A v1.0 将核心语义与具体 transport/binding 分层。
当前规范包含 JSON-RPC、gRPC、HTTP+JSON/REST 等 bindings。
重点不是必须使用某一种 RPC 风格,而是共享 canonical data model 与 operations,再映射到具体协议 binding。
长任务与增量更新
Agent 工作可能不是立即返回,因此协议需要表达:
- task status;
- streaming update;
- artifact 增量;
- asynchronous completion;
等生命周期语义。
Security Boundary
A2A 并不意味着“发现到 Agent 就可以调用一切”。
远程 Agent service 仍需要:
- authentication;
- authorization;
- TLS;
- tenant/data isolation;
- input validation;
- audit/trace;
- capability exposure control。
协议互操作不会自动解决业务权限。
A2A vs MCP
最短区别:
MCP
Agent / Host ↔ Tools / Resources
A2A
Agent System ↔ Agent System
MCP 让一个 Agent 获得外部能力;A2A 让一个独立 Agent 与另一个独立 Agent 协作。
两者可以组合:
Agent A
├─ MCP → GitHub / DB / Search tools
└─ A2A → Remote Specialist Agent B
A2A vs Handoff
Handoff 经常发生在一个产品/Runtime 内;A2A 强调 interoperable system boundary。
一个 handoff implementation 可以使用 A2A,但 handoff 本身不等于 A2A。
A2A vs Orchestration
Orchestration 回答:谁决定下一步由谁做、何时并行、何时停止?
A2A 回答:当需要与另一个 Agent system 交互时,双方怎样用共同协议交换任务与结果?
因此 orchestration 可以选择使用 A2A 作为 remote-agent communication layer。
什么时候不需要 A2A
如果 Agent 全部在同一进程/Runtime,内部函数调用已经足够,又没有跨团队/跨厂商互操作需求,就不必为了“多 Agent”默认增加协议边界。
学习检查
不看正文回答:
- A2A 的核心问题为什么不是“多 Agent 怎么编排”,而是“独立 Agent system 怎么互操作”?
- Agent Card 解决什么发现/契约问题?
- Message、Task、Artifact、Part 分别是什么层级?
- 为什么长任务需要 Task lifecycle,而不只是一次 RPC 返回?
- Protocol data model 与 JSON-RPC/gRPC/REST binding 为什么要分层?
- A2A 与 MCP 分别位于哪个边界?
- Handoff 与 A2A 为什么可能组合但不等价?
- 给一个公司内部客服 Agent 调用外部物流 Agent 的场景,画出 discovery、auth、task、artifact 与 orchestration 边界。