谷歌Agent2Agent (A2A) 协议技术细节分析,包括其与 MCP 关系
A2A 协议的技术细节
A2A 是一个开放协议,旨在促进 AI Agent 之间的协作,特别适用于大规模、多智能体系统的部署。
设计原则
A2A 基于五个核心原则:
- 拥抱智能体能力:支持自然、非结构化的协作模式。
- 利用现有标准:使用 HTTP、Server-Sent Events (SSE) 和 JSON-RPC,确保与现有系统的兼容性。
- 默认安全:支持企业级认证和授权,启动时与 OpenAPI 保持一致。
- 支持长期任务:处理从快速任务到深入研究的任务,提供实时反馈、通知和状态更新。
- 多模态支持:支持文本、音频、视频流等多模态通信。
关键组件
A2A 包括以下关键组件:
- Agent Card:公共元数据文件,位于 /.well-known/agent.json,描述智能体的能力、技能、端点 URL 和认证要求,用于能力发现。
- A2A 服务器:暴露 HTTP 端点,实现 A2A 协议方法,管理任务执行。
- A2A 客户端:应用程序或智能体,消费 A2A 服务,通过发送 tasks/send 或 tasks/sendSubscribe 请求与服务器交互。
- 任务(Task):工作的核心单位,有唯一 ID,可处于多种状态(如 submitted、working、input-required、completed、failed、canceled)。
- 消息(Message):通信单位,角色为 user 或 agent,包含“部分”(Parts)。
- 部分(Part):消息或工件中的内容单位,包括 TextPart(文本内容)、FilePart(文件)、DataPart(结构化 JSON 数据)。
- 工件(Artifact):任务生成的输出,也包含 Parts。
- 流式传输:对于长期任务,使用 tasks/sendSubscribe,服务器通过 SSE 发送事件(如 TaskStatusUpdateEvent、TaskArtifactUpdateEvent)。
- 推送通知:支持 pushNotifications 的服务器可通过 tasks/pushNotification/set 发送更新到客户端提供的 webhook。
具体流程
A2A 的典型工作流程如下:
- 发现:客户端从 /.well-known/agent.json 获取 Agent Card,了解智能体的能力。
- 启动:客户端发送任务请求,使用 tasks/send 处理即时任务,返回最终 Task 对象;使用 tasks/sendSubscribe 处理长期任务,服务器通过 SSE 事件发送更新。
- 处理:服务器处理任务,可能涉及流式更新或直接返回结果。
- 交互(可选):若任务状态为 input-required,客户端可发送更多消息,使用相同 Task ID 提供输入。
- 完成:任务达到终端状态(如 completed、failed 或 canceled)。
额外功能与未来发展
A2A 还具备以下额外功能,并计划在未来进行增强:
- 能力发现:通过 Agent Card 实现智能体间能力发现。
- 协作:智能体通过消息交换上下文、回复、工件和用户指令。
- 用户体验协商:消息包括“部分”,支持不同内容类型(如图像、iframe、视频、网页表单),提供丰富的交互。
- 未来增强:计划包括智能体发现、智能体协作(如 QuerySkill() 动态检查技能)、任务生命周期改进(如动态 UX 协商)和客户端方法扩展。
A2A 与 MCP 的关系
标准化协议的重要性
标准化协议是实现智能体互操作性的关键,尤其在连接智能体与外部系统时。这一需求聚焦于两个相互关联的创新领域:工具与智能体。
- 工具:是具有结构化输入/输出和(通常)明确行为的原子单元。
- 智能体:是能通过工具调用、逻辑推理和用户交互完成新任务的自主应用。要实现用户目标,智能体应用必须同时协调工具和智能体。
互补性协议
A2A 与 Anthropic 的 Model Context Protocol (MCP) 是互补的,可以比喻为一个是电话簿(A2A),一个是工具说明书(MCP)。
- MCP 的角色:MCP 旨在标准化 AI 模型与外部数据源(如数据库、API、文件系统)的连接,让 AI 助理能够访问和利用上下文数据,提升响应质量。MCP 正在统一不同模型和框架的“函数调用”功能,催生了一个工具服务商生态系统,降低了智能体与工具/数据的对接复杂度。
- A2A 的角色:A2A 是应用层协议,支持智能体以自然模态协作。A2A 允许智能体以“智能体”(或“用户”)身份交互,而非作为工具被调用。A2A 与 MCP 互补,共同推动智能体生态发展。
互补关系
A2A 补充 Anthropic 的 MCP,提供有用的工具和上下文给智能体。例如:
- MCP 确保智能体能访问数据和工具(如通过 Google Drive、Slack、GitHub 等)。
- A2A 则让智能体能协作处理这些数据,完成任务。
案例解析
以汽车维修店为例:
协议的交集
谷歌建议应用将 A2A 智能体建模为 MCP 资源(通过 AgentCard 描述)。这样,框架既能通过 MCP 调用工具,又能通过 A2A 与用户、远程智能体及其他智能体通信,实现无缝协作。例如,一个智能体可能通过 MCP 从数据库检索数据,然后通过 A2A 与另一个智能体协作分析数据。
综上所述,A2A 协议与 MCP 是互补的,共同推动了智能体生态的发展。A2A 专注于智能体之间的协作,而 MCP 则关注于智能体与外部数据源的连接。两者结合,为智能体的应用和发展提供了更广阔的空间。