谷歌Agent2Agent (A2A) 协议技术细节分析,包括其与 MCP 关系

谷歌Agent2Agent (A2A) 协议技术细节分析,包括其与 MCP 关系
最新回答
性冷不矫情

2022-07-02 09:47:38

谷歌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 的典型工作流程如下:

  1. 发现:客户端从 /.well-known/agent.json 获取 Agent Card,了解智能体的能力。
  2. 启动:客户端发送任务请求,使用 tasks/send 处理即时任务,返回最终 Task 对象;使用 tasks/sendSubscribe 处理长期任务,服务器通过 SSE 事件发送更新。
  3. 处理:服务器处理任务,可能涉及流式更新或直接返回结果。
  4. 交互(可选):若任务状态为 input-required,客户端可发送更多消息,使用相同 Task ID 提供输入。
  5. 完成:任务达到终端状态(如 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 则让智能体能协作处理这些数据,完成任务。

案例解析

以汽车维修店为例:

  • 现实场景:维修店员工使用专用工具(如千斤顶、万用表、套筒扳手)诊断和修复故障。他们常需处理陌生问题,过程中涉及与客户沟通、研究解决方案,以及与零件供应商协作。
  • 智能体映射

    MCP 协议:连接智能体与结构化工具(如“将平台升高2米”“将扳手向右旋转4毫米”)。

    A2A 协议:支持终端用户或其他智能体与维修工交互(如“我的车有异响”),实现动态对话(“请拍摄左轮照片”“发现液体渗漏,持续多久了?”),并协调零件供应商等外部智能体。

协议的交集

谷歌建议应用将 A2A 智能体建模为 MCP 资源(通过 AgentCard 描述)。这样,框架既能通过 MCP 调用工具,又能通过 A2A 与用户、远程智能体及其他智能体通信,实现无缝协作。例如,一个智能体可能通过 MCP 从数据库检索数据,然后通过 A2A 与另一个智能体协作分析数据。

综上所述,A2A 协议与 MCP 是互补的,共同推动了智能体生态的发展。A2A 专注于智能体之间的协作,而 MCP 则关注于智能体与外部数据源的连接。两者结合,为智能体的应用和发展提供了更广阔的空间。