揭秘Google A2A协议:原理、应用与未来 精华

发布于 2025-4-30 06:10
浏览
0收藏

一、A2A 协议的核心原理

A2A 协议的设计基于五个核心原则,这些原则确保了协议的灵活性、安全性和广泛适用性。以下是对这些原则的详细解析,并结合技术机制进行说明。

1. 拥抱智能体特性(Embrace Agentic Capabilities)

A2A 协议专为具有自主性和复杂推理能力的 AI 智能体设计。不同于传统的工具调用(如 API 或数据库查询),A2A 允许智能体以自然、结构化的方式进行协作,而无需共享内存、工具或上下文。这种设计支持智能体在分布式环境中独立运行,同时保持高效的协作能力。

技术实现:

• 智能体之间的通信通过任务(Task)作为核心工作单元。任务可以是短期的(如生成报告)或长期的(如供应链优化)。

• 智能体通过消息(Message)交换信息,消息支持多模态内容(如文本、图像、视频),适应复杂场景。 

• 智能体不需要了解彼此的内部实现,只需遵循 A2A 协议的接口规范即可。

2. 基于现有标准(Build on Existing Standards)

A2A 协议利用成熟的 Web 技术,确保与现有 IT 架构的兼容性和易用性。

核心技术包括:

• HTTP/HTTPS:作为主要传输协议,生产环境中必须使用 HTTPS 和现代 TLS 加密。

• JSON-RPC 2.0:用于结构化数据交换,确保请求和响应的标准化。 - 服务器发送事件(SSE):支持实时、单向的流式更新,适用于任务进度通知。

优势:

• 开发者无需学习新的协议栈,现有工具和库即可支持 A2A。 

• 企业可以轻松将 A2A 集成到现有的微服务架构中。

3. 默认安全(Secure by Default)

安全性是 A2A 协议的核心考量。协议内置了企业级认证和授权机制,包括: 

• OAuth 和 OpenAPI 认证:确保只有授权的智能体可以通信。

• 数字证书:A2A 服务器通过知名证书颁发机构签发的证书证明身份。

• 请求追踪:支持日志和事件队列,便于监控和审计。

技术实现:

• 智能体卡表(Agent Card)中包含认证要求,客户端智能体在发起任务前必须完成身份验证。

• 数据传输使用 HTTPS 加密,防止中间人攻击。

4. 支持长时间运行任务(Support for Long-Running Tasks)

A2A 协议不仅支持简单的请求-响应交互,还能处理需要数小时或数天的复杂任务。例如,供应链优化可能涉及多个智能体的协作,任务状态需要持续跟踪。

任务具有唯一 ID 和状态(如 submitted、working、completed、failed)。通过tasks/sendSubscribe 方法,客户端可以建立流式连接,接收任务的实时更新。任务状态通过 SSE 推送,确保客户端无需轮询。

5. 模态无关(Modality Agnostic)

A2A 支持多模态通信,智能体可以交换文本、图像、音频、视频或交互式内容(如 Web 表单)。这种设计适应了企业中多样化的数据需求。

消息中的“结构体(Part)”定义了内容类型,允许智能体协商适合的格式。例如,一个智能体可以返回图表数据(JSON)或渲染后的图像,具体取决于客户端的偏好。

二、A2A 协议的核心组件

A2A 协议的实现依赖于几个核心组件,这些组件共同构成了智能体间通信的框架。以下是对每个组件的详细说明。

1. 智能体卡表(Agent Card)

智能体卡表是 A2A 协议的入口点,用于描述智能体的身份和能力。它是一个 JSON 格式的元数据文件,通常托管在智能体的某个确定的路径下。

结构:

• 身份信息:包括智能体的名称、版本和托管地址(DNS 或 URL)。

• 能力描述:列出支持的功能(如流式传输、推送通知)和技能(Skills)。 

• 认证要求:指定 OAuth、API 密钥或 OIDC 等认证方式。 

• 端点:提供 API 端点的 URL(如 tasks/send)。

示例(简化版):

