什么是A2A协议?
A2A(Agent-to-Agent)是Google于2025年推出的开放协议,专门解决AI智能体之间如何互相发现、通信和协作的问题。到了2026年,A2A已经成为AI Agent多智能体系统的通信标准,被业界广泛采纳。
如果MCP是AI调用工具的USB接口,那A2A就是AI之间打电话的通信协议。
为什么需要A2A?
单Agent的局限
单个AI Agent再强大,也有力所不及的场景:
- 旅行规划需要同时协调航班、酒店、景点Agent
- 企业流程需要审批Agent、财务Agent、通知Agent协作
- 复杂研究需要搜索Agent、分析Agent、写作Agent分工
A2A解决的核心问题
| 问题 | A2A的解法 |
|---|---|
| Agent之间格式不统一 | 标准化消息格式(JSON-RPC 2.0) |
| 无法发现其他Agent | Agent Card机制,自动发布和发现能力 |
| 通信不可靠 | 任务生命周期管理,支持长时间异步任务 |
| 安全风险 | 内置认证授权(API Key/OAuth2/HTTP认证) |
A2A核心架构
两个角色
┌──────────────┐ ┌──────────────┐
│ Client Agent │───── A2A协议 ────▶│ Remote Agent │
│ (发起方) │◀──── A2A协议 ─────│ (服务方) │
└──────────────┘ └──────────────┘
- Client Agent:发起请求的智能体,相当于"打电话的人"
- Remote Agent:响应请求的智能体,相当于"接电话的人"
注意:一个Agent可以同时是Client和Remote,角色是相对的。
Agent Card(智能体名片)
每个Agent通过Agent Card声明自己的能力:
{
"name": "travel-planner",
"description": "旅行规划智能体,支持航班查询、酒店预订",
"url": "https://api.example.com/a2a",
"capabilities": {
"streaming": true,
"pushNotifications": true
},
"skills": [
{
"id": "search-flights",
"name": "航班搜索",
"description": "根据出发地和目的地搜索航班"
}
]
}
任务生命周期
A2A采用任务(Task)驱动的通信模型:
提交任务 → 任务执行中 → 任务完成
↓ ↓ ↓
submitted working completed
└→ 输入失败 → failed
└→ 需要更多信息 → input-required
关键状态:
submitted:任务已提交,等待处理working:正在执行中input-required:需要更多输入才能继续completed:执行完成,返回结果failed:执行失败
10分钟搭建A2A Agent
环境准备
# 安装A2A Python SDK
pip install a2a-sdk
# 或使用Node.js SDK
npm install @a2a/sdk
创建Remote Agent(服务端)
from a2a import Agent, AgentCard, Skill, TaskHandler
# 定义Agent能力
card = AgentCard(
name="weather-agent",
description="查询城市天气信息",
skills=[
Skill(id="get-weather", name="天气查询", description="获取指定城市天气")
]
)
# 处理任务
class WeatherHandler(TaskHandler):
async def handle(self, task):
city = task.message.parts[0].text
weather = await fetch_weather(city)
task.complete(result=f"{city}今日:{weather.temp}°C,{weather.desc}")
# 启动Agent
agent = Agent(card=card, handler=WeatherHandler())
agent.run(host="0.0.0.0", port=8001)
创建Client Agent(调用方)
from a2a import Client
# 发现并连接Remote Agent
client = Client()
agent_card = await client.discover("http://localhost:8001/.well-known/agent.json")
# 提交任务
task = await client.send_task(
agent=agent_card,
message="查询北京天气"
)
# 获取结果
print(task.result) # "北京今日:28°C,晴"
流式响应
对于耗时任务,A2A支持SSE流式推送:
# Client端订阅流式响应
async for event in client.send_task_stream(
agent=agent_card,
message="生成一份完整的旅行计划"
):
print(f"进度更新: {event.state}")
推送通知
Agent可主动推送任务状态变更:
task = await client.send_task(
agent=agent_card,
message="监控价格变化",
push_notification={
"url": "https://my-app.com/webhook",
"authentication": {"schemes": ["bearer"]}
}
)
A2A vs MCP:什么时候用哪个?
| 维度 | A2A | MCP |
|---|---|---|
| 通信对象 | Agent ↔ Agent | Agent ↔ 工具/数据源 |
| 类比 | 人和人打电话 | 人使用工具 |
| 协议格式 | JSON-RPC 2.0 | 自定义JSON |
| 典型场景 | 多Agent协作完成复杂任务 | Agent调用API/数据库/文件 |
| 能否替代 | 不能 | 不能 |
最佳实践:A2A + MCP组合使用。Agent之间用A2A协作,每个Agent内部用MCP调用工具。
┌─────────┐ A2A ┌─────────┐
│ 规划Agent│───────▶│执行Agent │
└─────────┘ └────┬────┘
│MCP
┌────┴────┐
│数据库/API │
└─────────┘
安全实践
A2A内置了多种认证机制,务必按场景选择:
| 认证方式 | 适用场景 | 安全等级 |
|---|---|---|
| API Key | 内网Agent间调用 | ⭐⭐ |
| HTTP Basic | 简单认证需求 | ⭐⭐ |
| OAuth2 | 跨组织Agent协作 | ⭐⭐⭐⭐ |
| mTLS | 金融级安全要求 | ⭐⭐⭐⭐⭐ |
安全清单:
- ✅ 始终启用认证,不要裸跑A2A服务
- ✅ 为不同Agent分配最小权限
- ✅ 记录所有Agent间通信日志
- ✅ 定期轮换API Key和证书
- ❌ 不要在Agent Card中暴露敏感信息
实战案例:多Agent旅行规划系统
用户: "帮我规划下周末北京三日游"
主控Agent (A2A Client)
├── 调用航班Agent → 查询机票价格
├── 调用酒店Agent → 推荐性价比酒店
├── 调用景点Agent → 排列三日行程
└── 调用天气Agent → 提供穿衣建议
主控Agent汇总 → 输出完整旅行计划
每个子Agent内部又通过MCP调用真实API(携程、天气服务等),形成"A2A编排 + MCP执行"的双层架构。
常见问题
Q:A2A和微服务有什么区别?
A:微服务是代码级的服务拆分,开发者手动编排调用链;A2A是Agent级的协作,Agent自主决策和规划,具备更强的灵活性和智能性。
Q:A2A支持多少个Agent同时协作?
A:理论上无限制,但实际建议单个协作链不超过10个Agent,避免延迟和调试复杂度失控。
Q:A2A能用于生产环境吗?
A:2026年A2A已进入稳定版,Google Cloud、AWS等主流云平台均已提供A2A托管服务,可用于生产。
总结
A2A协议是2026年构建多智能体系统的必备技能。它让Agent之间从"各自为战"变成"团队协作",是AI从单点工具走向复杂工作流的关键基础设施。
学习路径:
- 理解A2A核心概念(Agent Card、Task生命周期)← 你在这里
- 搭建两个Agent实现A2A通信
- 结合MCP构建"A2A编排 + MCP执行"架构
- 实现生产级安全认证和错误处理
本文持续更新,关注A2A协议最新动态请收藏本页。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论