跳转至

A2A 与 MCP:智能体(Agent)系统的互补协议

A2A ❤️ MCP

在AI智能体(Agent)开发领域,两种关键类型的协议正在兴起,以促进互操作性:一种用于连接智能体(Agent)与工具和资源,另一种用于实现智能体(Agent)之间的协作。Agent2Agent(A2A)协议和Model Context Protocol(MCP)分别满足这些不同但相关的需求。

简而言之:智能体(Agent)应用需要同时使用A2A和MCP。我们建议使用MCP连接工具,使用A2A连接智能体(Agent)。

为什么需要不同的协议?

这种区分源于智能体(Agent)所交互对象的本质:

  • 工具与资源

    • 这些通常是具有明确定义、结构化输入和输出的基础组件。它们执行特定的、通常是无状态的函数(例如,计算器、数据库查询API、天气查询服务)。
    • 它们的行为通常是可预测性的和事务性的。
    • 交互通常是单个请求-响应周期。
  • 智能体(Agent)

    • 这些是更自主的系统。它们能够推理、规划、使用多个工具、在较长的交互中维持状态,并参与复杂的、通常是多轮对话,以实现动态适应(新颖性和动态性)的任务。
    • 它们的行为可能比简单工具更具自发性和不可预测性。
    • 交互通常涉及持续的任务、上下文共享和动态协调。

智能体(Agent)应用需要同时利用这两种能力:智能体(Agent)使用工具来收集信息和执行操作,同时与其他智能体(Agent)协作以处理更广泛、更复杂的目标。

Model Context Protocol (MCP)

  • 重点

    • MCP 标准化了 AI 模型和 Agent 如何连接和交互工具、API、数据源以及其他外部资源。
  • 机制

    • 它定义了一种结构化的方式来描述工具能力(类似于大语言模型中的函数调用),向工具传递输入,并接收结构化的输出。
  • 使用场景

    • 使 LLM 能够调用外部 API(例如,获取当前股票价格)
    • 允许 Agent 使用特定参数查询数据库
    • 将 Agent 连接到一组预定义的函数或服务
  • 生态系统

    • MCP 旨在创建一个生态系统,使工具提供商能够轻松地向各种 AI 模型和 Agent 框架提供服务,同时 Agent 开发者能够以标准化的方式轻松使用这些工具。

Agent2Agent Protocol (A2A)

  • 重点

    • A2A 标准化了独立的、通常不透明的 AI Agent 之间如何作为对等方进行通信和协作。
  • 机制

    • 它为 Agent 提供了一个应用层协议,用于:
      • 发现彼此的技能和能力(通过 Agent Cards)
      • 协商交互模式(文本、文件、结构化数据)
      • 管理共享的、有状态的、可能长期运行的任务
      • 交换对话上下文、指令和复杂的多部分结果
  • 使用场景

    • 客服 Agent 将复杂的账单查询委托给专门的账单 Agent,同时保持客户交互的上下文
    • 旅行规划 Agent 与独立的航班、酒店和活动预订 Agent 协调,管理多阶段的预订流程
    • Agent 为随时间演变的协作项目交换信息和状态更新
  • 与工具交互的关键区别

    • A2A 允许比简单的工具调用更动态、有状态和潜在的多模态交互。使用 A2A 的 Agent 是作为 Agent(或代表用户)进行通信,而不仅仅是调用各种独立的函数。

A2A和MCP如何相互补充¶

A2A和MCP并非互斥;它们高度互补,分别解决了智能体系统交互需求的不同层面。

A2A关键概念图

一个智能体应用可能使用A2A与其他智能体通信,而每个智能体内部使用MCP与其特定的工具和资源进行交互。

示例场景:汽车修理店¶

考虑一个由自主AI智能体"机械师"组成的汽车修理店,他们使用专用工具(如车辆千斤顶、万用表和套筒扳手)来诊断和修复问题。工人们经常需要诊断和修复他们以前从未见过的问题。维修过程可能涉及与客户的广泛对话、研究以及与零件供应商的合作。

具体场景示例:

  1. 客户交互(通过 A2A 实现用户到 Agent 的交互):

    • 客户(或其主要助手 Agent)使用 A2A 与"商店经理" Agent 通信:"我的车发出嘎嘎声。"
    • 商店经理 Agent 使用 A2A 进行多轮诊断对话:"您能发送一段噪音的视频吗?","我看到有液体泄漏。这种情况持续多久了?"
  2. 内部工具使用(通过 MCP 实现 Agent 到工具的交互):

    • 被商店经理分配任务的机械师 Agent 需要使用 MCP 与其专业工具交互:
      • 对"车辆诊断扫描仪"工具的 MCP 调用:scan_vehicle_for_error_codes(vehicle_id='XYZ123')
      • 对"维修手册数据库"工具的 MCP 调用:get_repair_procedure(error_code='P0300', vehicle_make='Toyota', vehicle_model='Camry')
      • 对"平台升降机"工具的 MCP 调用:raise_platform(height_meters=2)
  3. 供应商交互(通过 A2A 实现 Agent 之间的交互):

    • 机械师 Agent 确定需要特定零件,使用 A2A 与"零件供应商" Agent 通信:"您有丰田凯美瑞 2018 款的零件 #12345 库存吗?"
    • 同样符合 A2A 标准的零件供应商 Agent 做出响应,可能促成订单。

在这个例子中:

  • A2A 促进了客户与商店之间,以及商店的 Agent 与外部供应商 Agent 之间的高层级、对话式和任务导向的交互。
  • MCP 使机械师 Agent 能够使用其特定的、结构化的工具来执行诊断和维修功能。

将 A2A Agent 表示为 MCP 资源

可以将 A2A Server(远程 Agent)的一些技能作为 MCP 兼容的资源暴露出来,特别是当这些技能定义明确且可以以更像工具、无状态的方式调用时。在这种情况下,另一个 Agent 可能通过 MCP 风格的工具描述(可能源自其 Agent Card)来"发现"这个 A2A Agent 的特定技能。

然而,A2A 的主要优势在于它支持更灵活、有状态和协作的交互,这些交互超出了典型的工具调用范围。A2A 关注的是 Agent 在任务上的合作,而 MCP 更多地关注 Agent 使用能力。

通过同时利用 A2A 进行 Agent 间协作和 MCP 进行工具集成,开发者可以构建更强大、更灵活和更具互操作性的 AI 系统。