{
  "name": "XX云服务",
  "version": "1.0.0",
  "endpoint": "https://mycloud.com/a2a",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true
  },
  "skills": ["AI秘书", "订购助手"],
  "authentication": {
    "type": "OAuth",
    "url": "https://mycloud.com/"
  }
}

作用:

• 能力发现:客户端智能体通过读取智能体卡表了解远程智能体的功能,决定是否发起协作。

• 动态注册:对于服务端来说,智能体可以在运行时更新其能力,无需重启会话。

2. 任务(Task)

任务是 A2A 协议的核心工作单元,表示客户端智能体请求远程智能体执行的操作。任务具有明确的生命周期和状态管理。

生命周期:

• 提交(submitted):任务被客户端发送到远程智能体。 

• 工作中(working):远程智能体正在处理任务。 

• 需要输入(input-required):任务需要额外信息暂停。

• 完成(completed):任务成功结束,返回工件(Artifact)。

• 失败(failed):任务因错误终止。

• 取消(canceled):任务被客户端取消。

API 方法:

• tasks/send:同步请求,适合快速任务,客户端等待响应。

• tasks/sendSubscribe:建立流式连接,适合长时间任务,客户端接收 SSE 更新。

示例请求:

{
  "method": "tasks/send",
  "params": {
    "task": {
      "id": "task-123",
      "description": "请开通XX服务",
      "input": {
        "data": ["XX服务规格:..."]
      }
    }
  },
  "jsonrpc": "2.0",
  "id": 1
}

图示:

揭秘Google A2A协议:原理、应用与未来-AI.x社区

3. 消息(Message)

消息是智能体间通信的基本单位,表示一次交互的“回合”。消息支持多模态内容,并通过“Part”定义具体格式。

结构:

• 角色:user(客户端智能体)或 agent(远程智能体)。 

• 内容:包含多个部分(Part),每个部分指定内容类型(如 text/plain、image/png)。

• 元数据:包括消息 ID、时间戳等。

示例:

{
  "role": "agent",
  "parts": [
    {
      "contentType": "text/plain",
      "content": "Chart generated successfully"
    },
    {
      "contentType": "image/png",
      "content": "base64_encoded_image"
    }
  ],
  "id": "msg-456",
  "timestamp": "2025-04-24T22:00:00Z"
}

作用:

• 支持复杂的交互,如同时传输文本说明和可视化结果。

• 允许格式协商,例如客户端请求 JSON 数据而非图像。

4. 产出层:Artifact 管理

Artifact 是指任务的输出,通常是文件或结构化数据(如报告、图像)。工件与消息类似,但专注于任务的最终结果。

示例:

{
  "id": "artifact-789",
  "contentType": "application/pdf",
  "content": "XX服务已经订购成功",
  "taskId": "task-123"
}

作用:

• 提供标准化的输出格式,便于客户端处理。

• 支持大文件传输,通过分片或流式传输。

5. A2A 服务器与客户端

• A2A 服务器:实现 A2A 协议的 HTTP 端点,接收任务请求并执行操作。它托管智能体卡表并处理任务生命周期。

• A2A 客户端:发起任务的智能体或应用,通过 HTTP 请求与服务器交互。

交互流程:

  • 客户端通过智能体卡表发现服务器。
  • 客户端发送任务请求(tasks/send 或tasks/sendSubscribe)。
  • 服务器处理任务并返回消息或工件。

揭秘Google A2A协议:原理、应用与未来-AI.x社区

三、技术细节

1. JSON Schema

A2A 协议的核心规范通过 JSON Schema 定义(a2a.json),详细描述了智能体卡表、任务、消息等对象的字段、类型和约束。开发者可以通过 JSON Schema 工具验证实现是否符合标准。

关键字段:

• AgentCard.capabilities:支持的功能,如streaming、pushNotifications。 - Task.state:任务状态枚举(submitted、working 等)。

• Message.parts:支持的内容类型(如 text/plain、application/json)。

2. 通信模式

A2A 支持两种通信模式: 

