字面意思:Agent To Agent
核心作用:让不同框架、不同厂商 做出来的AI智能体,可以:
互相发现
收发消息
委托任务
协同工作
不用每个组合单独写对接的代码
例如: 你有一个"行程规划 Agent",它想委托"酒店预订 Agent"帮订酒店
但两者没有共同的通信语言、没有统一的调用接口、没有互相发现对方的机制
要让它们配合,就得为每一对组合单独写适配代码------这就是 N×N 的集成地狱
先前业界通过MCP解决了agent的各种工具间的互联(纵向),而A2A解决横向多Agent协作
A2A 是一套基于 HTTP 的应用层协议,用 JSON-RPC 2.0 做请求/响应、用 SSE 做消息推送,定义了 Agent 之间如何发现彼此、如何建立任务、如何交换消息、如何完成协作的完整规范
所以设计目标很直白,类比互联网的几层:
|------------------------|-------------|
| A2A 要做的事 | 类比互联网 |
| Agent 互相发现(知道对方存在、能干啥) | DNS / 目录服务 |
| 统一的通信语言 | HTTP / TCP |
| 统一的消息格式 | HTML / JSON |
| 身份认证 | TLS / 证书 |
| 安全授权 | 权限体系 |
让任意两个 Agent 开箱即用、按统一标准对话,像任意两台联网电脑能互相访问一样。
完整正式介绍
协议定位
- 层面:应用层协议(跑在 HTTP 之上)
- 风格:RESTful + JSON-RPC 混合(方法用 JSON-RPC,资源用 REST 惯例)
- 传输:HTTPS(生产环境必选)
- 消息格式:JSON
- 开放性:厂商中立,Linux Foundation 托管,任何实现都能接入
复习:RESTful
基本角色
A2A 定义了两个对等角色(注意:它们是对等的伙伴,不是主从关系):
|------------------|-------------------|----------------|
| 角色 | 说明 | 类比 |
| Client Agent | 发起任务的一方,把任务委托出去 | 发起请求的浏览器 / 调用方 |
| Remote Agent | 承接任务的一方,执行任务并返回结果 | 提供服务器的后端 |
一个 Remote Agent 自己也可以作为 Client去调用别的 Agent
------这就是"Agent 链"和"多 Agent 协作"的基础。
术语提醒:规范里明确用 "Agent" 而非 "Tool",强调 A2A 协作的是完整的智能体(有自己的推理、状态、决策),而不是一个被调用的函数。
底层机制
...
核心概念
Agent Card
Agent Task
消息结构(Message/Part)
任务生命周期状态机
能力发现:skills 与 capabilities
代码示例
...
认证与安全
...
知识补充复习
SSE
基于 HTTP 的单向推送协议
客户端发起一次 HTTP 请求,建立长连接
之后服务端源源不断向客户端推送事件消息
消息只能服务器→客户端单向
RESTful
REST(Representational State Transfer,表述性状态转移):
是一种软件架构风格,不是协议、不是标准
RESTful:遵循 REST 风格,基于 HTTP 实现的接口设计方式
核心思想:一切皆资源,用 URL 标识资源,用 HTTP 方法表达对资源的操作
示例:
GET /agents # 查询智能体列表
GET /agents/{agentId} # 获取单个Agent Card(A2A里就是这个)
POST /tasks # 创建A2A任务
GET /tasks/{taskId} # 查询任务详情
DELETE /tasks/{taskId} # 取消任务