什么是A2A协议?

什么是A2A协议?

A2A协议是一个开放标准,让AI智能体之间能够无缝通信和协作。它为使用不同框架、来自不同供应商构建的智能体提供了共同语言,促进互操作性并打破孤岛。智能体是在其环境中独立行动的自主问题解决者。A2A让来自不同开发者、基于不同框架、属于不同组织的智能体能够联合起来,共同工作。

为什么使用A2A协议

A2A解决了AI智能体协作中的关键挑战。它为智能体交互提供了标准化方法。本节解释A2A解决的问题和提供的好处。

A2A解决的问题

考虑用户要求AI助手规划一次国际旅行的请求。这个任务涉及协调多个专业智能体,例如:

  • 航班预订智能体
  • 酒店预订智能体
  • 本地旅游推荐智能体
  • 货币转换智能体

没有A2A,集成这些不同的智能体会面临几个挑战:

  • 智能体暴露问题:开发者经常将智能体包装为工具来暴露给其他智能体,类似于在多智能体控制平台(模型上下文协议)中暴露工具的方式。然而,这种方法效率低下,因为智能体被设计为直接协商。将智能体包装为工具限制了它们的能力。A2A允许智能体以原本的形式暴露,无需这种包装。

  • 自定义集成:每个交互都需要自定义的点对点解决方案,造成巨大的工程开销。

  • 创新缓慢:为每个新集成进行定制开发会减缓创新。

  • 可扩展性问题:随着智能体数量和交互的增长,系统变得难以扩展和维护。

  • 互操作性:这种方法限制了互操作性,阻止了复杂AI生态系统的有机形成。

  • 安全漏洞:临时通信通常缺乏一致的安全措施。

A2A协议通过为AI智能体建立可靠和安全的互操作性来解决这些挑战。

A2A示例场景

本节提供了一个示例场景,说明使用A2A(Agent2Agent)协议进行AI智能体之间复杂交互的好处。

用户的复杂请求

用户与AI助手互动,给出像"规划一次国际旅行"这样的复杂提示。

  graph LR
    User[用户] --> Prompt[提示] --> AI_Assistant[AI助手]

协作的需求

AI助手收到提示,意识到需要调用多个专业智能体来完成请求。这些智能体包括航班预订智能体、酒店预订智能体、货币转换智能体和本地旅游智能体。

  graph LR
    subgraph "专业智能体"
        FBA[✈️ 航班预订智能体]
        HRA[🏨 酒店预订智能体]
        CCA[💱 货币转换智能体]
        LTA[🚌 本地旅游智能体]
    end

    AI_Assistant[🤖 AI助手] --> FBA
    AI_Assistant --> HRA
    AI_Assistant --> CCA
    AI_Assistant --> LTA

互操作性挑战

核心问题:智能体无法协同工作,因为每个都有自己的定制开发和部署。

缺乏标准化协议的后果是,这些智能体不能相互协作,更不用说发现它们能做什么。各个智能体(航班、酒店、货币和旅游)都是孤立的。

“使用A2A"的解决方案

A2A协议提供标准方法和数据结构,让智能体相互通信,无论其底层实现如何,因此相同的智能体可以用作互联系统,通过标准化协议无缝通信。

AI助手现在充当协调者,从所有启用A2A的智能体接收凝聚信息。然后它呈现一个单一、完整的旅行计划,作为对用户初始提示的无缝响应。

A2A参与者显示用户、A2A客户端(客户端智能体)和A2A服务器(远程智能体)

A2A的核心优势

实施A2A协议在整个AI生态系统中提供了显著优势:

  • 安全协作:没有标准,很难确保智能体之间的安全通信。A2A使用HTTPS进行安全通信,并维护不透明操作,因此智能体在协作期间无法看到其他智能体的内部工作。

  • 互操作性:A2A打破了不同AI智能体生态系统之间的孤岛,使来自各种供应商和框架的智能体能够无缝协作。

  • 智能体自主性:A2A允许智能体保持其个体能力,在与其他智能体协作时作为自主实体行动。

  • 降低集成复杂性:协议标准化智能体通信,使团队能够专注于其智能体提供的独特价值。

  • 支持长时间运行操作:协议支持长时间运行操作(LRO)以及使用服务器发送事件(SSE)和异步执行的流式传输。

A2A的关键设计原则

