Skip to content

高频面试题

什么是 A2A 协议?它和 MCP 协议有什么区别?

A2A 和 MCP 最容易被混淆:一个是横向的 Agent-to-Agent 协作协议,一个是纵向的 Agent-to-Tool 接入协议,面试重点是讲清它们互补而不是替代。

适合阶段:多 Agent 系统 / 协议架构面核心能力:Agent Interop · Protocol Layering · Task Delegation · MCP Boundary

面试官角度分析,想考什么

  • A2A 协议是什么?
    考你能否把它说成 Agent 之间发现能力、委托任务、跟踪状态和交付产物的协议。

  • 它和 MCP 差在哪?
    考分层:MCP 是 Agent 到工具的纵向接入,A2A 是 Agent 到 Agent 的横向协作。

  • 有了 MCP 为什么还需要 A2A?
    考取舍:工具协议管不了跨 Agent 的任务生命周期、opaque 执行和多轮协作。

可直接抄走的 30 秒参考答案

text
A2A 是 Agent2Agent Protocol,解决的是独立 Agent 之间怎么发现能力、委托任务、交换消息、跟踪状态和交付结果。它和 MCP 的层次不同:MCP 是 Agent 或 LLM 应用连接工具和数据源,比如 GitHub、数据库、文件系统;A2A 是一个 Agent 连接另一个 Agent。MCP 更像纵向工具接入,A2A 更像横向协作。真实系统里两者通常互补:每个 Agent 用 MCP 接自己的工具,Agent 之间用 A2A 做跨框架、跨团队协作。

面试回答详解,知其所以然

A2A 全称通常指 Agent2Agent Protocol,由 Google 在 2025 年发布并推进开放治理。它关注的是独立 Agent 之间如何互相发现能力、发起任务、交换消息、跟踪状态和交付产物。

1. A2A 解决的是 Agent 间互操作

在真实系统里,一个 Agent 不一定能完成所有事情。比如采购 Agent 需要问库存 Agent,旅行 Agent 需要委托报销 Agent,企业助手需要调用另一个团队维护的专业 Agent。

如果没有统一协议,集成会变成:

text
Agent A 适配 Agent B 的私有 API
Agent A 适配 Agent C 的私有 SDK
Agent D 再重新适配 Agent B / C

A2A 试图把这个关系标准化:每个 Agent 通过 Agent Card 描述自己,通过标准任务和消息接口接收委托、更新状态并返回产物。调用方不需要知道被调用 Agent 内部用什么模型、框架、工具或规划方式。

2. A2A 的基本协作链路

一个典型 A2A 流程可以概括为:

text
发现 Agent Card
  -> 判断能力是否匹配
  -> 创建或发送 Task / Message
  -> 远端 Agent 执行任务
  -> 调用方跟踪状态或接收流式更新
  -> 远端 Agent 返回 Artifact / 最终结果

这里的关键是远端 Agent 对调用方是 opaque 的。调用方只关心它声明的能力、输入输出模式、认证方式、任务状态和最终产物,不关心它内部是不是 LangGraph、AutoGen、自研 workflow,或者它自己又调用了哪些 MCP 工具。

3. MCP 是工具接入层,A2A 是 Agent 协作层

两者最清楚的区别是通信对象不同:

  • MCPAgent Host <-> Tool / Data Server。Server 暴露工具、资源、prompt,Host 调用它来获得外部能力。
  • A2AAgent <-> Agent。一个 Agent 把任务委托给另一个独立 Agent,并跟踪任务状态和结果。

可以用一个真实架构理解:

text
Travel Agent
  -> 用 A2A 委托 Expense Agent 处理报销判断
  -> Expense Agent 内部用 MCP 调公司政策库和财务系统

所以它们不是竞争关系。MCP 让每个 Agent 更容易接工具,A2A 让多个独立 Agent 更容易协作。

4. 为什么不能直接用 MCP 调另一个 Agent

可以把一个 Agent 包成 MCP Tool,但这通常会丢失 Agent 协作所需的语义。

