Open Protocol by Google & Linux Foundation

Agent-to-Agent Protocol

让不同框架、不同厂商的 AI Agent 发现彼此、安全协作的开放标准

Start Reading ↓
Scroll

什么是 A2A

A2A (Agent-to-Agent) 是由 Google 主导、Linux 基金会托管的开放协议,旨在实现不同 AI Agent 之间的通信与协作。

A2A 是一个让不同框架、不同厂商构建的 AI Agent 能够发现彼此、协商交互方式、安全地协作完成任务的标准化协议。

核心设计理念

🔒

Opaque

Agent 不需要暴露内部状态、记忆或工具实现

🤝

Peer-to-Peer

Agent 之间是平等的合作者,而非工具调用关系

🖼

多模态

支持文本、文件、结构化数据、表单等多种交互

🏡

企业就绪

内建认证、授权、多租户、可观测性支持

技术基础

传输协议

JSON-RPC 2.0 / gRPC / REST over HTTP(S)

发现机制

/.well-known/agent.json (Agent Card)

交互模式

同步 / SSE 流式 / 异步推送通知

为什么需要 A2A

当前 Agent 生态的痛点:每个框架都有自己的 Agent 实现,彼此之间无法直接通信。

Before: 各自为战

LangChain
CrewAI
AutoGen
Google ADK

After: 统一协作

LangChain
CrewAI
AutoGen
Google ADK
有了 A2A:统一协议,任意框架的 Agent 都能互相发现、交流和协作。

A2A vs MCP:区别与互补

这是大家最常问的问题 — A2A 和 MCP (Model Context Protocol) 有什么区别?

维度MCPA2A
定位Agent ↔ 工具/资源Agent ↔ Agent
关系主从关系(调用工具)对等关系(协作)
交互模型无状态、确定性 I/O有状态、自主推理、多轮对话
类比程序员使用 IDE 插件两个程序员结对编程
协议JSON-RPCJSON-RPC / gRPC / REST

形象比喻:汽车修理店

A2A

Agent 之间的协作

店长 Agent 和机械师 Agent 之间的沟通 — 协商、协调、多轮对话

MCP

Agent 调用工具

机械师 Agent 使用诊断仪器、查维修手册 — 确定性的工具调用

MCP 管的是 Agent "用什么",A2A 管的是 Agent "跟谁合作"。
两者互补,不是竞争。一个完整的多 Agent 系统通常会同时使用 A2A 和 MCP。

核心概念与架构

Agent Card - Agent 名片

每个 Agent 通过发布一个 JSON 文件告诉世界 "我是谁、我能做什么、怎么联系我"。

默认位置:https://<host>/.well-known/agent.json

T

旅行规划助手

travel-planner v1.0.0
Skills
✈ 旅行规划 🏨 酒店推荐 📍 景点推荐
Streaming
Multi-Turn
Push Notification

Task - 任务生命周期

Task 是 A2A 的核心工作单元,有完整的状态机管理。

submitted
working
input-required
auth-required
completed
failed
canceled
rejected
状态含义终态?
submitted已提交,未开始处理
working正在处理中
input-required需要客户端提供更多输入
auth-required需要客户端提供认证
completed成功完成
failed处理失败
canceled客户端取消
rejected服务端拒绝

Message / Part / Artifact

Message

客户端和 Agent 之间的一次通信轮次,包含 role (user/agent) 和 parts 数组

Part

消息内容载体:TextPart (文本) / FilePart (文件引用) / DataPart (结构化数据)

Artifact

Agent 处理 Task 后的输出结果。一个 Task 可以产生多个 Artifact

整体交互流程

Sequence
Client Agent                              Server Agent
     |                                         |
     |  1. GET /.well-known/agent.json         |
     |---------------------------------------->|
     |         <-- Agent Card                  |
     |<----------------------------------------|
     |                                         |
     |  2. tasks/send (Message)                |
     |---------------------------------------->|
     |         <-- Task (status: working)      |
     |<----------------------------------------|
     |                                         |
     |  3. (Agent processing...)               |
     |                                         |
     |  4. tasks/get                           |
     |---------------------------------------->|
     |         <-- Task (status: completed)    |
     |         <-- Artifacts                   |
     |<----------------------------------------|

协议规范详解

传输绑定

