Q974工具调用真题解析工具调用AgentAlpha 社区真题库约 8 分钟更新 2026-09-29

A2A 和 MCP 有什么区别?在实际系统中如何配合使用

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 调用)
  1. 配合使用的典型流程**

以"分析竞品并生成报告"为例:

  1. 用户向 Orchestrator Agent 发送请求:"分析竞品 Acme Corp 的产品策略"
  2. Orchestrator 通过 A2A 发现 DataAnalysis Agent(查询 Agent Card,确认有 analyze_competitor skill)
  3. Orchestrator 通过 A2A 发送 Task:{task: "analyze_competitor", input: {company: "Acme Corp"}}
  4. DataAnalysis Agent 接收 Task,内部通过 MCP 调用工具: - MCP search_web("Acme Corp product strategy") → 获取搜索结果 - MCP scrape_webpage(url) → 抓取竞品官网 - MCP query_database("competitor_data") → 查询内部数据库
  5. DataAnalysis Agent 分析数据,通过 A2A 返回 Artifact:{type: "report", content: "..."}
  6. Orchestrator 收到报告,通过 A2A 委托 DocSummary Agent 生成摘要
  7. 最终结果返回用户

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)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。