🧠 图解记忆: A2A 是 Agent 间的语言,MCP 是 Agent 操作工具的接口,生产系统通常分层混用。
💡 答案要点
核心洞察:两个协议不在同一层次
很多人把 MCP 和 A2A 当竞争关系来问,这是最大的误区。它们解决的是不同层次的问题:
┌─────────────────────────────────────────┐
│ 编排器 Agent(Orchestrator) │
│ ┌───────────────────────────────────┐ │
│ │ A2A:Agent 间委派与协作 │ │ ← Agent ↔ Agent 通信
│ │ (语言层:相互对话) │ │
│ └───────────────────────────────────┘ │
│ ┌───────────────────────────────────┐ │
│ │ MCP:工具与资源访问标准化 │ │ ← Agent ↔ 外部系统
│ │ (双手层:操作世界) │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────┘
类比:
MCP = USB-C(任何设备都可以用统一接口连接)
A2A = HTTP(任何 Agent 都可以用统一协议通信)A2A + MCP 混合架构三大模式
模式一:编排器-工作器(最常见)
编排器
│ A2A(任务委派)
├─→ 研究员 Agent ─→ MCP(网络搜索、DB查询)
├─→ 编码员 Agent ─→ MCP(GitHub、代码执行)
└─→ 审查员 Agent ─→ MCP(测试运行、部署)
适用:各步骤可独立执行,且每步需要专业技能
举例:采购流程——研究员找产品 → 合规检查政策 → 采购下单 → 财务审批模式二:流水线模型
输入数据
│ A2A(Artifact 传递)
→ 分析 Agent ─→ MCP(BI工具)
→ 报告 Agent ─→ MCP(Notion、Slack)
→ 通知 Agent ─→ MCP(邮件、PagerDuty)
适用:数据处理流水线、顺序审批工作流
特点:每个 Agent 的产出成为下一个 Agent 的输入模式三:对等协作模型
Agent A ←── A2A ──→ Agent B
│ │
MCP MCP
(领域工具A) (领域工具B)
适用:复杂创意性工作、需要共识的决策
特点:不存在垂直层级,平等协作A2A 任务生命周期(九状态机)
面试常问 A2A 和普通函数调用的区别——A2A 的核心是有状态任务机:
A2A 任务状态机:
┌──────────────┐
│ queued │ ← 初始状态,已接收等待处理
└──────┬───────┘
↓
┌──────────────┐
│ running │ ← 正在处理
└──────┬───────┘
↓
┌─────────────┼─────────────┐
↓ ↓ ↓
input-required auth-required ┌──────────┐
(需额外输入) (需认证) │ completed│ ← 终态:成功
↑ ↑ └──────────┘
└──────?───────┘
(人类审批/HITL 场景)
↓
┌──────────────┐
│ canceled │ ← 终态:被取消
└──────────────┘
┌──────────────┐
│ rejected │ ← 终态:Agent 拒绝请求
└──────────────┘
┌──────────────┐
│ failed │ ← 终态:处理过程出错
└──────────────┘关键点: input-required 是 A2A 支持人机协作(HITL)的核心机制 —— Agent 可以暂停等待人类审批,这在 MCP 里是不内置的。
A2A Agent Card 结构(企业发现机制)
{
"name": "代码审查 Agent",
"description": "自动化代码审查与安全分析",
"url": "https://review.example.com/a2a",
"version": "1.0.0",
"protocolVersion": "0.3.0",
"provider": {
"organization": "DevCorp",
"url": "https://devcorp.com"
},
"capabilities": {
"streaming": true,
"pushNotifications": false,
"stateTransitionHistory": true
},
"defaultInputModes": ["text", "application/json"],
"defaultOutputModes": ["text", "application/json"],
"skills": [
{
"id": "security-review",
"name": "安全审查",
"description": "扫描代码中的安全漏洞",
"tags": ["security", "code-review", "OWASP"],
"examples": ["审查这个 PR 的安全问题"]
}
]
}Agent Card 发布在 /.well-known/agent.json,供其他 Agent 发现和对接。
A2A + MCP 混合 vs 单协议对比
| 维度 | 仅用 MCP | 仅用 A2A | A2A + MCP 混合 |
|---|---|---|---|
| Agent 间通信 | ❌ | ✅ | ✅ |
| 工具接入 | ✅ | ❌ | ✅ |
| 任务状态跟踪 | ❌(仅 Tasks 原语) | ✅(完整状态机) | ✅ |
| 人类审批 | ❌ | ✅(input-required) | ✅ |
| Agent 发现 | ❌ | ✅(Agent Card) | ✅ |
| 适用场景 | 单 Agent 工具调用 | Agent 网络 | 生产级多 Agent 系统 |
企业级生产部署四层检查清单
第一层:智能体注册表(A2A 必需)
→ 统一管理所有 Agent Card
→ 定义标准:能力、输入输出格式、认证信息
→ 类似微服务的服务注册中心
第二层:MCP 服务器治理(安全关键!)
→ 中央 MCP 网关:所有 Agent 的 MCP 调用统一路由
→ 最小权限范围:每个 Agent 仅访问所需工具
→ 审计日志:记录所有 MCP 调用检测异常
→ ⚠️ 截至 2026 年初,已披露 30+ MCP CVE
第三层:可观测性(分布式追踪)
→ 分布式追踪:把整个 A2A 委派链连为单一 trace(OpenTelemetry)
→ 按 Agent 追踪成本:每个 Agent 的 LLM Token + MCP 调用次数
→ 故障模式分析:哪个 Agent 在何种条件下失败
第四层:回滚与隔离策略
→ 熔断器:特定 Agent 连续失败时隔离
→ 超时策略:A2A 任务委派设置明确超时
→ 降级 Agent:主 Agent 故障时自动切换备用落地路线图(三阶段)
第一阶段(1-2个月):基础建设
→ 整理 MCP 服务器清单,配置中央网关
→ 定义 Agent Card 标准,构建注册表
→ 配置可观测性流水线
第二阶段(2-4个月):试点多 Agent 系统
→ 使用编排器-工作器模式小规模试点
→ 验证 A2A 委派链追踪
→ 基准测试成本和延迟
第三阶段(4-6个月):生产扩展
→ 应用熔断器和回滚策略
→ 开展安全审计,建立 MCP CVE 响应流程
→ 全组织培训与入职面试话术:
示例表达(仅在能用本人经历或可复现实验佐证时使用): "A2A 和 MCP 不是竞争关系,是不同层次。MCP 是 Agent 的'双手',负责连接外部工具;A2A 是 Agent 之间的'语言',负责协作通信。最强的架构是两者组合:编排器通过 A2A 委派任务给专业 Agent,每个 Agent 通过 MCP 访问自己的工具集。我做过一个客服场景:编排器 Agent 通过 A2A 把查询任务分发给产品 Agent(用 MCP 查数据库)和物流 Agent(用 MCP 查物流 API),结果整合后返回。生产部署四件套:注册表、MCP 网关+审计、可观测性(OpenTelemetry 链路追踪)、熔断降级。面试时能说出这套分层思路,说明你不只在用工具,在理解系统本质。"
📚 参考:A2A(Agent2Agent)协议官网 · MCP 官方规范
版本: v2.0 | 更新: 2026-04-10 | by 二狗子 🐕
