a2aproject/A2A · 上手攻略
- 仓库:a2aproject/A2A
- 链接:https://github.com/a2aproject/A2A
- 分类:ai
- 作者:Jay
- 更新:2026-07-11
这是什么
A2A(Agent2Agent)是一个开放协议,由 Google 贡献给 Linux Foundation,旨在让不同厂商、不同框架构建的 AI Agent 能够相互通信、协作和互操作。协议核心基于 JSON-RPC 2.0 over HTTP(S),采用 Agent Card(类似黄页)做服务发现,支持同步请求/响应、流式推送(SSE)和异步长任务通知。
A2A 处于一个更大的 Agent 互操作生态的核心位置——它的直接对标是 MCP(Model Context Protocol,MCP 解决的是 Agent 与工具/数据源之间的通信),A2A 解决的是 Agent 与 Agent 之间的通信。
简单说:MCP 是 Agent 调用工具的协议,A2A 是 Agent 调用 Agent(或者让 Agent 协作)的协议。
解决什么问题
在 A2A 出现之前,每个厂商的 Agent 都是"不透明的孤岛"——LangGraph Agent 无法直接调用 Google ADK Agent,BeeAI Agent 无法与第三方商业 Agent 协作。A2A 让这一切成为可能:
- 打破孤岛:不同框架的 Agent 可以互相发现、协商交互方式、共同完成任务
- 保留 Opacity(不透明性):Agent 之间只交换能力和结果,不需要暴露内部状态、记忆或工具实现
- 支持企业级场景:内置认证、鉴权、可观测性设计
- 异步优先:原生支持需要人类介入的长任务
快速安装
安装 SDK(以 Python 为例)
pip install a2a-sdk
其他语言 SDK:
# Go
go get github.com/a2aproject/a2a-go
# JavaScript/TypeScript
npm install @a2a-js/sdk
# Rust
cargo add a2a-lf
⚠️ 版本信息:当前协议规范为 v1.0.0(稳定版)。Python SDK 版本请以 PyPI 实际发布为准,建议用
pip show a2a-sdk确认。
获取协议规范
- 完整规范:https://a2a-protocol.org/latest/specification/
- GitHub 主页:https://github.com/a2aproject/A2A
- 示例代码:https://github.com/a2aproject/a2a-samples
核心用法
1. Agent Card(Agent 发现)
每个 A2A Agent 必须暴露一个 AgentCard,声明自己的能力、端点和认证要求。Agent 通过查询对方的 AgentCard 来决定如何交互。
AgentCard 包含的关键字段:
- name、version:Agent 身份
- capabilities:支持哪些交互模式(同步、流式、推送通知等)
- skills:Agent 能完成的具体技能列表
- authentication:认证方案
- url:Agent 的 A2A 端点地址
{
"name": "my-agent",
"version": "1.0.0",
"capabilities": {
"streaming": true,
"pushNotifications": true
},
"skills": [
{ "id": "web-search", "name": "Web Search" },
{ "id": "code-gen", "name": "Code Generation" }
],
"url": "https://my-agent.example.com/a2a"
}
2. 发送任务(Send Message)
A2A 的核心操作是创建任务(Task)并通过 Message 驱动:
from a2a import A2AClient
client = A2AClient("https://target-agent.example.com/a2a")
# 发送任务
task = client.send_message(
role="user",
content={
"type": "text",
"text": "帮我查询今天北京的天气,并给出一个穿衣建议"
}
)
print(task.result)
3. 流式响应(Send Streaming Message)
from a2a import A2AClient
client = A2AClient("https://target-agent.example.com/a2a")
# 流式接收响应(Server-Sent Events)
for chunk in client.send_message_streaming(
content={"type": "text", "text": "写一个 FastAPI hello world"}
):
print(chunk, end="", flush=True)
4. 任务生命周期管理
A2A 原生支持任务状态追踪:
# 查询任务状态
task = client.get_task(task_id="task-12345")
print(task.status) # submitted / working / completed / failed / canceled
# 取消任务
client.cancel_task(task_id="task-12345")
# 列举任务
tasks = client.list_tasks()
5. 用已有框架快速暴露 A2A Agent
Google ADK、LangGraph、BeeAI 等主流框架已集成 A2A 支持:
# 以 Google ADK 为例,将 Agent 暴露为 A2A Server
from google.adk import Agent
from a2a.server import A2AServer
agent = Agent(model="gemini-2.0-flash", instruction="你是助手")
# 用 A2AServer 包装
server = A2AServer(agent=agent, port=8080)
server.start()
⚠️ 框架集成细节请查阅对应框架的 A2A 集成文档,API 可能随版本变化。
典型适用场景
| 场景 | 说明 |
|---|---|
| 多 Agent 编排 | 多个专业化 Agent(搜索、代码生成、数据分析)协作完成复杂任务 |
| 跨平台 Agent 互操作 | 企业内部多个 Agent 系统需要统一对外暴露能力 |
| Agent Marketplace | 基于 Agent Card 发现和组合使用第三方 Agent |
| 人类介入式长任务 | Agent 执行复杂任务时需要人类审批某个步骤(A2A 原生支持) |
| 企业级 Agent 协作 | 内置安全、认证和可观测性,适合企业环境 |
坑与注意
-
协议尚在活跃演进:虽然已发布 v1.0.0,但生态仍在早期,不同 SDK 版本之间可能存在细微差异。使用前请核对 SDK 版本与协议版本的对应关系。
-
Agent Card 认证配置复杂:企业场景下正确配置认证方案(OAuth2、API Key 等)需要参考规范的 Authentication 部分,文档相对技术化。
-
不是工具调用协议:A2A 不适合用来让 Agent 调用单个函数/工具——那是 MCP 的职责。混用两者是常见误区。
-
流式和推送通知的边界情况:SSE 在某些网络环境下可能被阻断,生产环境需要考虑重连机制。
-
SDK 成熟度不一:Python SDK 相对最成熟;Go、JS、Java、.NET、Rust 等语言的 SDK 可能在功能完整度上有差异。
与同类对比
| 协议 | 定位 | 通信对象 | 复杂度 |
|---|---|---|---|
| A2A | Agent ↔ Agent 协作协议 | Agent ↔ Agent | 中等 |
| MCP | Agent ↔ 工具/数据源协议 | Agent ↔ 工具 | 较低 |
| OpenAI Agent SDK | 单一厂商 Agent 编排 | 内部框架 | 较低 |
| LangGraph | 多 Agent 协作框架 | 内存中 Agent | 中等 |
A2A vs MCP:MCP 和 A2A 是互补关系,不是竞争关系。打个比方——MCP 像是 USB协议(让电脑连接各种设备),A2A 像是网络协议(让不同电脑之间通信)。一个 Agent 内部用 MCP 调用工具,对外用 A2A 与其他 Agent 协作。
一句话推荐结论
A2A 是 Google 主导的 Agent 互操作开放标准,适合在多 Agent 系统、企业级 Agent 编排、或需要跨框架 Agent 协作的场景中使用——如果你在构建复杂 Agent 系统且需要 Agent 之间的互联互通能力,A2A 是目前最正式、厂商中立的选择,建议从 Python SDK 入手,结合官方 samples 快速验证。