操作JSON-RPC 方法
发送消息tasks/send
流式发送tasks/sendSubscribe
获取任务tasks/get
列出任务tasks/list
取消任务tasks/cancel
订阅任务tasks/subscribe
获取扩展名片agents/getCard
操作MethodPath
发送消息POST/v1/tasks
流式发送POST/v1/tasks?stream=true
获取任务GET/v1/tasks/{id}
列出任务GET/v1/tasks
取消任务POST/v1/tasks/{id}:cancel
订阅任务GET/v1/tasks/{id}:subscribe

基于 Protocol Buffers 定义,支持全双工流式通信。规范文件:a2a.proto

JSON-RPC 请求示例

JSON
{
  "jsonrpc": "2.0",
  "id": "req-001",
  "method": "tasks/send",
  "params": {
    "message": {
      "role": "user",
      "parts": [
        { "text": "将这段代码从 Python 转换为 Go" }
      ]
    },
    "configuration": {
      "acceptedOutputModes": ["text/plain", "text/markdown"],
      "historyLength": 10
    }
  }
}

流式传输 (SSE)

Client
sendSubscribe
Server
Server
SSE: Task
SSE: StatusUpdate
SSE: ArtifactUpdate
Completed

认证与安全

认证方式说明
API KeyHeader 或 Query 参数
HTTP Bearer标准 HTTP Bearer Token
OAuth 2.0授权码、客户端凭证、设备码流程
OpenID Connect基于 OIDC 发现
Mutual TLS双向 TLS 证书认证

错误处理

错误码含义
TaskNotFoundError任务不存在
TaskNotCancelableError终态任务不可取消
UnsupportedOperationError不支持的操作
ContentTypeNotSupportedError不支持的内容类型
VersionNotSupportedError协议版本不兼容

适用场景

A2A 适用于需要多个自治 Agent 协作的场景。以下从通用模式和行业垂直两个维度展开。

通用协作模式

01

多 Agent 流水线编排

将复杂任务拆解给专业 Agent 串行/并行处理。例如内容创作:规划 Agent 拆解大纲 → 研究 Agent 搜集资料 → 写作 Agent 生成文章 → 审核 Agent 校对修改。

02

Hub-and-Spoke 中心编排

一个 Orchestrator Agent 作为中心路由器,根据任务类型将请求路由给不同的专业 Agent,无需 Agent 之间直接耦合。适合企业统一入口场景。

03

联邦式跨组织协作

不同组织的 Agent 各自独立运行,通过公开 Agent Card 互相发现,实现跨公司边界的协作(如旅行平台 + 航空公司 + 酒店)。

04

动态技能委托

通用 Agent 在运行时通过 Agent Card 发现专业 Agent 的能力,无需硬编码即可动态委托任务(代码审查、翻译、数据分析等)。

05

Human-in-the-Loop 审批

利用 input-required 状态在关键决策点暂停,等待人工审批后继续。适合金融审批、医疗诊断、合规审查等高风险场景。

06

A2A + MCP 混合架构

Agent 之间通过 A2A 对等协作,每个 Agent 内部通过 MCP 调用自己的工具和数据源。这是 Google 推荐的生产级参考架构。

Human-in-the-Loop 交互演示

A2A Multi-Turn Demo

行业场景深入拆解

A2A 在各行业的真实落地场景 — 每个案例都包含具体的 Agent 角色和协作方式。

🏦

金融服务

场景:智能信贷审批

客户提交贷款申请后,征信 Agent 拉取信用报告,风控 Agent 进行风险评估,定价 Agent 计算利率,合规 Agent 检查监管要求,最终审批 Agent 做出放款决策。全流程通过 A2A 异步协调,支持 Human-in-the-Loop 人工复核。

征信 Agent 风控 Agent 定价 Agent 合规 Agent 审批 Agent
🏥

医疗健康

场景:辅助诊断协作

患者描述症状后,问诊 Agent 采集病史,影像 Agent 分析 CT/MRI,化验 Agent 解读检验报告,药物 Agent 检查用药禁忌。各 Agent 在隐私合规前提下通过 A2A 共享分析结果,不暴露内部模型和数据。

问诊 Agent 影像 Agent 化验 Agent 药物 Agent
🚚

供应链与制造

场景:智能补货与物流

库存 Agent 检测到商品即将缺货,通知采购 Agent 生成订单,采购 Agent 通过 A2A 联系外部供应商 Agent 询价下单,物流 Agent 协调运输和入库。跨越企业边界的协作正是 A2A 的核心优势。

库存 Agent 采购 Agent 供应商 Agent 物流 Agent 预测 Agent
💼