• 同步模式:通过 tasks/send 实现,适合快速任务。 

• 异步模式:通过 tasks/sendSubscribe 和 SSE 实现,适合长时间任务。

SSE 示例:

GET /tasks/sendSubscribe?taskId=task-123 HTTP/1.1
Host: mycloud.com
Accept: text/event-stream

响应:

event: task-update
data: {"taskId": "task-123", "state": "working"}


event: task-update
data: {"taskId": "task-123", "state": "completed", "artifact": "artifact-789"}

3. 错误处理

A2A 定义了标准化的错误响应,基于 JSON-RPC 2.0。例如:

{
  "jsonrpc": "2.0",
  "error": {
    "code": 32600,
    "message": "认证失败"
  },
  "id": 1
}

四、行业案例

以运营商智能客服系统为例,演示 A2A 在通信行业的典型应用流程。

1. 背景

假设运营商在全国多个省部署了智能客服的智能体。用户在线咨询时,往往需要跨省调用多方能力,例如:

• 查询套餐余量(系统 A)

• 推荐个性化增值业务(系统 B)

• 处理投诉工单(系统 C)

2. A2A 集成流程

➢ 能力注册

各个省(比如安徽省)的智能客服系统分别发布自己的 Agent到中心节点:

anhui.xxx.com/.well-known/agent.json

jiangsu.xxx.com/.well-known/agent.json

center.xxx.com/.well-known/agent.json

➢ 发现与认证

主客服 Agent(客户当前所在地)在接到用户请求后,通过 HTTP GET 向中心节点拉取各 Agent Card,筛选出客户号码所在地的智能体地址。同时,使用 OAuth2 向目标 Agent 申请 Access Token。

➢ 任务分发

所在地的Agent 向目标 Agent 以 tasks/sendSubscribe 的方式发起 Task:

POST /tasks/sendSubscribe HTTP/1.1
Host: mycloud.com
Authorization: Bearer <token>
Content-Type: application/json


{
  "task": {
    "id": "task-123",
    "inputs": { "phoneNumber": "1234567890" },
    "metadata": { "operation": "推荐一个长期在外地(安徽)的流量套餐" }
  }
}

同时订阅 SSE,获取实时进度与结果。

➢ 结果聚合与回传

当 Agent 完成任务后,按照预定义的业务逻辑生成最终用户应答,并通过原始通道反馈给用户。

3. 应用效果

• 全程自主化:用户只需一个集成A2A的客户端比如手机,可以使用文字、语音等说出自己的需求,就能直接获取结果,无需考虑切换客服号码或者切换当地号码才能获取答案。

• 开发成本降低:无需为每对系统单独编写对接代码,只需遵循 A2A 规范。

• 可维护性增强:新增或替换智能体只需更新 Agent Card 与认证配置,无需改动主业务逻辑。

五、现有智能体如何集成A2A

当前A2A支持CrewAI、LangChain、Genkit、Google Agent Development Kit等创建的智能体,下面以LangChain为例,说明如何集成A2A。

1. 定义LangChain实现的智能体

class LangChainAgent:
  # ...

2. 定义智能体技能

skill = AgentSkill(
            id="mycloud",
            name="XX云",
            descriptinotallow="能够协助处理云服务相关问题",
            tags=["AI秘书", "订购助手"],
            examples=["请问XX服务有哪些规格"],
        )

3. 定义智能体卡表

agent_card = AgentCard(
            name="XX云智能体",
            descriptinotallow="XX云智能体",
            url=f"http://agentcard.mycloud.com/",
            versinotallow="1.0.0",
            skills=[skill],
        )

4. 启动A2A服务

server = A2AServer(
            agent_card=agent_card,
            task_manager=AgentTaskManager(agent=LangChainAgent(), notification_sender_auth=notification_sender_auth),
            host="mycloud.com"
        )
server.app.add_route(
            "/.well-known/jwks.json", notification_sender_auth.handle_jwks_endpoint, methods=["GET"]
        )

六、A2A 的优势与局限性

优势

