A2A协议调研
A2A协议是一种标准化AI智能体间通信的协议,与MCP协议(解决Agent与工具交互)形成互补。它采用HTTP/HTTPS传输层和JSON-RPC2.0消息格式,支持同步、流式和异步通信。核心组件包括AgentCard(服务发现)、Task(工作单元)、Message(通信载体)和Artifact(输出结果)。通信流程涵盖服务发现、任务创建、执行和结果返回。A2A具有高可移植性,适用于多智能体协作
A2A 的核心目标是 「标准化不同 AI Agent 之间的通信方式」
A2A协议MCP协议区别
-
MCP 解决的是 Agent 和工具/资源之间的交互问题,可以看做是一个应用商店协议,主要关注单个 Agent 内容如何更好的使用外部工具;
-
MCP注重的是"工具调用”:一个核心AI借助外部工具和服务来增强自己的能力,类似于一个人学会了使用各种专业工具。
-
A2A 协议解决的是 Agent 和 Agent 之间的交互问题,主要关注不同的 Agent 之间怎么协作的问题。
-
A2A强调的是"智能体对话": 多个平等的AI之间能够相互通信协作,类似于不同部门的员工之间直接沟通合作。
它们不是竞争关系,是互补的

协议通信方式
A2A 协议使用 HTTP/HTTPS 作为传输层,采用 JSON-RPC 2.0 进行消息体封装。一个典型的调用过程是:
-
客户端发送一个带有 jsonrpc、method、params 等字段的 HTTP 请求到 Agent 的服务端 URL。
-
服务端解析方法(如 tasks/send),执行相应逻辑后返回结果,如果是异步、长任务可能部分内容会通过 SSE 或推送通知进一步发送到客户端。
由于 JSON-RPC 和 HTTP 均是非常成熟的技术,任何编程语言都能快速实现非常轻量的 A2A 客户端或服务器端模块。这也是该协议非常「可移植、可扩展」的一个关键。
协议核心组件
-
Agent Card:一个公开的 JSON 文件(通常托管在 /.well-known/agent.json),用于描述该 Agent 的名称、功能、技能(Skill)、URL、认证方式等信息,便于客户端进行「服务发现」和「能力匹配」。
-
Task:表示一个具体的工作单元,具有唯一 ID,并可以在多轮交互中不断更新状态(每个Task有一个唯一的sessionId,多个Task可以使用一个sessionId,表明多个Task属于同一个会话的一部分。)【任务是智能体协作的核心概念,由客户端通过用户请求创建,以使服务端智能体执行工作。每个任务都有唯一ID并须经历一个完整的生命周期。任务会有提交、工作中、需要输入、完成、失败或取消等多个状态。同时,A2A协议不仅支持同步请求,还支持流式请求(Streaming)与异步请求(Push Notification)】
-
Message:客户端和 Agent 之间互通时用的消息对象,其中可以包含多种类型的 Part(一个Message可以包含多个Part,每个Part携带不同的内容(如文本部分、文件部分、数据部分等))
-
Artifact:由 Agent 在执行任务过程中生成的输出结果。它与 Message 的差别在于,Artifact 通常是「结果物」或产物,而 Message 常用于「对话或指令」。服务端智能体对客户端需求产生的响应均以工件的形式反馈到客户端,再由客户端整理后提供给用户
-
Part 是 Message 和 Artifact 的核心组成部分,代表了其携带的主要内容。每个 Part 都标识了内容类型和具体内容。它的构成既可以是文本、文件,也有可能是JSON格式或表格形式的数据。

核心流程
Client Agent 和 Server Agent 之间协同工作需要经过以下几个关键步骤:
-
Server Agent 在指定站点托管自己的 AgentCard;
-
Client Agent 主动发现 AgentCard;
-
Client Agent 发起一个 Task;
-
Client Agent 设置任务通知监听;
-
Server Agent 执行任务,返回 Artifact;
-
Client Agent 获取 Artifact。

通信基础 (Transport & Format)
-
传输层 (Transport): A2A 使用 HTTP(S) 作为 Client 和 Server 之间的通信载体。这利用了 Web 的广泛基础设施和成熟技术。
-
消息格式 (Format): A2A 采用 JSON-RPC 2.0 作为数据交换格式。JSON-RPC 是一种轻量级的远程过程调用协议,使用 JSON 编码,易于解析和生成。
-
异步通信 (Async): 除了标准的请求/响应模式,A2A 还利用 Server-Sent Events (SSE) 实现从 Server 到 Client 的单向流式数据推送和推送通知(push notification)允许应用在未运行时也能接收信息
基于 JSON-RPC 2.0 的请求/响应结构:
|
类别 |
字段/方法 |
类型 |
必选 |
说明 |
|---|---|---|---|---|
|
请求结构 |
jsonrpc |
string |
是 |
固定值 "2.0" |
|
method |
string |
是 |
调用的方法名称(如 tasks/send) |
|
|
id |
number│string |
是 |
请求唯一标识 |
|
|
params |
object |
否 |
方法参数 |
|
|
响应结构 |
result |
object |
条件必选 |
成功时返回的结果 |
|
error |
object |
条件必选 |
失败时返回的错误(含 code 和 message) |
|
|
id |
number│string |
是 |
必须与请求 ID 一致 |
A2A 协议常用方法:
|
方法名 |
类型 |
说明 |
|---|---|---|
|
tasks/send |
请求 |
提交新任务,参数包含任务描述和输入数据 |
|
tasks/sendSubscribe |
请求 |
提交任务并订阅 Server-Sent Events(SSE) 流式更新 |
|
tasks/get |
请求 |
获取任务状态,可通过 historyLength 参数指定返回的历史记录条数 |
|
tasks/cancel |
请求 |
终止运行中的任务,需指定任务 ID |
|
tasks/pushNotification/set |
请求 |
配置推送通知地址,当任务状态变化时主动回调客户端 |
|
tasks/pushNotification/get |
请求 |
查询当前推送通知配置 |
|
tasks/resubscribe |
请求 |
断线重连后恢复事件订阅 |
更多推荐


所有评论(0)