主题
高频面试题
什么是 A2A 协议?它和 MCP 协议有什么区别?
A2A 和 MCP 最容易被混淆:一个是横向的 Agent-to-Agent 协作协议,一个是纵向的 Agent-to-Tool 接入协议,面试重点是讲清它们互补而不是替代。
面试官角度分析,想考什么
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 / CA2A 试图把这个关系标准化:每个 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 协作层
两者最清楚的区别是通信对象不同:
- MCP:
Agent Host <-> Tool / Data Server。Server 暴露工具、资源、prompt,Host 调用它来获得外部能力。 - A2A:
Agent <-> 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 内部实现需要隐藏。
- 任务可能长时间运行,需要状态跟踪。
- 需要标准能力发现和协作元数据。