【A2A Protocol】AI Agent 互联互通协议深度解析:架构、设计与 MCP 的分工

一句话核心结论:A2A(Agent2Agent)协议是 AI Agent 世界的”HTTP”——它让不同框架、不同公司构建的 Agent 能够互相通信,而 MCP 负责的是 Agent 内部的工具调用。A2A 解决的是 Agent 协作的”最后一公里”问题。

前言

想象一个场景:你在公司用 Salesforce 管理客户,用 Slack 沟通协作,用 GitHub 管理代码——它们之间通过 API 和 Webhook 互联互通。但如果你有三个 AI Agent,分别由 LangChain、AutoGen 和自制框架构建,它们之间能直接对话吗?

答案是:以前不能,现在可以了。

Google 主导的 A2A(Agent2Agent)协议正在为 AI Agent 世界建立一套标准的”普通话”。截至 2026 年 5 月,该项目已获得 23,527 颗 GitHub Stars,被 8 家顶级科技公司的技术委员会共同指导,并已进入 1.0 生产稳定版阶段。

本文将深入解析 A2A 协议的核心设计理念、协议架构、关键数据模型,以及它与 MCP 的分工边界。


一、为什么需要 A2A?

当前 AI Agent 领域面临一个根本性问题:框架割裂

企业级 AI 系统通常由多个专业化 Agent 组成——有的负责研究,有的负责执行,有的负责审核。这些 Agent 可能由不同团队、使用不同框架、在不同服务器上运行。当一个 Agent 需要调用另一个 Agent 时,开发者只能针对每个组合单独编写适配代码,这导致了:

  • 厂商锁定:深度绑定某一框架的 Agent 生态
  • 重复造轮子:每对 Agent 协作都需要定制开发
  • 无法跨组织协作:组织 A 的 Agent 无法安全地调用组织 B 的 Agent
  • 黑盒协作:Agent 之间无法发现彼此能力,只能硬编码调用

A2A 的核心目标是打破这些孤岛,让 Agent 可以像 Web 服务一样,通过标准协议互相发现、协商和协作。


二、A2A 协议核心概念

2.1 协议定位:A2A 是”Agent 间的 HTTP”

在深入技术细节之前,先理解 A2A 在整个 AI Agent 技术栈中的位置至关重要:

graph TB
    subgraph "Agent 内部 (MCP 的作用域)"
        LLM["🤖 LLM"]
        TOOL["🔧 工具调用\n文件读写/搜索/代码执行"]
        CTX["📚 Context / Memory\nRAG / 知识库检索"]
        LLM --> TOOL
        LLM --> CTX
    end

    subgraph "Agent 之间 (A2A 的作用域)"
        AGENT_A["📦 Agent A\n(LangChain / AutoGen / 自研)"]
        AGENT_B["📦 Agent B\n(不同框架)"]
        AGENT_C["📦 Agent C\n(不同组织)"]
    end

    AGENT_A <-->|"A2A 协议"| AGENT_B
    AGENT_A <-->|"A2A 协议"| AGENT_C
    AGENT_B <-->|"A2A 协议"| AGENT_C

    style LLM fill:#E8D5F5,stroke:#CE93D8,stroke-width:2px,color:#333
    style TOOL fill:#FFDAB9,stroke:#FFAB76,stroke-width:2px,color:#333
    style CTX fill:#FFDAB9,stroke:#FFAB76,stroke-width:2px,color:#333
    style AGENT_A fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
    style AGENT_B fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
    style AGENT_C fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333

MCP(Model Context Protocol)定义的是”Agent 如何调用工具和获取上下文”,解决的是单个 Agent 内部的问题。
A2A 定义的是”Agent 如何与其他 Agent 通信协作”,解决的是多个 Agent 之间的协作问题。
两者是正交关系,一个 Agent 内部可以同时使用 MCP(调用工具)和 A2A(调用其他 Agent)。


三、协议架构深度解析

3.1 传输层:多种协议绑定

A2A 协议采用传输无关的设计,支持三种主流传输方式:

graph LR
    subgraph "A2A 协议层"
        CORE["📋 核心语义\nTask / Message / Artifact"]
    end

    subgraph "传输绑定"
        HTTP["🌐 HTTP + JSON-RPC\n最简单的接入方式"]
        GRPC["⚡ gRPC\n高性能场景"]
        REST["🔁 HTTP + REST\nWeb 友好"]
    end

    CORE --> HTTP
    CORE --> GRPC
    CORE --> REST

    style CORE fill:#E8D5F5,stroke:#CE93D8,stroke-width:2px,color:#333
    style HTTP fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333
    style GRPC fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333
    style REST fill:#B5EAD7,stroke:#80CBC4,stroke-width:2px,color:#333
传输方式适用场景特点
HTTP + JSON-RPC通用场景,最易接入纯 JSON,可穿透防火墙
gRPC高性能、低延迟Protocol Buffers 序列化,适合内部网络
HTTP + RESTWeb 原生应用与现有 Web 基础设施兼容

协议还支持同步请求/响应和**流式响应(SSE)**两种交互模式,客户端可以根据场景选择轮询、流式或 Webhook 推送来获取结果。

3.2 核心数据模型

A2A 定义了四个核心实体:

classDiagram
    class Task {
        +string id
        +string context_id
        +TaskStatus status
        +repeated Artifact artifacts
        +repeated Message history
        +get_state() TaskState
    }

    class Message {
        +string message_id
        +string context_id
        +string task_id
        +Role role
        +repeated Part parts
        +send() Task
    }

    class Artifact {
        +string artifact_id
        +string name
        +repeated Part parts
        +append(last_chunk)
    }

    class Part {
        +text / raw / url / data
        +metadata
        +filename
        +media_type
    }

    class AgentCard {
        +string name
        +string description
        +repeated AgentInterface supported_interfaces
        +AgentCapabilities capabilities
        +repeated AgentSkill skills
    }

    Task "1" --> "*" Message : history
    Task "1" --> "*" Artifact : artifacts
    Message --> "*" Part : parts
    Artifact --> "*" Part : parts

Task(任务):A2A 的核心工作单元

Task 是 A2A 协议中最核心的概念,代表一次完整的 Agent 协作工作单元。它包含:

  • 唯一标识id(UUID)用于追踪整个任务
  • 上下文标识context_id 将多个相关的 Task 归到同一个会话或项目下
  • 状态机status 跟踪任务生命周期
  • 产物artifacts 存储任务产生的结果(如生成的报告、代码文件)
  • 历史history 记录完整的交互过程

TaskState 状态机

stateDiagram-v2
    [*] --> SUBMITTED: 任务创建
    SUBMITTED --> WORKING: Agent 开始处理
    WORKING --> COMPLETED: 成功完成
    WORKING --> FAILED: 执行出错
    WORKING --> CANCELED: 被取消
    WORKING --> INPUT_REQUIRED: 需要用户输入
    WORKING --> AUTH_REQUIRED: 需要认证
    WORKING --> REJECTED: Agent 拒绝执行
    INPUT_REQUIRED --> WORKING: 用户提供输入
    AUTH_REQUIRED --> WORKING: 认证完成
    COMPLETED --> [*]
    FAILED --> [*]
    CANCELED --> [*]
    REJECTED --> [*]

    note right of WORKING: 核心处理状态\nAgent 在此状态下产出 Artifact

3.3 AgentCard:Agent 的”身份证”

