从 Agent Card 看 A2A 与 MCP 的核心差异:AI 代理协议的互补之道

张开发
2026/4/16 16:03:00 15 分钟阅读

分享文章

从 Agent Card 看 A2A 与 MCP 的核心差异:AI 代理协议的互补之道
从 Agent Card 看 A2A 与 MCP 的核心差异AI 代理协议的互补之道引言2025 年到 2026 年AI 代理AI Agent领域迎来了两个重要的开放协议Google 的 A2AAgent2Agent和Anthropic 的 MCPModel Context Protocol。很多开发者会问这两个协议有什么差异我应该用哪个答案是都要用因为它们解决的是不同层次的问题。本文将从Agent Card这个独特视角深入剖析 A2A 与 MCP 的核心差异帮助你理解为什么它们是互补关系而非竞争关系。什么是 Agent Card在深入对比之前先理解一个关键概念Agent Card。Agent Card AI 代理的名片 “菜单”想象你去餐厅吃饭先看菜单→ 知道这家店能做什么菜再点菜→ 选择你需要的服务Agent Card 就是 AI 代理的菜单它是一个标准的 JSON 文件通常位于https://your-agent.com/.well-known/agent-card.json这个文件告诉其他代理或客户端这个 agent 能做什么能力声明支持什么输入/输出格式有什么特殊能力streaming、长周期任务等如何与它通信Agent Card 示例{name:Travel Planner Agent,description:帮你规划旅行行程包括预算、景点、餐饮推荐,url:https://travel-agent.example.com,capabilities:{streaming:true,longRunning:true},defaultInputModes:[text],defaultOutputModes:[text],skills:[{id:currency-conversion,name:Currency Conversion,description:实时汇率转换},{id:activity-planning,name:Activity Planning,description:个性化行程规划}],protocolVersion:0.3.0}关键点Agent Card 是A2A 协议的核心发现机制而MCP 没有这个概念。这就是我们对比的切入点。A2A vs MCP定位差异核心定位对比维度A2AMCP全称Agent2Agent ProtocolModel Context Protocol定位Agent ↔ AgentAgent ↔ Tools/Data类比公共互联网USB 接口发现机制Agent CardTools List任务模型Task有生命周期Tool Call即时响应长周期支持✅ 小时/天级别❌ 通常秒级完成形象类比MCP USB 接口你的电脑Agent通过 USBMCP连接鼠标、键盘、U 盘Tools即插即用标准化接口但鼠标不会跟键盘聊天A2A 公共互联网你的电脑Agent A通过互联网A2A连接另一台电脑Agent B可以委托复杂任务“帮我分析这份数据”Agent B 可能再委托给 Agent C多跳协作从 Agent Card 看协议差异1. 发现机制Agent Card vs Tools ListA2A 的发现流程1. Client 访问 https://agent.example.com/.well-known/agent-card.json 2. 读取 Agent Card了解这个 agent 的能力 3. 决定是否委托任务 4. 通过 A2A 协议创建 Task 5. 实时跟踪任务进度Streaming 6. 接收最终结果ArtifactMCP 的发现流程1. Client 连接 MCP Server 2. Server 暴露 Tools List 3. Client 直接调用工具call_tool(search, {query: ...}) 4. 即时返回结果关键差异Agent Card描述的是另一个 agent 的能力可能跨组织、跨信任边界Tools List描述的是自己配置的工具通常是可信的2. 信任模型不可信 vs 可信A2A 的官方警告来自 GitHub 仓库Treat any agent operating outside of your direct control as apotentially untrusted entity.将任何不在你直接控制下的 agent 视为潜在不可信的实体。为什么因为Agent Card 可能包含恶意 payloadprompt injectionRemote Agent 可能返回错误/有害信息需要输入验证、输出 sanitizationMCP 的信任模型Tools 通常是自己配置的可信直接访问内部数据/API安全边界agent ↔ 外部系统3. 任务复杂度委托 vs 调用A2A Task 示例# 委托一个复杂任务给另一个 agenttaska2a.create_task(agenthttps://travel-agent.example.com,message帮我规划首尔 3 天行程预算$150/天包含汇率转换、景点推荐、餐饮建议)# 任务状态跟踪whiletask.status!completed:updateawaittask.get_update()print(f进度{update.progress}%)# Streaming 支持# 接收最终结果resultawaittask.get_artifact()print(result.itinerary)# 完整的行程单MCP Tool Call 示例# 调用一个工具resultmcp.call_tool(currency_converter,{from:USD,to:KRW,amount:150})print(result.rate)# 即时返回汇率关键差异A2A Task高层级、语义化、长周期、有状态MCP Tool低层级、原子化、即时、无状态实际场景旅行规划助手让我们通过一个完整场景看看 A2A 和 MCP 如何协同工作。用户需求“帮我规划首尔 3 天行程预算$150/天包含汇率转换、景点推荐、餐饮建议”方案 1纯 MCP单 Agent 多 Tools┌─────────────────────────────────────────┐ │ Travel Agent (LLM) │ │ ┌─────────────────────────────────┐ │ │ │ MCP Tools: │ │ │ │ - Currency API (汇率查询) │ │ │ │ - Hotel API (酒店预订) │ │ │ │ - Weather API (天气查询) │ │ │ │ - Maps API (景点推荐) │ │ │ └─────────────────────────────────┘ │ └─────────────────────────────────────────┘优点架构简单易于调试所有工具由同一个 agent 控制缺点工具耦合在 agent 内部难以复用其他专业 agent如专门的汇率 agent扩展性受限方案 2A2A MCP多 Agent 协作用户/Client ↓ ┌───────────────────┐ │ TravelManager │ ← A2A Client Agent │ (Orchestrator) │ └─────────┬─────────┘ │ A2A 委托 ┌─────────────┼─────────────┬──────────┐ ↓ ↓ ↓ ↓ ┌────────────┐ ┌────────────┐ ┌─────────┐ ┌─────────┐ │ Currency │ │ Hotel │ │ Weather │ │Activity │ │ Agent │ │ Agent │ │ Agent │ │Planner │ └─────┬──────┘ └─────┬──────┘ └────┬────┘ └────┬────┘ │ │ │ │ └──────────────┴─────────────┴────────────┘ MCP Tools (每个 agent 内部可能用 MCP 连接自己的工具)工作流TravelManager接收用户请求通过A2A委托给Currency AgentConvert $150 USD to KRWCurrency Agent 内部用MCP连接汇率 API通过A2A委托给Activity PlannerPlan 3-day Seoul itineraryActivity Planner 内部用MCP连接 Maps API、餐饮数据库汇总所有结果返回给用户优点每个 agent 专注自己的领域单一职责可以复用第三方专业 agent易于扩展添加新的 agent 即可缺点架构复杂度增加需要处理跨 agent 的错误处理、超时、重试为什么两者需要互补1. 抽象层级不同MCP解决的是Agent 如何连接外部世界工具、数据、APIA2A解决的是Agent 如何与其他 Agent 协作委托、分工、多跳一个完整的 AI 系统两者都需要对外用 A2A 与其他 agent 协作对内用 MCP 连接自己的工具和数据2. 生态系统不同MCP 生态工具开发者发布 MCP ServerAgent 开发者集成 MCP ToolsA2A 生态Agent 开发者发布 Agent Card暴露能力Client 开发者发现并委托任务未来趋势一个 agent 可能同时是A2A Server对外提供服务有 Agent CardA2A Client委托任务给其他 agentMCP Server暴露自己的工具MCP Client使用外部工具3. 安全边界不同MCP 安全模型[可信 Agent] ←MCP→ [外部 API/数据库] ↑ │ 安全边界防止外部系统攻击 agentA2A 安全模型[Agent A] ←A2A→ [Agent B] ←A2A→ [Agent C] ↑ ↑ ↑ │ │ │ 安全边界 1 安全边界 2 安全边界 3A2A 需要处理多信任域的复杂场景而 MCP 主要处理单信任域内的工具调用。对开发者的启示1. 选择协议的原则场景推荐协议连接外部 API、数据库、文件MCP委托复杂任务给另一个 agentA2A多 agent 协作跨组织A2A单个 agent 内部工具集成MCP长周期任务小时/天A2A即时响应秒级MCP2. 实现建议如果你要构建一个 AI Agent先用 MCP连接你的工具和数据定义清晰的 Tools List实现错误处理、重试机制再用 A2A暴露你的能力创建 Agent Card/.well-known/agent-card.json实现 Task 生命周期管理支持 StreamingSSE考虑安全输入验证Agent Card 可能被注入输出 sanitization认证授权如 OAuth、API Key3. 未来趋势2026 年及以后的 AI 代理架构┌─────────────────────────────────────────────────────┐ │ Your AI Agent │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ A2A Layer (对外协作) │ │ │ │ - Agent Card 暴露能力 │ │ │ │ - 接收/委托 Task │ │ │ │ - Streaming 进度跟踪 │ │ │ └─────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────┐ │ │ │ MCP Layer (对内连接) │ │ │ │ - Tools List │ │ │ │ - 连接 API/数据库/文件 │ │ │ │ - 即时调用 │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘总结核心差异一句话协议核心定位类比MCPAgent 连接工具和数据USB 接口A2AAgent 连接其他 Agent公共互联网关键要点Agent Card 是 A2A 的核心发现机制MCP 没有这个概念A2A 处理不可信的远程 agentMCP 处理可信的本地工具A2A 支持长周期、有状态任务MCP 支持即时、原子化调用两者互补不是竞争——完整的 AI 系统需要同时使用两种协议行动建议学习 MCP从连接一个简单的 API 开始学习 A2A从创建一个 Agent Card 开始实践结合构建一个同时使用两种协议的 agent关注生态A2A 已捐赠给 Linux FoundationMCP 也在标准化进程中参考资源A2A 官方文档https://a2a-protocol.org/A2A 代码示例https://agent2agent.info/docs/examples/MCP 官方文档https://modelcontextprotocol.io/GitHub A2A Sampleshttps://github.com/a2aproject/a2a-samplesIBM A2A 教程https://www.ibm.com/think/tutorials/use-a2a-protocol-for-ai-agent-communication本文基于 2026 年 4 月的 A2A 和 MCP 协议规范编写。协议仍在快速演进中请关注官方文档获取最新信息。

更多文章