1.互操作性:打破不同框架的孤岛,降低集成成本。

2.企业级特性:内置安全性和长时间任务支持,适合复杂场景。

3.社区驱动:开源协议,得到广泛支持,生态持续扩展。

局限性

1.文档等完善度:当前文档缺乏详细的跨供应商示例和多模态处理指南。

2.智能体发现:尽管目前的智能体通过卡表发现,但是卡表如何部署、如何确保安全和公信力成为一个亟待解决的问题,Google官方也说明这是一个开放性的问题,可以在社区讨论:如果是中心化部署要考虑大流量和高延时的问题,如果是类似DNS这种分层次的部署,那是否要定义一种新的大家都遵守的卡表发现协议?

3.sdk支持较少: 目前仅仅支持python 、js开发的智能体,并且支持的开源智能体框架也比较少。

七、MCP、Manus 和 A2A 的关系与互补性

MCP、Manus 和 A2A 代表了 AI 生态系统中不同层面的创新,都在发布时就爆火,它们在功能和定位上互补但各有侧重: 

MCP(数据平面):专注于模型与工具/数据的交互,提供标准化的上下文输入和输出接口。

Manus(框架层):提供多智能体协作的框架,强调自主性和任务编排,但缺乏标准化通信协议。

A2A(控制平面):专注于智能体间的通信与协作,定义了智能体如何发现、协商和协调任务。

互补性:

• MCP 为智能体提供访问外部资源的能力,A2A 则让智能体能够相互通信。例如,在一个汽车维修场景中,MCP 允许智能体调用工具(如“将平台提升 2 米”),而 A2A 协调智能体与客户的交互(如“发送左轮照片”)。

• Manus 可以在 MCP 和 A2A 的基础上运行,利用 MCP 访问工具,借助 A2A 与其他智能体协作。

未来一种可能的协作如图所示:

揭秘Google A2A协议:原理、应用与未来-AI.x社区

总结

A2A 协议通过智能体卡表、任务、消息等核心组件,为 AI 智能体间的通信提供了标准化框架。其基于 HTTP、JSON-RPC 和 SSE 的设计确保了易用性和兼容性,而企业级安全性和多模态支持使其适用于复杂场景。通过以上详细的原理分析和图示,我们可以看到A2A如何通过能力发现、任务管理和实时更新实现高效协作。尽管仍有一些改进空间,A2A 的开源性质和广泛支持为其成为 AI智能体通信的“HTTP”奠定了基础。

参考文献

Manus, 2025-03-25

​https://manus.monica.cn/​

Google A2A, 2025-04-19

​https://google.github.io/A2A/#/​

Teneo.ai, MCP and A2A Protocols Explained, 2025-04-10

​https://www.teneo.ai/blog/mcp-and-a2a-protocols-explained-the-future-of-agentic-ai-is-here​

Koyeb, A2A and MCP: Start of the AI Agent Protocol Wars, 2025-04-11

​https://www.koyeb.com/blog/a2a-and-mcp-start-of-the-ai-agent-protocol-wars​

Blott Studio, MCP vs A2A: Which Protocol Is Better For AI Agents, 2025-04-09

​https://www.blott.studio/blog/post/mcp-vs-a2a-which-protocol-is-better-for-ai-agents​

Saptak Sen, Agent2Agent vs MCP, 2025

​https://saptak.in/writing/2025/04/10/agent2agent-vs-mcp​

Anthropic, Introducing the Model Context Protocol, 2024-11-25

​https://www.anthropic.com/news/model-context-protocol​

Hugging Face, MCP is All You Need, 2025-03-18

​https://huggingface.co/blog/LLMhacker/mcp-is-all-you-need​

VC Cafe, The future of AI tooling is Interoperable, 2025-04-10

​https://www.vccafe.com/2025/04/10/the-future-of-ai-tooling-is-interoperable-mcp-and-agent2agent/​

本文转载自​AI遇见云​,作者:王亚平

已于2025-4-30 10:26:28修改
收藏
回复
举报
回复
相关推荐