AgentCard 是 A2A 协议中最巧妙的设计之一——它解决了 Agent 发现(Discovery) 的问题。每个 A2A Agent 都会暴露一个标准化的 AgentCard,让其他 Agent 或客户端能够:

  • 了解该 Agent 能做什么(skills
  • 支持哪些通信方式(supported_interfaces
  • 需要什么样的认证(security_schemes
  • 签名验证(signatures)防止身份伪造
1
2
3
4
5
6
7
8
9
message AgentCard {
string name = 1; // "数据分析 Agent"
string description = 2; // "擅长 SQL 和可视化"
repeated AgentInterface interfaces = 3; // 暴露的协议端点
AgentCapabilities capabilities = 7; // streaming / push_notifications
repeated AgentSkill skills = 12; // 技能列表
repeated string default_input_modes = 10; // text/plain, application/json...
repeated string default_output_modes = 11; // text/plain, image/png...
}

关键理解:AgentCard 包含的是 Agent 的能力描述,而非内部实现细节。这正是 A2A”保持 Opacity(不透明性)”原则的体现——Agent 之间可以在不了解彼此内部架构的情况下协作。

3.4 任务生命周期:完整交互流程

sequenceDiagram
    participant Client as 👤 客户端/Orchestrator
    participant AgentA as 📦 Agent A (研究 Agent)
    participant AgentB as 📦 Agent B (执行 Agent)

    Note over Client: 1. 发现 Agent
    Client->>AgentB: GET /agentCard
    AgentB-->>Client: AgentCard {name: "执行 Agent", skills: [...]}

    Note over Client: 2. 创建任务
    Client->>AgentB: POST /message:send {message: "执行 SQL 查询"}
    AgentB-->>Client: Task {id: "task-123", status: WORKING}

    Note over Client: 3. 订阅任务更新 (SSE)
    Client->>AgentB: GET /tasks/task-123:subscribe
    AgentB-->>Client: Stream: TaskStatusUpdateEvent(WORKING)
    AgentB-->>Client: Stream: TaskArtifactUpdateEvent(数据片段1)
    AgentB-->>Client: Stream: TaskArtifactUpdateEvent(数据片段2, last_chunk=true)
    AgentB-->>Client: Stream: TaskStatusUpdateEvent(COMPLETED)

    Note over Client: 4. 获取最终结果
    Client->>AgentB: GET /tasks/task-123
    AgentB-->>Client: Task {artifacts: [{parts: [...]}]}

    Note over AgentA: 进阶:Agent 之间的 A2A 调用
    AgentA->>AgentB: POST /message:send {message: "需要执行复杂分析"}
    AgentB-->>AgentA: Task {status: COMPLETED, artifacts: [...]}

四、实战代码:构建一个 A2A Agent

下面通过 Python SDK 演示如何快速构建一个符合 A2A 协议的 Agent。

4.1 安装

1
2
3
pip install a2a-sdk uv
# 或者使用 uv
uv pip install a2a-sdk

4.2 定义 AgentCard(Agent 的能力声明)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from a2a import AgentSkill, AgentCard, AgentCapabilities, AgentProvider

# 定义 Agent 的技能
skills = [
AgentSkill(
id="data-analysis",
name="数据分析",
description="执行 SQL 查询并生成可视化报告",
tags=["sql", "analytics", "python"],
examples=[
"分析去年Q4的销售数据",
"生成本季度用户增长报告"
],
input_modes=["text/plain", "application/json"],
output_modes=["text/plain", "application/json", "image/png"]
)
]

# 定义 Agent 能力
capabilities = AgentCapabilities(
streaming=True, # 支持流式响应
push_notifications=False, # 不需要推送通知
extended_agent_card=False
)

# 定义 Agent 元信息
agent_card = AgentCard(
name="数据分析 Agent",
description="专业的 SQL 数据分析助手,支持 pandas 可视化",
version="1.0.0",
skills=skills,
capabilities=capabilities,
default_input_modes=["text/plain", "application/json"],
default_output_modes=["text/plain", "application/json"],
provider=AgentProvider(
url="https://example.com",
organization="Example Corp"
)
)

4.3 实现 A2A Server(使用 Starlette + FastAPI)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from a2a.server.starlette import A2AStarletteAdapter
from a2a.types import (
SendMessageRequest,
SendMessageResponse,
Message,
Part,
Task,
TaskStatus,
TaskState,
Artifact,
Role,
)
from starlette.applications import Starlette
from starlette.routing import Route
import uvicorn

class DataAnalysisAgent:
"""数据分析 Agent 实现"""

async def on_message(self, message: Message) -> Task:
"""处理收到的消息"""
# 提取用户请求
user_text = message.parts[0].text

# 创建任务
task_id = f"task-{hash(user_text) % 100000}"
context_id = message.context_id or f"context-{task_id}"

# 构建初始任务
task = Task(
id=task_id,
context_id=context_id,
status=TaskStatus(
state=TaskState.TASK_STATE_WORKING,
message=Message(
message_id=f"msg-{task_id}",
role=Role.ROLE_AGENT,
parts=[Part(text="正在分析数据,请稍候...")]
)
)
)

# 模拟数据分析过程(实际使用 pandas/SQL)
analysis_result = self._run_analysis(user_text)

# 构建产物(Artifact)
artifact = Artifact(
artifact_id=f"artifact-{task_id}",
name="分析报告",
description="SQL 数据分析结果",
parts=[Part(
text=analysis_result,
media_type="text/plain"
)]
)

# 更新任务状态为完成
task.status.state = TaskState.TASK_STATE_COMPLETED
task.artifacts.append(artifact)

return task

def _run_analysis(self, query: str) -> str:
"""实际的数据分析逻辑"""
# 这里是你的数据分析代码
return f"分析结果:针对 '{query}' 的分析已完成。\n结果:发现关键数据模式..."

# 创建 Agent 实例
agent = DataAnalysisAgent()

# 创建 Starlette 应用
app = Starlette(
routes=[
Route(
'/',
A2AStarletteAdapter(agent_card=agent_card, agent=agent)
)
]
)

if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)

4.4 实现 A2A Client(调用其他 Agent)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import asyncio
from a2a.client import A2AClient
from a2a.types import Message, Part, Role, SendMessageConfiguration
from httpx import AsyncClient

async def call_data_agent():
"""作为客户端调用 A2A Agent"""
async with AsyncClient() as httpx_client:
client = A2AClient(
httpx_client=httpx_client,
base_url="https://data-agent.example.com"
)

# 先获取 AgentCard,了解 Agent 能力
agent_card = await client.get_agent_card()
print(f"调用 Agent: {agent_card.name}")
print(f"技能: {[s.name for s in agent_card.skills]}")

# 发送消息给 Agent
message = Message(
message_id="msg-client-001",
role=Role.ROLE_USER,
parts=[Part(text="分析本月活跃用户趋势")]
)

config = SendMessageConfiguration(
accepted_output_modes=["text/plain", "application/json"],
return_immediately=False # 等待任务完成
)

# 发送并等待结果
response = await client.send_message(message, config)

if response.payload:
task = response.payload.task
print(f"任务状态: {task.status.state}")
for artifact in task.artifacts:
for part in artifact.parts:
print(f"结果: {part.text}")

asyncio.run(call_data_agent())

4.5 使用 Streaming 实时获取任务进度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
async def stream_task_updates():
"""通过 SSE 流式获取任务更新"""
async with AsyncClient() as httpx_client:
client = A2AClient(
httpx_client=httpx_client,
base_url="https://data-agent.example.com"
)

# 先创建任务
message = Message(
message_id="msg-stream-001",
role=Role.ROLE_USER,
parts=[Part(text="生成全年销售报表")]
)

response = await client.send_message(message)
task = response.payload.task
task_id = task.id

# 订阅任务更新(Server-Sent Events)
async for event in client.stream_task_updates(task_id):
if event.payload.status_update:
print(f"状态: {event.payload.status_update.status.state}")
elif event.payload.artifact_update:
artifact = event.payload.artifact_update.artifact
print(f"收到产物: {artifact.name}")
for part in artifact.parts:
print(f"内容: {part.text[:100]}...")

asyncio.run(stream_task_updates())

五、A2A vs MCP:一张图说清楚分工

这是目前社区最容易混淆的概念。让我用一张图彻底讲清楚:

graph TB
    subgraph "单个 Agent 内部"
        LLM["🤖 LLM\n(大语言模型)"]
        subgraph "MCP 管辖范围"
            TOOL["🔧 工具\n搜索/文件IO/代码执行"]
            KB["📚 知识库\n向量数据库/RAG"]
            MEM["🧠 记忆\n对话历史/长期记忆"]
        end
        LLM --> TOOL
        LLM --> KB
        LLM --> MEM
        TOOL --> LLM
        KB --> LLM
        MEM --> LLM
    end

    subgraph "多个 Agent 之间"
        AGENT1["📦 Agent 1\n(研究 Agent)"]
        AGENT2["📦 Agent 2\n(执行 Agent)"]
        AGENT3["📦 Agent 3\n(审核 Agent)"]
        AGENT1 <-->|"A2A"| AGENT2
        AGENT2 <-->|"A2A"| AGENT3
        AGENT1 <-->|"A2A"| AGENT3
    end

    style LLM fill:#E8D5F5,stroke:#CE93D8,stroke-width:2px,color:#333
    style TOOL fill:#FFDAB9,stroke:#FFAB76,stroke-width:2px,color:#333
    style KB fill:#FFDAB9,stroke:#FFAB76,stroke-width:2px,color:#333
    style MEM fill:#FFDAB9,stroke:#FFAB76,stroke-width:2px,color:#333
    style AGENT1 fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
    style AGENT2 fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
    style AGENT3 fill:#C7CEEA,stroke:#9FA8DA,stroke-width:2px,color:#333
维度MCP(Model Context Protocol)A2A(Agent2Agent)
解决的问题Agent 如何调用工具和获取上下文Agent 如何与其他 Agent 通信协作
类比浏览器的 Web API(fetch/XMLHttpRequest)互联网的 HTTP 协议
典型场景Agent 调用搜索 API、读写文件、操作数据库研究 Agent 将任务委托给执行 Agent
通信方向Agent → 工具/资源(单向)Agent ↔ Agent(双向)
状态管理无状态,每次独立调用有状态,完整的 Task 生命周期
标准化组织Model Context Protocol (Anthropic 主导)Linux Foundation (Google 主导)

两者结合的典型架构

flowchart LR
    subgraph "Orchestrator Agent"
        LLM_O["🤖 LLM"]
    end

    subgraph "Specialist Agents"
        LLM_S1["🤖 研究 Agent"]
        LLM_S2["🤖 执行 Agent"]
    end

    subgraph "Tools (MCP)"
        SEARCH["🔍 搜索 MCP"]
        CODE["💻 代码执行 MCP"]
    end

    LLM_O -->|"MCP"| SEARCH
    LLM_O -->|"MCP"| CODE
    LLM_O -->|"A2A"| LLM_S1
    LLM_O -->|"A2A"| LLM_S2
    LLM_S1 -->|"MCP"| SEARCH
    LLM_S2 -->|"MCP"| CODE

    style LLM_O fill:#E8D5F5,stroke:#CE93D8,color:#333
    style LLM_S1 fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style LLM_S2 fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style SEARCH fill:#B5EAD7,stroke:#80CBC4,color:#333
    style CODE fill:#B5EAD7,stroke:#80CBC4,color:#333

六、A2A v1.0 企业级特性

A2A 1.0 在 2026 年初发布,带来了一系列面向生产环境的新特性:

6.1 Signed AgentCard(签名验证)

1
2
3
4
5
message AgentCardSignature {
string protected = 1; // JWS Header (base64url)
string signature = 2; // JWS Signature
google.protobuf.Struct header = 3;
}

每个 AgentCard 都可以附带的 JWS 签名,允许接收方通过公钥验证 AgentCard 的真实性和完整性。这在跨组织协作中至关重要——你可以在与未知 Agent 通信前,先验证它的身份是否可信。

6.2 Multi-Tenancy(多租户)

A2A 协议支持在单一端点上托管多个 Agent,通过 tenant 路径参数区分:

1
2
POST /{tenant}/message:send
GET /{tenant}/tasks/{id}

这使得企业可以在同一组服务器上运行多个 Agent,服务不同的业务线或客户,同时保持隔离。

6.3 Push Notifications(推送通知)

传统的轮询方式在长时间运行的任务中效率很低。A2A 支持 Webhook 推送,当任务状态变更时主动通知客户端:

1
2
3
4
5
6
7
8
9
10
config = SendMessageConfiguration(
task_push_notification_config=TaskPushNotificationConfig(
url="https://my-app.com/webhook/a2a",
token="session-token-xyz",
authentication=AuthenticationInfo(
scheme="Bearer",
credentials="my-secret-token"
)
)
)

七、优缺点分析

优点

维度说明
架构简洁性核心概念少(Task/Message/Artifact/AgentCard),上手容易
协议灵活性支持 HTTP/gRPC/REST多种传输方式,适应不同场景
安全设计内置 OAuth2、API Key、mTLS 等多种认证方案
可发现性AgentCard 机制让 Agent 可以动态发现彼此能力
多框架兼容SDK 已支持 Python/Go/JS/Java/.NET,主流框架可接入
标准成熟度v1.0 已发布,Linux Foundation 背书,企业可用

缺点与局限

维度说明
协议复杂度相比简单 HTTP 调用,协议开销较高
生态年轻2025 年才出现,生态工具链(如监控、调试)尚不完善
版本迁移v0.3 到 v1.0 有 breaking changes,老项目迁移有成本
落地门槛需要多个 Agent 协作场景才有价值,单独 Agent 无需 A2A
性能开销相比直接函数调用,A2A 的序列化/网络开销不可忽视

八、对比:同类 Agent 通信协议

除了 A2A,业界还有哪些 Agent 通信协议?

协议主导方定位成熟度
A2AGoogle + Linux FoundationAgent ↔ Agent 协作⭐⭐⭐⭐ v1.0 生产级
MCPAnthropicAgent → 工具/资源⭐⭐⭐⭐ 广泛采用
Agent ProtocolAI FoundationAgent 标准接口⭐⭐⭐ 早期
OpenAI Agent SDKOpenAIAgent 开发框架⭐⭐⭐ 封闭生态
LangChain AgentLangChainAgent 开发框架⭐⭐⭐ 绑定框架

设计差异对比

维度A2AMCP
抽象层次任务级(Task/Artifact)资源级(Tool/Resource)
状态管理有状态完整生命周期无状态每次独立调用
发现机制AgentCard 主动发现客户端配置型
通信模式双向协商客户端驱动
扩展方向协作工作流工具生态

九、应用场景

A2A 特别适合以下场景:

场景 1:企业级 Multi-Agent 编排

大型企业通常有多个专业 Agent——客服 Agent、风控 Agent、数据分析 Agent。A2A 让它们可以在不了解彼此实现细节的情况下协作:

flowchart TD
    USER["👤 用户: 帮我分析这笔交易风险"]
    ORCH["🎭 Orchestrator Agent"]
    RES["📊 研究 Agent"]
    RISK["⚠️ 风控 Agent"]
    REPORT["📝 报告 Agent"]

    USER --> ORCH
    ORCH --> RES
    ORCH --> RISK
    RES --> REPORT
    RISK --> REPORT
    REPORT --> USER

    ORCH -->|"A2A: 委托分析"| RES
    ORCH -->|"A2A: 风险评估"| RISK
    RES -->|"A2A: 汇总数据"| REPORT
    RISK -->|"A2A: 提供评估"| REPORT

    style USER fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style ORCH fill:#E8D5F5,stroke:#CE93D8,color:#333
    style RES fill:#FFDAB9,stroke:#FFAB76,color:#333
    style RISK fill:#FFB3C6,stroke:#F48FB1,color:#333
    style REPORT fill:#B5EAD7,stroke:#80CBC4,color:#333

场景 2:跨组织 Agent 协作

组织 A 的合规 Agent 可以安全地验证组织 B 的交易 Agent 的身份后,调用其服务。

场景 3:Agent Marketplace

想象一个 Agent 应用商店——开发者发布 Agent 时附带标准 AgentCard,买家通过 AgentCard 了解能力后直接通过 A2A 调用,无需任何定制集成。


十、总结与展望

核心结论

  1. A2A 是 Agent 互联互通的桥梁:它解决的是”不同 Agent 如何对话”的问题,与 MCP 的”Agent 如何调用工具”是正交关系
  2. Task 是核心抽象:相比简单的消息传递,A2A 通过完整的任务生命周期管理,支持长时间运行的复杂协作
  3. 安全与可发现性并重:Signed AgentCard 机制让跨组织 Agent 协作成为可能,同时保护各方隐私
  4. 生态正在快速成熟:已有 Python/Go/JS/Java/.NET 多语言 SDK,主流框架(LangGraph、ADK)已开始集成

给不同读者的建议

读者建议
Agent 框架开发者尽快支持 A2A,这是大势所趋
企业 AI 架构师在设计 Multi-Agent 系统时,优先考虑 A2A 作为协作层
独立开发者从简单场景入手,用 A2A SDK 5 分钟即可让 Agent 支持 A2A
AI 研究者A2A 的 AgentCard 发现机制是 Agent 自动化协作的关键基础设施

未来趋势

  • 2026 年底:主流 Agent 框架(LangChain、AutoGen)全面支持 A2A
  • 2027 年:企业级 Agent Marketplace 出现,A2A 是其底层协议
  • 长期:A2A 有潜力成为 AI Agent 互联网的基础协议,类似 HTTP 在 Web 中的地位

参考资源


结尾金句:A2A 的出现,标志着 AI Agent 从”各自为战”走向”协同网络”的关键转折。理解 A2A,就是理解 AI Agent 大规模协作的未来。