A2A 和 MCP 有什么区别?在实际系统中如何配合使用
1️⃣ 考察意图
面试官想看你能否清晰区分 A2A 和 MCP 的职责边界,以及在实际系统架构中如何让两者配合。刁钻点在于:很多人混淆两者,认为都是"Agent 通信协议"。答好了能展示你的系统架构设计能力和对 Agent 技术栈的全景理解。
2️⃣ 标准答
A2A 和 MCP 在 Agent 架构中处于不同层级,职责互补:
1. 职责对比
| 维度 | MCP(Model Context Protocol) | A2A(Agent-to-Agent) |
|---|---|---|
| 通信方向 | Agent → Tool(垂直扩展) | Agent → Agent(水平协作) |
| 解决问题 | Agent 如何调用外部工具 | Agent 如何与其他 Agent 协作 |
| 通信单元 | Tool Call(同步请求-响应) | Task(异步有状态协作) |
| 发现机制 | list_tools(工具列表) | Agent Card(能力名片) |
| 输出格式 | 工具返回值(JSON) | Artifact(多格式:文本/文件/图片) |
| 执行时长 | 秒级(通常 <5s) | 分钟到小时级(长任务) |
| 状态管理 | 无状态 | 有状态(Task 生命周期) |
| 提出者 | Anthropic(2024.11) | Google(2025.04) |
2. 在系统架构中的位置
用户请求** ↓ Orchestrator Agent(调度Agent) ├── 通过 A2A 发现并委托任务给专业 Agent │ ├── Code Review Agent ──┐ │ ├── Data Analysis Agent ├── 各 Agent 内部通过 MCP 调用工具 │ └── Doc Summary Agent ──┘ │ ├── MCP: search_web (搜索资料) │ ├── MCP: read_file (读取文档) │ └── MCP: send_email (发送结果) ↓ 聚合结果返回用户
- A2A 层(协作层):Orchestrator 通过 A2A 发现专业 Agent、分发 Task、收集 Artifact
- MCP 层(工具层):每个专业 Agent 内部通过 MCP 调用具体工具(搜索、文件操作、API 调用)
- 配合使用的典型流程**
以"分析竞品并生成报告"为例:
- 用户向 Orchestrator Agent 发送请求:"分析竞品 Acme Corp 的产品策略"
- Orchestrator 通过 A2A 发现 DataAnalysis Agent(查询 Agent Card,确认有
analyze_competitorskill) - Orchestrator 通过 A2A 发送 Task:
{task: "analyze_competitor", input: {company: "Acme Corp"}} - DataAnalysis Agent 接收 Task,内部通过 MCP 调用工具: - MCP
search_web("Acme Corp product strategy")→ 获取搜索结果 - MCPscrape_webpage(url)→ 抓取竞品官网 - MCPquery_database("competitor_data")→ 查询内部数据库 - DataAnalysis Agent 分析数据,通过 A2A 返回 Artifact:
{type: "report", content: "..."} - Orchestrator 收到报告,通过 A2A 委托 DocSummary Agent 生成摘要
- 最终结果返回用户
4. 选型决策
- 需要调用外部 API/服务 → MCP(工具调用)
- 需要委托任务给另一个 Agent → A2A(Agent 协作)
- 需要多步协作+状态管理 → A2A(Task 生命周期)
- 需要简单同步调用 → MCP(Tool Call)
3️⃣ 答题模板(30 秒电梯版)
"MCP 和 A2A 互补。MCP 是Agent→Tool垂直扩展——同步调用、无状态、秒级、解决'Agent怎么用工具'。A2A 是Agent→Agent水平协作——异步Task、有状态、分钟级、解决'Agent怎么协作'。架构中分层:Orchestrator通过A2A发现和委托Task给专业Agent,每个专业Agent内部通过MCP调用具体工具。配合流程:A2A分发Task→各Agent用MCP调用工具→A2A返回Artifact→聚合结果。选型:调用外部服务用MCP,委托任务给Agent用A2A。"
4️⃣ 高频追问 & 应对
追问 1:能不能只用 MCP 不用 A2A?把另一个 Agent 当工具调用?
可以但不推荐。把 Agent B 当 MCP 工具调用的问题:(1) 同步阻塞——MCP 是同步的,Agent B 执行 10 分钟的任务时 Agent A 必须阻塞等待,浪费资源;(2) 无状态管理——MCP tool call 没有状态机,无法处理"Agent B 需要人类确认"的场景(A2A 的
input-required状态);(3) 无流式输出——MCP 返回完整结果,无法实时看到 Agent B 的执行进度。适合用 MCP 调用 Agent 的场景:Agent B 是简单的无状态服务(如"翻译Agent"只做翻译,不需要多步推理)。一旦 Agent B 有复杂逻辑,A2A 更合适
追问 2:A2A 的 Task 和 LangGraph 的 Graph 有什么区别?
两个不同层面的概念:(1) LangGraph 的 Graph 是"单个 Agent 内部的执行流程"——节点是 LLM 调用或工具调用,边是条件转移。Graph 在单个进程内执行,开发者完全控制;(2) A2A 的 Task 是"跨 Agent 的协作单元"——Task 在不同 Agent 之间传递,每个 Agent 可能运行在不同进程/服务器上。A2A 是分布式协作,LangGraph 是单体内编排。实际架构:LangGraph 编排单个 Agent 内部的工具调用流程,A2A 编排多个 Agent 间的任务委托。两者可以共存——Agent A 用 LangGraph 编排内部流程,通过 A2A 委托 Task 给 Agent B
追问 3:A2A 协议目前成熟吗?可以直接在生产环境用吗?
2025年中处于"早期可用"阶段:(1) 协议规范已发布 v0.1,核心机制(Agent Card、Task 生命周期)稳定,但细节可能调整;(2) Google ADK 原生支持 A2A,LangChain 有社区适配器,CrewAI/AutoGen 尚未原生支持;(3) 生产环境建议:核心流程可以用 A2A,但需要自建安全层(认证、审计、权限控制)和监控层(Task 状态追踪、异常告警);(4) 风险控制:设计降级方案——A2A 通信失败时回退到直接 HTTP 调用或消息队列
5️⃣ 避坑 · 常见错误答法
- ❌ "A2A 和 MCP 是竞争关系,选一个就行" → ✅ "A2A 和 MCP 互补——MCP 管 Agent-Tool,A2A 管 Agent-Agent。一个完整系统需要两者。"
- ❌ "A2A 就是 REST API 的包装" → ✅ "A2A 比 REST API 多了 Task 生命周期管理、Agent Card 发现机制、Artifact 多格式传输、Streaming 支持。不是简单的 HTTP 包装。"
- ❌ "有了 A2A 就不需要 LangGraph 了" → ✅ "A2A 是跨 Agent 协作协议,LangGraph 是单 Agent 内编排框架。两者解决不同层面的问题——A2A 是分布式协作,LangGraph 是单体编排。"
6️⃣ 简历呼应
- 如果你有 Agent 架构项目:从"多协议 Agent 系统"切入,描述你如何设计 A2A + MCP 分层架构,给出系统规模和协作效率数据
- 如果你只做过微服务架构:用"服务网格"迁移——A2A 的 Agent Card 类似服务注册,通信网关类似 Istio Envoy,Task 生命周期类似 Saga 模式
- 如果你是校招无项目:用 A2A + MCP 搭建一个多 Agent 系统(如 RAG Agent + Code Review Agent),测试跨协议协作
- "A2A + MCP: Building Multi-Agent Systems" (Google, 2025)
- "Agent Architecture: Layers and Protocols" (Wang et al., 2025)
- "From Microservices to Agent Services" (Richardson, 2025)