企业 HR

场景:端到端招聘流程

招聘 Agent 解析 JD 需求,人才搜索 Agent 从多个渠道匹配候选人(这是 Google 官方博客的经典示例),面试 Agent 协调时间安排,背调 Agent 执行背景调查,Offer Agent 生成 offer 并跟踪接受状态。

招聘 Agent 人才搜索 Agent 面试 Agent 背调 Agent Offer Agent
🛒

电商零售

场景:个性化购物助手

用户对话 Agent 理解购物意图,推荐 Agent 结合行为数据推荐商品,库存 Agent 确认可用性,促销 Agent 匹配优惠券,支付 Agent 处理交易,物流 Agent 安排配送。多个 Agent 实时协作提供流畅购物体验。

对话 Agent 推荐 Agent 库存 Agent 促销 Agent 支付 Agent
💻

软件工程

场景:AI DevOps 流水线

开发者提交需求后,编码 Agent 生成代码,Review Agent 审查质量,测试 Agent 运行测试,安全 Agent 扫描漏洞,部署 Agent 执行发布。参考 InfoQ 的 MLOps 多 Agent 架构实践。

编码 Agent Review Agent 测试 Agent 安全 Agent 部署 Agent

推荐架构:A2A + MCP 分层协作

Google 推荐的生产级参考架构 — Orchestrator 通过 A2A 编排专业 Agent,每个 Agent 内部通过 MCP 调用工具。

User Layer
👤 User / Client Application
↓ Request     ↑ Response
A2A Layer
🎓 Orchestrator Agent
Task decomposition & routing via A2A
↓ A2A   tasks/send   ↑ A2A   Artifacts
Agent Layer
Agent A
Specialist
Agent B
Specialist
Agent C
Specialist
↓ MCP   tool calls   ↑ MCP   Results
MCP Layer
🗃 Database
🌐 API
📄 Files
🔧 Tools
清晰的协议边界:Agent 间通信走 A2A,工具调用走 MCP。Orchestrator 负责编排分发,Specialist Agent 负责执行。新增能力只需注册 MCP Tool 或发布 Agent Card,无需修改核心逻辑。

企业级落地案例

50+ 家科技公司和咨询公司已加入 A2A 生态。以下是部分典型实践:

Adobe

创意工作流编排

Adobe 使用 A2A 让旗下 Agent 协作创建数字体验 — 内容生成 Agent、设计 Agent、数据分析 Agent 协同优化内容创作流程,自动化多系统数据集成。

SNOW

ServiceNow AI Agent Fabric

作为 A2A 创始合作伙伴,ServiceNow 推出 AI Agent Fabric — 连接 ServiceNow、客户和合作伙伴构建的 Agent 的多 Agent 通信层,提供企业级灵活性。

SFDC

Salesforce Agentforce

Salesforce 通过 A2A 扩展 Agentforce 平台,使 AI Agent 跨 Salesforce 和其他生态系统无缝协作,将分散的能力编排为统一解决方案。

Twilio

延迟感知的 Agent 路由

Twilio 利用 A2A 实现 Latency Aware Agent Selection — 各 Agent 广播自身延迟指标,系统智能路由任务到响应最快的 Agent,优化实时通信体验。

生态合作伙伴

Google Salesforce SAP ServiceNow Adobe Atlassian PayPal Intuit MongoDB Box Workday Twilio UKG Cohere LangChain
Accenture Deloitte McKinsey BCG PwC KPMG Capgemini Cognizant Infosys TCS HCLTech Wipro

Gartner 预测:到 2026 年,40% 的企业应用将集成任务专用 AI Agent(2025 年仅 5%)。

最佳实践与避坑指南

✅ 生产级最佳实践

🎯

用 Agent Card 做能力声明,而非硬编码端点

通过 .well-known/agent.json 发布 Agent 能力,让 Orchestrator 在运行时动态发现和选择 Agent。新增 Agent 只需发布 Agent Card,无需修改 Orchestrator 代码。

🛠

编排-执行分离

Orchestrator 只负责任务拆解和路由,Specialist Agent 负责具体执行。两层规划:Orchestrator 做任务级规划(委托哪个 Agent),Specialist 做工具级规划(调用哪个 MCP Tool)。防止单点瓶颈。

优先使用异步 + 流式,而非同步阻塞