MCP Tool 更像一次函数调用:给参数、执行、返回结果。A2A 面向的是长任务和协作过程:

  • Agent 需要先声明自己的身份、能力、技能和 endpoint。
  • 任务可能是长时间运行的,需要状态机。
  • 中间可能需要多轮消息、澄清、文件、流式更新或人工确认。
  • 结果不只是文本,还可能是 artifact。
  • 调用方不应该看到被调用 Agent 的内部工具 schema。

如果只是把 Agent 当工具函数调用,复杂任务会变成一个黑盒长调用,难以追踪、协商和恢复。A2A 的价值就在于把“委托一个自主 Agent 完成任务”建模成标准协议。

5. 选型:什么时候用 A2A,什么时候用 MCP

  • 用 MCP:当你要把数据库、文件系统、SaaS API、内部服务、搜索、浏览器、代码仓库接入一个 Agent。
  • 用 A2A:当你要让不同团队、不同框架、不同厂商或不同组织的独立 Agent 协作。
  • 两者都用:每个 Agent 内部通过 MCP 接工具,Agent 之间通过 A2A 通信。
  • 都不一定用:如果只是同一个代码库里的两个函数或两个 subagent,用内部调用、队列或框架原生 supervisor 可能更简单。

成熟回答要避免“有协议就上协议”。A2A 的收益来自跨边界互操作;在单一进程、单一团队、强控制的内部编排里,协议化可能反而增加复杂度。

面试官追问3个问题

追问一:A2A 和 MCP 是竞争关系吗?

  • 考察点:协议分层和生态判断。
  • 回答方向:不是。MCP 是 Agent 接工具和上下文,A2A 是 Agent 之间协作。一个系统可以每个 Agent 内部用 MCP,Agent 之间用 A2A。

追问二:为什么不用 OpenAPI 直接描述 Agent API?

  • 考察点:是否理解 Agent 协作的特殊语义。
  • 回答方向:OpenAPI 描述 HTTP 接口很有用,但 Agent 协作还需要能力发现、技能描述、任务状态、消息、多模态 part、artifact 和长任务语义。A2A 可以在 HTTP 上运行,但抽象层次比普通 REST API 更贴近 Agent 委托。

追问三:A2A 的远端 Agent 为什么要保持 opaque?

  • 考察点:封装和跨组织协作意识。
  • 回答方向:调用方不应该依赖远端 Agent 的内部模型、工具、prompt 或 workflow,否则跨厂商互操作会退化成私有集成。A2A 只暴露能力、任务接口和产物,让双方在边界上协作。

扩展知识

A2A 的核心对象

  • Agent Card:描述 Agent 身份、能力、技能、endpoint、认证和输入输出模式。
  • Task:一次被委托工作的生命周期,通常有状态、上下文和结果。
  • Message:Agent 之间交换的信息,可以承载文本、文件、结构化数据等内容。
  • Part:Message 或 Artifact 的组成单元,用于表达多模态内容。
  • Artifact:任务产出的结果,例如报告、文件、结构化对象或其他交付物。

这些对象说明 A2A 不是简单 RPC,而是面向协作任务的协议。

MCP 和 A2A 的一图流理解

text
                A2A
Agent A  <---------------->  Agent B
  |                            |
  | MCP                        | MCP
  v                            v
Tools / Data               Tools / Data

一个 Agent 可以既是 A2A Client,也是 A2A Server;同时它内部还可以作为 MCP Host,连接多个 MCP Server。

A2A 与内部多 Agent 编排的区别

不是所有多 Agent 都需要 A2A。比如同一个 LangGraph 图里的 planner、researcher、writer 节点,通常共享 runtime、状态和权限,用框架内部消息就够了。

A2A 更适合这些边界:

  • 跨团队维护,不共享代码库。
  • 跨厂商或跨产品调用。
  • 各 Agent 内部实现需要隐藏。
  • 任务可能长时间运行,需要状态跟踪。
  • 需要标准能力发现和协作元数据。

基于 MIT 协议开源