A2A协议(Agent to Agent Protocol)详解与官方案例实践分享

292 阅读8分钟

A2A协议介绍

什么是 Agent to Agent Protocol?

Agent to Agent Protocol (A2A) 是由 Google 推出的开源协议,旨在实现不透明 Agent 智能体应用程序之间的通信和互操作性。该协议使 Agent 智能体能够完成任务,而无需共享内存、想法或工具,相反,它们交换上下文、状态、指令和各自原生模态的数据。

上图也说明了A2A协议和MCP协议之间的区别:A2A是负责 Agent 智能体之间的通信、协作和能力发现,MCP是负责 Agent 智能体与工具的交互、资源管理和上下文共享。

简单说就是MCP For Tools(APIs、Resources),A2A For Agents。

有了A2A之后,我理解跨平台的Agent就可以互相访问了,比如百灵、百炼、扣子等平台上的Agent都遵循A2A协议开发后,互相之间就可以通信了。

应用场景

企业自动化

在企业环境中,A2A 使代理能够跨孤立的数据系统和应用程序工作。例如,供应链规划代理可以与库存管理、物流和采购代理协调,即使它们由不同的供应商或在不同的框架中构建。这增加了自主性并提高了生产力,同时降低了长期成本。

多代理协作

A2A 协议实现了真正的多代理场景,代理可以在其自然、非结构化的模式中协作,即使它们不共享内存、工具和上下文。这超越了简单地将一个代理用作另一个代理的"工具" - 它允许每个代理在处理复杂任务时保持自己的能力。

跨平台集成

对于商业应用,A2A 允许 AI 代理跨整个企业应用程序生态工作。这意味着代理可以访问和协调跨各种平台的其他代理,如 CRM 系统、知识库、项目管理工具等。跨多样化平台和云环境管理代理的标准化方法对于实现协作 AI 的潜力至关重要。

A2A 的关键功能

能力发现

代理可以使用 JSON 格式的"代理卡"(Agent Card)来广告其能力。这使客户端代理能够识别最适合执行任务的代理,并利用 A2A 与远程代理通信。例如,客户端代理可能发现另一个代理专门处理财务数据,并将财务分析任务委托给它。

任务管理

客户端和远程代理之间的通信以任务完成为导向,代理共同工作以满足最终用户请求。这个"任务"对象由协议定义,具有生命周期。它可以立即完成,或者对于长时间运行的任务,每个代理可以相互通信以保持同步。任务的输出被称为 "Artifact"。

协作

代理可以相互发送消息,传达上下文、回复、制品或用户指令。这为代理创建了一种结构化的方式,以共享完成任务所需的信息。例如,一个代理可能提供关于用户偏好的上下文,而另一个代理可能返回分析结果。

用户体验协商

每条消息都包含"部分"(parts),这是一个完整形成的内容片段,如生成的文本或图像。每个部分都有指定的内容类型,允许客户端和远程代理协商所需的正确格式,并明确包含对用户 UI 功能的协商,如 iframe、视频、Web 表单等。

A2A 设计原则

A2A 设计遵循五个关键原则:

  1. 拥抱代理能力:A2A 专注于使代理能够在其自然、非结构化的模式中协作,即使它们不共享内存、工具和上下文。
  2. 基于现有标准构建:该协议建立在现有流行标准之上,包括 HTTP、SSE、JSON-RPC,这意味着它更容易与企业已经每天使用的现有 IT 栈集成。
  3. 默认安全:A2A 旨在支持企业级身份验证和授权,在启动时与 OpenAPI 的身份验证方案保持一致。
  4. 支持长时间运行的任务:A2A 灵活且支持各种场景,从快速任务到可能需要数小时甚至数天的深入研究(当人在循环中时)。在此过程中,A2A 可以向用户提供实时反馈、通知和状态更新。
  5. 模态无关:代理世界不仅限于文本,这就是为什么 A2A 支持各种模态,包括音频和视频流。

A2A 的优势

统一代理通信

A2A 提供了代理协作的标准化方式,消除了不同代理框架之间定制集成代码的需求。这显著减少了开发工作,并实现了在不同平台上构建的代理之间的无缝通信。

企业级安全

该协议设计以安全作为基本原则,支持企业级身份验证和授权。这确保代理通信维持业务应用程序所需的安全标准。

大规模互操作性