对长时间运行的任务使用 tasks/sendSubscribe (SSE) 或 Push Notification,而非同步等待。避免级联阻塞导致整个 Agent 链超时。用 returnImmediately: true 立即获取 Task ID 后轮询。

🔒

分层安全策略

传输层用 HTTPS/mTLS,认证层用 OAuth 2.0 或 Bearer Token,授权层基于 Agent Card 的 securitySchemes 声明。对敏感操作使用 auth-required 状态请求额外授权。审计日志记录所有跨 Agent 调用。

📈

全链路可观测

使用 Task ID 和 Context ID 实现分布式追踪。监控 Agent 健康度(通过 Agent Card 端点)、任务成功率、延迟和错误分布。使用 OpenTelemetry (a2a-sdk[telemetry]) 集成企业监控平台。

🚀

无状态 Agent + 外部持久化

Agent 本身设计为无状态,支持水平扩展。任务状态持久化到外部存储 (a2a-sdk[sql])。通过 Artifact 传递结果,而非共享可变状态。缓存热门 Agent 的 Agent Card 以减少发现开销。

🔁

容错与重试设计

对失败的任务实现指数退避重试。当远端 Agent 不可用时优雅降级。设置合理的超时时间,避免无限等待。用 contextId 关联重试请求,让 Agent 能恢复上下文。

❌ 常见反模式

⚠ 硬编码 Agent 端点

在代码中写死 Agent 的 URL 会导致脆弱系统。应该通过 Agent Card 发现机制动态路由,这样新增或替换 Agent 无需改动调用方。

⚠ 同步阻塞调用链

把 A2A 当作普通 RPC 同步调用会导致级联故障 — 一个 Agent 慢了整条链路都卡住。应该使用异步模式 + 流式更新。

⚠ Agent 之间共享可变状态

Agent 直接读写共享数据库破坏了 Opaque 原则。应该通过 Artifact 和 Message 传递数据,保持 Agent 之间的隔离。

⚠ 过度拆分 Agent

为每个微小操作创建独立 Agent 会增加通信开销和复杂度。一个 Agent 应该封装一组相关的能力(多个 Skills),而非单一操作。

⚠ 忽略网络分区

假设 Agent 永远在线不会宕机。必须实现超时、降级和回退机制,特别是跨组织调用外部 Agent 时。

⚠ 跳过 Agent Card 验证

不验证 Agent Card 签名就信任对方声明的能力。在生产环境中应验证 AgentCardSignature 并校验 TLS 证书。

判断是否该用 A2A

不是所有多 Agent 场景都需要 A2A。以下帮你快速判断:

场景特征推荐方案原因
Agent 调用确定性工具/APIMCP无状态、确定性 I/O,MCP 更轻量
Agent 之间需要多轮对话协商A2A有状态交互,需要 Task 生命周期管理
单一框架内的 Agent 通信框架原生LangGraph/CrewAI 内置的通信机制更简单
跨框架/跨组织的 Agent 协作A2A这是 A2A 的核心价值 — 互操作性
需要隐藏 Agent 内部实现A2AOpaque 原则保护知识产权和隐私
简单的函数调用 / 数据查询MCPA2A 过重,直接用 MCP Tool 调用
长时间异步任务 + 推送通知A2A内置 Task 状态机和 Push Notification

部署复杂度参考

Low

单 Agent 对外提供 A2A 服务,内部通信,简单任务路由。1-2 周即可上线。

Medium

3-5 个 Agent 协作,集成外部服务,需要认证和监控。1-2 个月。

High

10+ Agent 跨组织协作,实时 SLA 要求,合规行业(金融/医疗)。3+ 个月。

如何开发一个 A2A 服务

环境准备

bash
# 安装 Python SDK(推荐 Python 3.10+)
pip install "a2a-sdk[http-server]"

# 或使用 uv
uv add "a2a-sdk[http-server]"
Extra用途
http-serverFastAPI / Starlette HTTP 服务
grpcgRPC 传输支持
telemetryOpenTelemetry 可观测性
sql数据库持久化 (PG/MySQL/SQLite)
all全部安装

开发步骤

定义 Agent Card

agent_card.py
from a2a.types import (
    AgentCard, AgentSkill, AgentCapabilities, AgentInterface,
)