A2A开发遵循优先考虑广泛采用、企业级能力和面向未来的原则。

  • 简单性:A2A利用现有标准,如HTTP、JSON-RPC和服务器发送事件(SSE)。这避免了重新发明核心技术,加速了开发者采用。

  • 企业就绪:A2A解决关键的企业需求。它与强大的身份验证、授权、安全、隐私、跟踪和监控的标准Web实践保持一致。

  • 异步:A2A原生支持长时间运行任务。它处理智能体或用户可能不保持持续连接的场景。它使用流式传输和推送通知等机制。

  • 模态无关:协议允许智能体使用各种内容类型进行通信。这使得除了纯文本之外的丰富和灵活交互成为可能。

  • 不透明执行:智能体有效协作,无需暴露其内部逻辑、内存或专有工具。交互依赖于声明的能力和交换的上下文。这保护了知识产权并增强了安全性。

理解智能体技术栈:A2A、MCP、智能体框架和模型

A2A位于更广泛的智能体技术栈中,包括:

  • A2A:标准化部署在不同组织并使用不同框架开发的智能体之间的通信。
  • MCP:将模型连接到数据和外部资源。
  • 框架(如ADK):提供构建智能体的工具包。
  • 模型:智能体推理的基础,可以是任何大语言模型(LLM)。

智能体技术栈

A2A和MCP

在AI通信的更广泛生态系统中,您可能熟悉旨在促进智能体、模型和工具之间交互的协议。值得注意的是,模型上下文协议(MCP)是一个新兴标准,专注于将大语言模型(LLM)与数据和外部资源连接。

Agent2Agent(A2A)协议旨在标准化AI智能体之间的通信,特别是那些部署在外部系统中的智能体。A2A定位为补充MCP,解决智能体交互的不同但相关的方面。

  • MCP的重点:减少将智能体与工具和数据连接所涉及的复杂性。工具通常是无状态的,执行特定的预定义功能(例如计算器、数据库查询)。

  • A2A的重点:使智能体能够在其原生模态内协作,允许它们作为智能体(或用户)进行通信,而不是被限制为类似工具的交互。这使得复杂的多轮交互成为可能,其中智能体推理、规划并将任务委托给其他智能体。例如,这促进了多轮交互,如下订单时涉及谈判或澄清的交互。

A2A和MCP集成

将智能体封装为简单工具的做法本质上是有限的,因为它无法捕获智能体的全部能力。这个关键区别在《为什么智能体不是工具》一文中有详细探讨。

更深入的比较,请参考A2A和MCP比较文档。

A2A和ADK

智能体开发工具包(ADK)是Google开发的开源智能体开发工具包。A2A是智能体的通信协议,支持智能体间通信,无论其构建所使用的框架如何(例如ADK、LangGraph或Crew AI)。ADK是用于开发和部署AI智能体的灵活和模块化框架。虽然针对Gemini AI和Google生态系统进行了优化,ADK是模型无关的、部署无关的,并为与其他框架的兼容性而构建。

A2A请求生命周期

A2A请求生命周期是详细说明请求遵循的四个主要步骤的序列:智能体发现、身份验证、sendMessage API和sendMessageStream API。以下图表深入了解操作流程,说明客户端、A2A服务器和认证服务器之间的交互。

  sequenceDiagram
    participant Client as 客户端
    participant A2A_Server as A2A服务器
    participant Auth_Server as 认证服务器

    rect rgb(240, 240, 240)
    Note over Client, A2A_Server: 1. 智能体发现
    Client->>A2A_Server: GET智能体卡片 (/.well-known/agent-card)
    A2A_Server-->>Client: 返回智能体卡片
    end

    rect rgb(240, 240, 240)
    Note over Client, Auth_Server: 2. 身份验证
    Client->>Client: 解析智能体卡片获取安全方案
    alt 安全方案是"openIdConnect"
        Client->>Auth_Server: 基于"authorizationUrl"和"tokenUrl"请求令牌
        Auth_Server-->>Client: 返回JWT
    end
    end

    rect rgb(240, 240, 240)
    Note over Client, A2A_Server: 3. sendMessage API
    Client->>Client: 解析智能体卡片获取"url"参数发送API请求
    Client->>A2A_Server: POST /sendMessage (带JWT)
    A2A_Server->>A2A_Server: 处理消息并创建任务
    A2A_Server-->>Client: 返回任务响应
    end

    rect rgb(240, 240, 240)
    Note over Client, A2A_Server: 4. sendMessageStream API
    Client->>A2A_Server: POST /sendMessageStream (带JWT)
    A2A_Server-->>Client: 流:任务(已提交)
    A2A_Server-->>Client: 流:任务状态更新事件(工作中)
    A2A_Server-->>Client: 流:任务工件更新事件(工件A)
    A2A_Server-->>Client: 流:任务工件更新事件(工件B)
    A2A_Server-->>Client: 流:任务状态更新事件(已完成)
    end

下一步

了解构成A2A协议基础的核心概念