A2A + MCP:2026 年多 Agent 系统的通信层架构,我帮你拆清楚了
MCP 和 A2A 不是二选一的关系,一个是连接工具,一个是连接 Agent,两者组合才是多 Agent 系统的完整通信方案。
你在搭多 Agent 系统。Agent 之间怎么说话,每个 Agent 怎么用工具——这两个问题你迟早得面对。
2025 年的时候,答案还不明朗:MCP 刚出没多久,A2A 才刚发布,大家都在观望。到了 2026 年 5 月的今天,事情清楚多了。MCP 的 GitHub Stars 冲到 8 万 +,A2A 被 Linux Foundation 托管,生态已经成熟到可以做架构决策了。
但问题变成了另一个:这两玩意到底怎么搭?
网上大部分文章要么只讲 MCP、要么只讲 A2A,很少有人把它们放在一个系统里讲清楚。我今天换个角度——不是给你读规范,是给你讲一个正在搭多 Agent 系统的人,到底该怎么看 MCP 和 A2A。
先说清楚:它俩解决的不是同一个问题
这是 2026 年最常见的误解——有人以为 MCP 和 A2A 是竞品,要二选一。
不可能。因为它们的职责压根不在一个层面上。
MCP 是做事的。A2A 是说话的。
MCP(Model Context Protocol)解决的是 Agent 跟工具之间的连接问题。你的 Agent 要读文件、查数据库、调 API,这些都需要 MCP。每个 Agent 内部挂一个 MCP Client,通过标准协议跟各种 MCP Server 通信。2026 年,社区已经有 8000+ 个 MCP Server,从文件系统到 GitHub 到 Slack 到数据库,摆在那里直接用。
A2A(Agent-to-Agent)解决的是 Agent 跟 Agent 之间的通信问题。你的研究 Agent 写完了报告,怎么告诉写作 Agent?写作 Agent 写完了,怎么通知审核 Agent?这些 Agent 可能是不同团队写的、跑在不同服务器上的、用不同框架搭的。没有标准协议,你就要给每个 Agent 写一套自定义 API。
给你一个最直观的类比:
- MCP 像 USB-C:设备(Agent)通过标准接口连接配件(工具)
- A2A 像 HTTP:不同设备(Agent)之间通过标准协议互相通信
USB-C 和 HTTP 是竞品吗?不是。一个管连接,一个管通信,层次不同。
那 A2A 和 MCP 在架构里到底怎么共存?
我直接给你画一个 2026 年比较标准的多 Agent 架构图(文字版,但足够清楚):
┌─────────────────────────┐
│ 编排 Agent (A2A) │
│ 负责任务拆分和调度 │
└──────┬──────────┬───────┘
│ A2A │ A2A
┌──────▼──┐ ┌───▼──────┐
│ 搜索 │ │ 写作 │
│ Agent │ │ Agent │
│ (A2A) │ │ (A2A) │
└──┬─┬────┘ └──┬──┬────┘
│ │ │ │
MCP│ │MCP MCP│ │MCP
┌──▼─▼──┐ ┌──▼──▼──┐
│ Web │ │ 文档 │
│搜索 │ │ 生成 │
│Server │ │ Server │
└───────┘ └───────┘每个 Agent 都有两层:对外用 A2A(跟其他 Agent 说话),对内用 MCP(调用自己的工具)。
编排 Agent 用 A2A 把任务发给搜索 Agent,搜索 Agent 内部用 MCP 调搜索引擎,拿到结果后用 A2A 返回给编排 Agent。编排 Agent 再通过 A2A 把信息发给写作 Agent,写作 Agent 内部用 MCP 调文档生成工具。
分工明确,边界清晰。你不需要在 A2A 的消息里塞工具调用的逻辑,也不需要让 MCP 去管 Agent 之间的任务调度。
Agent Card:A2A 最巧妙的设计
A2A 里我最喜欢的一个概念是 Agent Card。
你可以把它理解成 Agent 的名片。每个 A2A 兼容的 Agent 都必须暴露一个 JSON 格式的 Agent Card,告诉别人自己是谁、能干什么、怎么调用。
长这样:
{
"name": "Research Agent",
"description": "专业的研究分析 Agent,擅长信息搜集",
"url": "https://agent.example.com/a2a",
"skills": [
{
"id": "web_search",
"name": "网页搜索",
"description": "搜索互联网获取最新信息"
},
{
"id": "data_analysis",
"name": "数据分析",
"description": "分析结构化数据并生成报告"
}
],
"authentication": { "schemes": ["Bearer"] }
}为什么这玩意重要?因为多 Agent 系统的核心难点从来不是"一个 Agent 有多强",而是"Agent 之间怎么发现彼此"。
传统做法是你写死配置:A Agent 知道 B Agent 的地址,B 知道 C 的地址。一旦新增或者替换 Agent,你要改配置、重启、测试。拿微服务的话说——这是硬编码的服务发现。
Agent Card 让服务发现变成了动态的。编排 Agent 可以查询目录服务:"给我找一个能做数据分析的 Agent",目录返回匹配的 Agent Card,编排 Agent 直接发任务。新增一个数据分析 Agent?不需要改任何代码,只要它在目录里注册一下就行。
A2A 定义了三种发现方式:
- 已知 URL:直接请求
/.well-known/agent.json - 目录服务:企业部署 Agent 注册中心,按需查询
- 广播发现:局域网内的 Agent 自动发现
对于这类多 Agent 系统,目录服务是最合理的方案。你可以在系统启动时让所有 Agent 注册到中心目录,编排 Agent 按技能查询,不需要硬编码任何地址。
任务生命周期:别小看这个状态机
多 Agent 系统里一个最容易被低估的问题是任务状态管理。
你的编排 Agent 把任务发给搜索 Agent 之后,怎么知道它做完了?如果搜索 Agent 做一半挂了怎么办?如果需要用户确认才能继续怎么办?
没有标准协议的时候,你要自己设计这套状态机。每个团队的设计还不一样,跨系统协作的时候直接崩。
A2A 定义了一套通用的任务生命周期:
submitted → working → input-required → completed
↓
failed
↓
canceled每个状态都有明确的语义:
- submitted:任务已投递,对方确认收到
- working:正在处理,支持流式输出进度
- input-required:需要额外输入
- completed:干完了,附结果
- failed:挂了,附错误信息
- canceled:被取消了
这套状态机的价值在于——你不需要跟每个 Agent 的开发者对齐"什么叫完成"。A2A 的标准里写死了,所有人都按同一套来。
实际搭一个:写代码看看
假设你要搭一个研究报告自动生成系统,三个 Agent:研究 Agent(查资料)、搜索 Agent(具体搜索)、写作 Agent(生成报告)。
搜索 Agent 的 A2A Server 实现(Python):
from a2a.server import A2AServer
from a2a.types import AgentCard, TaskStatus
agent_card = AgentCard(
name="Search Agent",
description="专业的互联网信息搜索 Agent",
url="http://localhost:8000",
skills=[{"id": "web_search", "name": "网页搜索"}]
)
server = A2AServer(agent_card=agent_card)
@server.task_handler()
async def handle_task(task):
query = task.message.content
results = await mcp_client.call_tool("search", {"query": query})
return TaskStatus(state="completed", artifacts=[results])编排 Agent 的 A2A Client:
from a2a.client import A2AClient
search_agent = await A2AClient.discover(
"https://search-agent.example.com/.well-known/agent.json"
)
task = await search_agent.send_task({
"message": {"role": "user", "content": "搜索 2026 AI Agent 趋势"}
})
async for update in task.stream():
if update.state == "completed":
print(update.artifacts[0])看到没?编排 Agent 不需要知道搜索 Agent 内部怎么实现的、用的是什么搜索引擎、代码是什么语言写的。它只需要知道 Agent Card 里写的"这个 Agent 能做网页搜索",然后发任务、收结果。这就是标准协议的价值。
什么时候该用什么?我的判断
MCP 是必选项,不是可选项。 如果你的 Agent 需要跟外部工具交互——读文件、查数据库、调 API——那么 MCP 就是你最好的选择。8000+ 现成服务器摆在那,而且所有主流 Agent 框架都支持 MCP(Claude Code、Cursor、Cline、LangChain 全支持)。
A2A 是可选项,但在以下场景里价值极大:
- 你有 3 个以上 不同类型的 Agent 需要协作
- Agent 由 不同团队 开发,或者用 不同框架 搭建
- Agent 部署在不同服务器 上,需要远程通信
- 你希望系统能 动态增减 Agent,而不是硬编码连接
如果只是单 Agent 系统——比如一个 Agent 接几个 MCP Server——那 A2A 对你没意义。
2026 年的多 Agent 开发,已经不需要从零造轮子了。MCP 把工具调用标准化了,A2A 把 Agent 通信标准化了。你要做的就是搭好架构、选对协议、把精力花在真正有差异的地方——Agent 的业务逻辑本身。别花时间写自定义通信协议。人家已经帮你写好了。
评论
发表评论