AGENT_CARD = AgentCard(
    name="translator-agent",
    displayName="翻译助手",
    description="支持中英文互译的翻译 Agent",
    version="1.0.0",
    endpoints=[
        AgentInterface(
            url="http://localhost:9000/a2a",
            protocol="jsonrpc",
        )
    ],
    skills=[
        AgentSkill(
            id="translate",
            name="文本翻译",
            description="将中文翻译为英文,或将英文翻译为中文",
        )
    ],
    capabilities=AgentCapabilities(
        streaming=True,
        pushNotifications=False,
        multiTurn=False,
    ),
)

实现 Agent 逻辑

agent_executor.py
from a2a.server.agent_execution import AgentExecutor
from a2a.server.events import EventQueue
from a2a.types import TaskState, TaskStatus, Artifact, TextPart
import uuid

class TranslatorAgentExecutor(AgentExecutor):

    async def execute(self, context, event_queue: EventQueue):
        # 1. 提取用户消息
        user_message = context.get_user_message()
        input_text = user_message.parts[0].text

        # 2. 更新状态 → working
        await event_queue.enqueue_event(
            TaskStatusUpdateEvent(
                taskId=context.task_id,
                status=TaskStatus(state=TaskState.working),
            )
        )

        # 3. 执行翻译(实际中调用 LLM / API)
        translated = await self._translate(input_text)

        # 4. 生成 Artifact
        await event_queue.enqueue_event(
            TaskArtifactUpdateEvent(
                taskId=context.task_id,
                artifact=Artifact(
                    id=str(uuid.uuid4()),
                    parts=[TextPart(text=translated)],
                ),
            )
        )

        # 5. 完成
        await event_queue.enqueue_event(
            TaskStatusUpdateEvent(
                taskId=context.task_id,
                status=TaskStatus(state=TaskState.completed),
            )
        )

启动 A2A Server

server.py
from a2a.server.apps import A2AStarletteApplication
from a2a.server.request_handlers import DefaultRequestHandler
from agent_card import AGENT_CARD
from agent_executor import TranslatorAgentExecutor
import uvicorn

def main():
    agent_executor = TranslatorAgentExecutor()
    request_handler = DefaultRequestHandler(
        agent_executor=agent_executor,
        agent_card=AGENT_CARD,
    )
    app = A2AStarletteApplication(
        agent_card=AGENT_CARD,
        http_handler=request_handler,
    )
    uvicorn.run(app.build(), host="0.0.0.0", port=9000)

if __name__ == "__main__":
    main()

开发 Client 测试

client.py
from a2a.client import A2AClient

async def main():
    # 自动获取 Agent Card
    client = await A2AClient.create(
        base_url="http://localhost:9000"
    )

    # 发送消息
    response = await client.send_message(
        message={
            "role": "user",
            "parts": [{"text": "Hello, how are you?"}]
        }
    )
    print(response)

项目结构

structure
my-a2a-agent/
├── pyproject.toml          # 项目配置 & 依赖
├── agent_card.py           # Agent Card 定义
├── agent_executor.py       # Agent 核心逻辑
├── server.py               # A2A Server 启动入口
├── client.py               # 测试用 Client
└── tests/
    └── test_agent.py       # 单元测试

开发清单

生态与资源

官方 SDK

Python

pip install a2a-sdk

最成熟的 SDK,支持 HTTP / gRPC / REST 三种传输

Python 3.10+

Go

go get github.com/a2aproject/a2a-go

高性能 Go 实现

Go

JavaScript

npm install @a2a-js/sdk

Node.js & 浏览器支持

JavaScript

Java

Maven 依赖集成

Java

.NET / C#

dotnet add package A2A

.NET

支持的 Agent 框架

Google ADK
LangGraph
CrewAI
AutoGen
LlamaIndex
Semantic Kernel
BeeAI
Pure SDK

官方示例仓库提供 30+ 个 Agent 示例,覆盖所有主流框架。

官方资源

资源链接
协议官网a2a-protocol.org
完整规范a2a-protocol.org/latest/specification/
GitHubgithub.com/google/A2A
Python SDKgithub.com/a2aproject/a2a-python
示例代码github.com/a2aproject/a2a-samples

总结

要点说明
A2A 是什么Agent 之间通信与协作的开放标准协议
解决什么问题打破不同框架 Agent 之间的互操作壁垒
与 MCP 的关系互补 — MCP 连接工具,A2A 连接 Agent
核心机制Agent Card → Message → Task → Artifact
开发方式AgentCard → AgentExecutor → A2A Server
生态多语言 SDK、30+ 示例、主流框架全覆盖
A2A 让 AI Agent 的世界从 "各自为战" 走向 "协同作战"。