A2A 使真正的多代理生态系统能够出现,专业代理可以共同解决复杂问题。这种互操作性使企业能够利用特定任务的最佳代理,无论它们来自哪个供应商或框架。

面向未来的设计

通过建立在现有标准之上并支持各种模态,A2A 设计用于随着 AI 格局的发展而成长。该协议可以支持新兴的代理能力和交互模型。

其他更详细的信息可以到A2A Protocol官方文档里面了解。

A2A协议规划介绍

A2A 协议规范文件定义可以在 GitHub 仓库中获取,地址:https://github.com/google/A2A/blob/main/specification/json/a2a.json,这个文件是一个 JSON Schema 文件,用于定义 A2A 协议(Agent-to-Agent Protocol)的数据结构和验证规则。它提供了多个定义($defs),每个定义是一个数据对象或错误响应的结构描述。

以下是文件的详细分解:

协议核心组件

  • Agent Card:一个公开的 JSON 文件(通常托管在 /.well-known/agent.json),用于描述该 Agent 的名称、功能、技能(Skill)、URL、认证方式等信息,便于客户端进行「服务发现」和「能力匹配」。
  • Task:表示一个具体的工作单元,具有唯一 ID,并可以在多轮交互中不断更新状态。
  • Message:客户端和 Agent 之间互通时用的消息对象("user" 或 "agent" 角色),其中可以包含多种类型的 Part(如文本部分、文件部分、数据部分等)
  • Artifact:由 Agent 在执行任务过程中生成的输出结果。它与 Message 的差别在于,Artifact 通常是「结果物」或产物,而 Message 常用于「对话或指令」。
  • Push Notification:可选功能,如果 Agent 支持 pushNotifications,就可以向客户端指定的 URL 主动发起任务进度更新,而无需客户端轮询。
  • Streaming:如果 Agent 支持 streaming 功能,就可以在处理某个任务时,通过 tasks/sendSubscribe 使用 SSE 进行分段或实时地输出状态与结果。

A2A协议-客户端(Cline等)如何发现并获取到Agent Server

AgentCard 是 A2A 中用于 Agent 发现 的关键机制。它是一个公开的 JSON 元数据文件,描述了一个 A2A Agent Server 的基本信息、能力、技能、API 端点以及所需的认证方式。

1、推荐标准: A2A 推荐将 Agent Card 托管在 Agent 服务的基础 URL 下的一个 熟知位置 (Well-Known URI)https://<agent-base-url>/.well-known/agent.json。这类似于许多 Web 标准(如 OpenID Connect Discovery)的做法。Client 可以通过 DNS 找到 Agent 的服务器,然后发送 HTTP GET 请求到这个熟知路径来获取 Agent Card。

2、其他方式: 也可以通过私有注册中心 (Registry)、Agent 目录 (Catalog) 或市场 (Marketplace) 来发现和管理 Agent Card。

其他A2A协议规范以及上述架构中的Scehme的介绍可以到A2A Protocol官方文档里面了解。

A2A协议官方案例实践

准备工作

1、下载GitHub - google/A2A: An open protocol enabling communication and interoperability between opaque age

2、申请Google API Key console.cloud.google.com/apis/

3、Enable Generative Language API,通过在对应的API Key下面添加 Generative Language API

4、API KEY 下配置上可访问的API列表

A2A项目实践-按langgraph的README文件进行实践

1、设置Google API 环境变量 echo "GOOGLE_API_KEY=your_api_key_here" > .env

2、export FIREBASE_FUNCTIONS_DEFAULT_REGION=us-west1 设置区域信息

不然会报google.genai.errors.ClientError: 400 FAILED_PRECONDITION. {'error': {'code': 400, 'message': 'User location is not supported for the API use.', 'status': 'FAILED_PRECONDITION'}} 错误信息

3、通过"uv run ." 启动langgraph,如下图:

4、再通过"uv run hosts/cli"启动客户端,示例中的客户端会主动发现并识别通过A2A协议开发的Agent

5、回到langgraph的目录,会发现多了通过A2A协议开发的langgraph Agent下多了一行日志,表明当前Agent被客户端获取到了。

6、就可以在hosts/cli窗口进行汇率相关问题询问了。

附录

参考文档

欢迎关注公众号

一起交流前沿技术&解析前沿大模型论文

扫码_搜索联合传播样式-标准色版.png