a2aproject/A2A · 上手攻略

  • 仓库:a2aproject/A2A
  • 链接:https://github.com/a2aproject/A2A
  • 分类:ai
  • 作者:Jay
  • 更新:2026-07-11

这是什么

A2A(Agent2Agent)是一个开放协议,由 Google 贡献给 Linux Foundation,旨在让不同厂商、不同框架构建的 AI Agent 能够相互通信、协作和互操作。协议核心基于 JSON-RPC 2.0 over HTTP(S),采用 Agent Card(类似黄页)做服务发现,支持同步请求/响应、流式推送(SSE)和异步长任务通知。

A2A 处于一个更大的 Agent 互操作生态的核心位置——它的直接对标是 MCP(Model Context Protocol,MCP 解决的是 Agent 与工具/数据源之间的通信),A2A 解决的是 Agent 与 Agent 之间的通信

简单说:MCP 是 Agent 调用工具的协议,A2A 是 Agent 调用 Agent(或者让 Agent 协作)的协议。

解决什么问题

在 A2A 出现之前,每个厂商的 Agent 都是"不透明的孤岛"——LangGraph Agent 无法直接调用 Google ADK Agent,BeeAI Agent 无法与第三方商业 Agent 协作。A2A 让这一切成为可能:

  • 打破孤岛:不同框架的 Agent 可以互相发现、协商交互方式、共同完成任务
  • 保留 Opacity(不透明性):Agent 之间只交换能力和结果,不需要暴露内部状态、记忆或工具实现
  • 支持企业级场景:内置认证、鉴权、可观测性设计
  • 异步优先:原生支持需要人类介入的长任务

快速安装

安装 SDK(以 Python 为例)

pip install a2a-sdk

其他语言 SDK:

# Go
go get github.com/a2aproject/a2a-go

# JavaScript/TypeScript
npm install @a2a-js/sdk

# Rust
cargo add a2a-lf

⚠️ 版本信息:当前协议规范为 v1.0.0(稳定版)。Python SDK 版本请以 PyPI 实际发布为准,建议用 pip show a2a-sdk 确认。

获取协议规范

  • 完整规范:https://a2a-protocol.org/latest/specification/
  • GitHub 主页:https://github.com/a2aproject/A2A
  • 示例代码:https://github.com/a2aproject/a2a-samples

核心用法

1. Agent Card(Agent 发现)

每个 A2A Agent 必须暴露一个 AgentCard,声明自己的能力、端点和认证要求。Agent 通过查询对方的 AgentCard 来决定如何交互。

AgentCard 包含的关键字段: - nameversion:Agent 身份 - capabilities:支持哪些交互模式(同步、流式、推送通知等) - skills:Agent 能完成的具体技能列表 - authentication:认证方案 - url:Agent 的 A2A 端点地址

{
  "name": "my-agent",
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": true
  },
  "skills": [
    { "id": "web-search", "name": "Web Search" },
    { "id": "code-gen", "name": "Code Generation" }
  ],
  "url": "https://my-agent.example.com/a2a"
}

2. 发送任务(Send Message)

A2A 的核心操作是创建任务(Task)并通过 Message 驱动:

from a2a import A2AClient

client = A2AClient("https://target-agent.example.com/a2a")

# 发送任务
task = client.send_message(
    role="user",
    content={
        "type": "text",
        "text": "帮我查询今天北京的天气,并给出一个穿衣建议"
    }
)
print(task.result)

3. 流式响应(Send Streaming Message)

from a2a import A2AClient

client = A2AClient("https://target-agent.example.com/a2a")

# 流式接收响应(Server-Sent Events)
for chunk in client.send_message_streaming(
    content={"type": "text", "text": "写一个 FastAPI hello world"}
):
    print(chunk, end="", flush=True)

4. 任务生命周期管理

A2A 原生支持任务状态追踪:

# 查询任务状态
task = client.get_task(task_id="task-12345")
print(task.status)  # submitted / working / completed / failed / canceled

# 取消任务
client.cancel_task(task_id="task-12345")

# 列举任务
tasks = client.list_tasks()

5. 用已有框架快速暴露 A2A Agent

Google ADK、LangGraph、BeeAI 等主流框架已集成 A2A 支持:

# 以 Google ADK 为例,将 Agent 暴露为 A2A Server
from google.adk import Agent
from a2a.server import A2AServer

agent = Agent(model="gemini-2.0-flash", instruction="你是助手")

# 用 A2AServer 包装
server = A2AServer(agent=agent, port=8080)
server.start()

⚠️ 框架集成细节请查阅对应框架的 A2A 集成文档,API 可能随版本变化。

典型适用场景

场景 说明
多 Agent 编排 多个专业化 Agent(搜索、代码生成、数据分析)协作完成复杂任务
跨平台 Agent 互操作 企业内部多个 Agent 系统需要统一对外暴露能力
Agent Marketplace 基于 Agent Card 发现和组合使用第三方 Agent
人类介入式长任务 Agent 执行复杂任务时需要人类审批某个步骤(A2A 原生支持)
企业级 Agent 协作 内置安全、认证和可观测性,适合企业环境

坑与注意

  1. 协议尚在活跃演进:虽然已发布 v1.0.0,但生态仍在早期,不同 SDK 版本之间可能存在细微差异。使用前请核对 SDK 版本与协议版本的对应关系。

  2. Agent Card 认证配置复杂:企业场景下正确配置认证方案(OAuth2、API Key 等)需要参考规范的 Authentication 部分,文档相对技术化。

  3. 不是工具调用协议:A2A 不适合用来让 Agent 调用单个函数/工具——那是 MCP 的职责。混用两者是常见误区。

  4. 流式和推送通知的边界情况:SSE 在某些网络环境下可能被阻断,生产环境需要考虑重连机制。

  5. SDK 成熟度不一:Python SDK 相对最成熟;Go、JS、Java、.NET、Rust 等语言的 SDK 可能在功能完整度上有差异。

与同类对比

协议 定位 通信对象 复杂度
A2A Agent ↔ Agent 协作协议 Agent ↔ Agent 中等
MCP Agent ↔ 工具/数据源协议 Agent ↔ 工具 较低
OpenAI Agent SDK 单一厂商 Agent 编排 内部框架 较低
LangGraph 多 Agent 协作框架 内存中 Agent 中等

A2A vs MCP:MCP 和 A2A 是互补关系,不是竞争关系。打个比方——MCP 像是 USB协议(让电脑连接各种设备),A2A 像是网络协议(让不同电脑之间通信)。一个 Agent 内部用 MCP 调用工具,对外用 A2A 与其他 Agent 协作。

一句话推荐结论

A2A 是 Google 主导的 Agent 互操作开放标准,适合在多 Agent 系统、企业级 Agent 编排、或需要跨框架 Agent 协作的场景中使用——如果你在构建复杂 Agent 系统且需要 Agent 之间的互联互通能力,A2A 是目前最正式、厂商中立的选择,建议从 Python SDK 入手,结合官方 samples 快速验证。