A2A (Agent-to-Agent) 协议详解
A2A 是一个开放协议,让不同框架、不同厂商、不同服务器上运行的 AI Agent 能够互相通信和协作。当前版本 v1.0.0。
一、原始内容概述
1.1 什么是 A2A
A2A(Agent-to-Agent,代理间通信协议)是一个开放协议,由 Google 贡献给 Linux Foundation 作为开源项目,Apache 2.0 许可。当前版本为 v1.0.0(正式发布版)。
它的核心使命是:让不同框架、不同厂商、不同服务器上运行的 AI Agent 能够像 Agent 一样互相通信和协作——而不是作为对方的"工具"。
1.2 核心问题
A2A 解决的核心问题是:异构 AI Agent 系统之间如何实现互操作?
- Agent 可能用不同框架构建(ADK、LangGraph、BeeAI 等)
- Agent 可能由不同公司运营(跨企业协作)
- Agent 运行在不同服务器上(跨信任边界)
- Agent 不能暴露内部状态、记忆或工具
A2A 的答案:定义一套通用语言,让 Agent 发现彼此、协商交互、安全协作,同时保持各自的不透明性。
1.3 核心设计原则
- 简单:复用成熟标准(HTTP、JSON-RPC 2.0、SSE)
- 企业就绪:认证、授权、审计、追踪
- 异步优先:长耗时任务和 HITL
- 模态无关:文本、文件、结构化数据、音视频
- 透明执行:不共享内部状态
1.4 三层架构
L1 — 数据模型层:Task、Message、Part、Artifact、AgentCard、Extension
L2 — 操作层:Send Message、Send Streaming Message、Get Task、List Tasks、Cancel Task、Get Agent Card
L3 — 协议绑定层:JSON-RPC over HTTP(S)、gRPC、HTTP+JSON/REST
1.5 Agent 卡片(Agent Card)
Agent Card 是 JSON 格式的"名片",包含身份信息、能力、技能、端点 URL、认证要求、租户标识。
1.6 任务生命周期
SUBMITTED → WORKING → COMPLETED / FAILED / CANCELED / REJECTED
1.7 三种交互模式
① 同步请求/响应:立即返回 Task 或 Message
② 流式交互:SSE 连接,实时推送中间结果
③ 异步推送通知:webhook URL,服务器主动 POST
1.8 官方 SDK
- Python:
pip install a2a-sdk - JavaScript:
npm install @a2a-js/sdk - Go:
go get github.com/a2aproject/a2a-go - Java、.NET、Rust 均有 SDK
二、使用场景举例
场景 1:跨 Agent 任务委派
主 Agent 通过 Agent Card 发现 Travel Agent 和 Hotel Agent,分别委派机票和酒店任务,子 Agent 各自处理返回结果。
场景 2:人机协同审批
Agent A 提交报销审批 Task(状态 WORKING),等待主管审批(HITL),完成后 Task 变 COMPLETED。
场景 3:流式数据分析报告
分析 Agent 流式返回中间结果,最终输出完整报告 Artifact,客户端实时看到分析进度。
场景 4:跨企业 Agent 协作
企业 A 的供应链 Agent 查询企业 B 的库存 Agent——跨信任边界的协作典范。
场景 5:多框架异构 Agent 协同
ADK + LangGraph + BeeAI 的 Agent 通过 A2A 在同一工作流中协作。
三、最佳实践
Agent 卡片设计
- 精确描述能力,不夸大
- 明确认证要求
- 版本管理
Task 管理
- 合理使用 historyLength
- 游标分页而非 offset
- contextId 关联对话
错误处理
- 区分可重试和不可重试错误
- 流式中断后 Get Task 恢复
- 考虑幂等性
安全
- 始终验证 Agent Card
- 能力最小化
- 数据最小化
- 全程 HTTPS
四、避坑指南
- 混淆 Send/Streaming Message
- 忽视流式中断恢复
- 不使用 contextId
- Push notification URL 不可达
- 向终态 Task 发消息:返回 UnsupportedOperationError
- 长轮询代替流式/推送
- 忽略 historyLength 限制
- 信任非 HTTPS 端点
- Agent Card 未经验证
- 缺少数据访问隔离
五、集成方需要做的工作
A2A Server(暴露 Agent)
- 选择 SDK,实现核心操作
- 定义并暴露 Agent Card
- 配置认证与授权
- 实现 Task 生命周期
- 支持 Streaming 和 Push Notification
A2A Client(调用 Agent)
- 发现 Agent,解析 Agent Card
- 调用 sendMessage,处理返回的 Task
- 处理错误和重试
基础设施集成
- Agent 注册中心(可选)
- 监控与追踪
- 安全网关和 API 网关
- 长任务管理
文章评论