一、背景
在 AI 应用的下一个阶段,单一智能体(Agent)的能力不再足够。现实中,我们需要多个由不同厂商、不同语言、不同框架构建的智能体协作,才能完成复杂业务。
Agent-to-Agent(A2A)协议正是为了解决这种异构智能体之间的互操作、协作和安全通信问题而生的。
A2A 协议是一个开放标准,旨在为独立、甚至彼此“黑箱”的 AI 智能体系统提供统一的语言和交互模型,让它们能够安全地发现彼此、交换信息、协同完成任务,而无需暴露内部实现。
二、A2A 协议的核心目标
- 互操作性:让不同厂商、不同技术栈的 Agent 无障碍通信。
- 协作能力:支持任务委派、上下文交换、联合处理复杂需求。
- 动态发现:支持自动发现其他 Agent 及其能力。
- 多模式交互:支持文本、文件、结构化数据、流式更新(SSE)等多种模式。
- 安全通信:对接企业级安全标准(HTTPS、TLS、OAuth 等)。
- 异步优先:原生支持长任务、流式输出及人类介入场景。
三、关键概念
A2A(Agent-to-Agent)协议围绕一组核心实体和交互模式展开,这些概念共同构成了一个标准化的多智能体通信与协作模型。
1. A2A Client
A2A Client 是协议的调用方,通常是:
- 用户直接控制的应用(如前端页面、CLI 工具)
- 另一个智能体(Agent)充当客户端角色
特点
- 发起所有与远程 Agent(A2A Server)的通信
- 负责会话管理、任务状态跟踪
- 可能在一个任务中充当 多重角色(既是消费者,也可能作为中间代理)
实际意义
- 在跨 Agent 协作中,一个 Agent 可以是某个会话的 Client,同时在另一会话中充当 Server。
- 有利于构建 双向协作 或 多跳任务分发 场景。
2. A2A Server(Remote Agent)
A2A Server 是实现了协议规范的远程服务端 Agent,提供 API 接口用于任务处理。
特点
- 通过 HTTP(S) 暴露接口
- 在 AgentCard 中声明支持的传输协议、功能和安全要求
- 完全隐藏内部实现(Opaque Execution)
实际意义
- 使不同厂商的 Agent 能像“黑盒”一样接入,只需要遵守 A2A 的交互规范即可。
- 对于企业而言,可以安全地将内部 AI 服务暴露给外部合作方而不泄露内部逻辑。
3. Agent Card
Agent Card 是一个 JSON 格式的元数据清单,是 Client 发现和理解 Server 的入口。
主要字段
基本信息:名称、描述、版本、提供方(organization、URL)
通信接口:
url
(主 URL)与preferredTransport
(优先传输协议)additionalInterfaces
(额外的 URL/协议组合)
能力声明(capabilities):
streaming
:是否支持 SSE 流式更新pushNotifications
:是否支持异步推送stateTransitionHistory
:是否保存任务状态历史
安全声明(securitySchemes / security):认证方式和授权策略
技能列表(skills):该 Agent 可执行的具体功能
默认 I/O 类型:默认的输入、输出 MIME 类型
实际意义
类似于服务发现与接口契约的结合版
Client 在调用前即可明确:
- 能做什么(技能)
- 怎么做(传输协议)
- 怎么连(URL)
- 需要什么认证
4. Task
Task 是 A2A 中的核心工作单元,代表一个有状态的任务实例。一个 Task 代表一次完整的有状态交互。
属性
- id:唯一标识符
- contextId:上下文分组 ID(每个 Task 的 contextId 表示它属于哪个 Context)
- status:当前状态(TaskState)
- history:消息历史记录
- artifacts:任务产物(输出文件、结构化数据等)
生命周期(TaskState)
submitted
→working
→completed
- 可进入
input-required
(等待用户输入) - 异常状态:
failed
/rejected
/canceled
- 特殊状态:
auth-required
(需额外认证)
实际意义
提供长生命周期的任务管理机制
适合处理:
- 需要人机交互的任务(input-required)
- 跨系统、多步的协作流程
5. Message
Message 是一次通信轮次的内容载体,用于任务创建、继续对话或状态更新。
组成
- role:
user
或agent
- parts:内容片段数组(Part)
- metadata:扩展元信息
- messageId:唯一消息 ID
- taskId / contextId:与任务、上下文关联
作用
- 传递指令(Prompt)
- 返回结果或状态说明
- 携带中间步骤信息
6. Part
Part 是 Message 或 Artifact 的最小内容单元。
类型
- TextPart:纯文本
- FilePart:文件(可内嵌 Base64 数据或 URI 引用)
- DataPart:结构化 JSON 数据
实际意义
- 多模态数据传输的基础
- 允许一个消息同时包含文本描述、文件附件和机器可读参数
7. Artifact
任务执行产生的最终成果,由一个或多个 Part 组成。例如:生成的报告 PDF、图片、表格数据等。
特点
- 可分块流式传输(append / lastChunk)
- 支持元数据和扩展信息
8. Context
contextId
用于逻辑上关联多个任务,一个 Context 可以包含多个 Task。例如,一个“客户开通业务”流程可能包含:
- 填写表单任务
- 验证身份任务
- 发放账号任务
它们共享一个 contextId,方便跟踪整个流程。
9. Push Notification
一种异步任务进度推送机制。Client 预先提供 Webhook URL(tasks/pushNotificationConfig/set
),Server 在任务状态变更时主动调用。
意义
- 避免客户端频繁轮询
- 适合长任务和断连恢复
10. Streaming (SSE)
基于 Server-Sent Events 的实时推送方式,用于在任务执行中持续传输状态更新和产物。
优点
- 实时性强
- 易于在浏览器端实现(原生 EventSource 支持)
四、传输与格式
A2A 定义了三种核心传输协议,必须至少支持一种:
协议类型 | 特点 |
---|---|
JSON-RPC 2.0 | 轻量、结构化、易调试 |
gRPC | 高性能、二进制、支持流式 |
HTTP+JSON/REST | RESTful 风格、易集成 |
Streaming(流式传输):通过 SSE(Server-Sent Events)实现实时更新,支持状态变更和 Artifact 增量推送。
方法映射规则
A2A 要求在多传输协议下保持功能等价,例如:
- JSON-RPC
message/send
- gRPC
SendMessage
- REST
POST /v1/message:send
五、安全与认证
A2A 依托 HTTP 层安全机制 实现认证与授权:
传输安全:生产环境必须使用 HTTPS(TLS 1.3+ 推荐)。
身份认证:
- 在 AgentCard 中声明所需认证方式(如 Bearer Token、Basic Auth、API Key)。
- 客户端通过 HTTP Header 传递凭证。
二次认证:任务执行过程中如需访问外部系统,可进入
auth-required
状态,请求二次凭证。授权:基于用户身份、技能权限、OAuth Scopes 等控制访问范围。
六、任务生命周期
TaskState 枚举定义了任务可能的状态:
- submitted:已提交,等待执行
- working:执行中
- input-required:等待用户输入
- completed:完成
- failed / canceled / rejected
- auth-required:等待认证
长任务可通过 Polling(tasks/get)、Streaming(message/stream) 或 Push Notification 获取进度。
七、常用方法
方法 | 场景 | 传输映射 |
---|---|---|
message/send | 发起或继续任务 | JSON-RPC message/send / REST POST /v1/message:send |
message/stream | 发起任务并订阅流式更新 | JSON-RPC message/stream / REST POST /v1/message:stream |
tasks/get | 查询任务状态 | JSON-RPC tasks/get / REST GET /v1/tasks/{id} |
tasks/cancel | 取消任务 | JSON-RPC tasks/cancel / REST POST /v1/tasks/{id}:cancel |
tasks/pushNotificationConfig/* | 管理推送配置 | 多个子方法 |
agent/getAuthenticatedExtendedCard | 获取认证后的完整 AgentCard | 各传输均支持 |
八、典型交互模式
1. 同步 / 轮询
- 客户端
message/send
- 服务端快速返回结果,或返回
working
状态 - 客户端轮询
tasks/get
获取最终结果
2. 流式(SSE)
- 客户端
message/stream
- 服务端实时推送 TaskStatusUpdateEvent / TaskArtifactUpdateEvent
3. 推送通知
- 客户端预先配置 Webhook(
tasks/pushNotificationConfig/set
) - 服务端在任务更新时主动调用该 Webhook
九、错误处理
继承 JSON-RPC 标准错误码(-32700 ~ -32603)
定义 A2A 专属错误码(-32000 ~ -32099)
- 如
TaskNotFoundError
、PushNotificationNotSupportedError
、ContentTypeNotSupportedError
- 如
错误响应统一包含:
{
"code": -32001,
"message": "Task not found",
"data": {}
}
十、总结与展望
A2A 协议提供了一个 统一、可扩展、安全 的智能体通信基础设施,让异构、多厂商、多领域的 AI Agent 能够协同工作。
随着多智能体生态的发展,A2A 的地位会越来越重要,特别是在:
- 跨企业协作(B2B Agent API)
- 企业内部异构 AI 系统整合
- 长流程、需人机协同的 AI 任务编排
未来,A2A 还可能扩展对 实时多模态数据交换、Agent 市场注册发现、隐私保护计算 的支持。