A2A 协议详解:让不同 AI Agent 之间实现协作

1 阅读5分钟

前言

前面学习 Agent 时,我们已经知道,一个复杂任务可以拆给多个 Agent:

用户
 ↓
Manager Agent
 ↓
├── Weather Agent
├── Ticket Agent
└── Hotel Agent

但是这里会出现一个问题:

不同 Agent 之间应该如何发现彼此、了解彼此的能力,并进行任务协作?

如果每个 Agent 都自己设计一套通信方式:

Agent A → 自定义 API → Agent B

Agent A → 另一套 API → Agent C

Agent 数量增加后,系统会越来越难维护。

因此出现了:

A2A

即:

Agent2Agent Protocol(Agent-to-Agent Protocol)

它关注的是:

不同 AI Agent 之间如何以标准化方式发现能力、发送任务、跟踪任务状态并获取结果。


一、为什么需要 A2A?

假设我们开发一个 AI 旅行助手。

用户提出:

帮我查询明天西安到成都的车票,
再看看成都天气,
最后给我一个出行建议。

系统中存在:

Ticket Agent
→ 查询车票

Weather Agent
→ 查询天气

Travel Agent
→ 生成旅行建议

主 Agent 可以把任务分配出去:

             Main Agent
                 │
        ┌────────┴────────┐
        ↓                 ↓
 Ticket Agent       Weather Agent
        ↓                 ↓
   查询车票            查询天气
        └────────┬────────┘
                 ↓
            Main Agent
                 ↓
             综合结果

A2A 解决的就是这种:

Agent ↔ Agent

之间的协作问题。


二、A2A 与前面技术的关系

前面已经学习:

LLM
RAG
Function Calling
MCP
Agent

现在可以进一步串起来。

LLM
 ↓
Agent
 ↓
├── RAG
├── Tool
└── MCP

这些主要解决:

一个 Agent 自己如何获取知识和使用外部能力。

而 A2A 更关注:

Agent A
   ↕
Agent B
   ↕
Agent C

也就是:

Agent 和 Agent 如何协作。

可以简单理解:

MCP
→ Agent 与 Tool / 外部能力

A2A
→ Agent 与 Agent

两者并不是替代关系,可以同时存在。


三、A2A 整体架构

一个简单的 A2A 架构:

用户
 ↓
Orchestrator Agent
 ↓
Agent Router
 ↓
┌──────────┬──────────┐
↓          ↓          ↓
Weather   Ticket     Hotel
Agent     Agent      Agent
↓          ↓          ↓
Tool       Tool       Tool

其中每个 Agent 都可以拥有自己的:

LLM
Prompt
Tools
RAG
MCP
业务逻辑

例如:

Weather Agent
     ↓
Weather MCP
     ↓
天气 API

而:

Main Agent
     ↓
A2A
     ↓
Weather Agent

负责的是 Agent 之间的协作。


四、A2A 中的核心概念

学习 A2A 时,需要重点理解:

AgentSkill
AgentCard
Task
TaskState
TaskStatus
Artifact
A2A Server

五、AgentSkill

AgentSkill 表示:

一个 Agent 具备什么能力。

例如 Weather Agent:

Agent:
Weather Agent

Skills:
- 查询实时天气
- 查询天气预报

Ticket Agent:

Agent:
Ticket Agent

Skills:
- 查询车票
- 查询车次

这样其他 Agent 才能够知道:

这个 Agent 能不能完成我的任务?

六、AgentCard

AgentCard 可以理解成:

Agent 的“能力名片”。

其中可以描述:

Agent 名称
Agent 描述
Agent 地址
支持的能力
Skills
通信能力

例如:

Weather Agent

描述:
负责查询天气信息

Skills:
get_weather
get_forecast

其他 Agent 可以通过 AgentCard 了解它提供什么服务。

流程:

发现 Agent
   ↓
读取 AgentCard
   ↓
查看 Skills
   ↓
判断是否符合任务
   ↓
发送任务

七、Task

Task 就是 Agent 之间传递的:

任务

例如:

Main Agent
   ↓
Task
   ↓
Weather Agent

Task 内容:

查询明天成都天气

Weather Agent 接收后执行任务,再把结果返回。


八、TaskState 与 TaskStatus

Agent 执行任务可能需要一定时间。

因此需要描述任务当前处于什么状态。

例如:

submitted
    ↓
working
    ↓
completed

也可能出现:

failed

TaskState 表示任务所处的状态。

而 TaskStatus 可以理解为:

任务当前状态
+
相关状态信息

例如:

Task

ID:10001

Status:
working

Message:
正在查询天气数据

这样调用方就可以知道任务执行到了哪里。


九、Artifact

Artifact 可以理解为:

Agent 完成任务后产生的结果或产物。

例如:

Task:

查询成都天气

↓

Artifact:

成都明天:
晴
18℃~27℃

Artifact 不一定只是文本,也可以表示任务生成的结构化结果或其他内容。

基本流程:

Task
 ↓
Agent 执行
 ↓
Artifact
 ↓
返回调用方

十、A2A Server

如果一个 Agent 希望向其他 Agent 提供能力,可以通过 A2A Server 对外暴露。

例如:

Weather Agent
     ↓
A2A Server
     ↓
AgentCard
Skills
Task
Artifact

其他 Agent:

Main Agent
   ↓
发现 Weather Agent
   ↓
读取 AgentCard
   ↓
发送 Task
   ↓
Weather Agent 执行
   ↓
返回 Artifact

十一、AgentNetwork 与 AgentRouter

当 Agent 数量越来越多时:

Weather Agent
Ticket Agent
Hotel Agent
Map Agent
Food Agent

就需要管理多个 Agent。

可以抽象出:

AgentNetwork

用于维护可以协作的 Agent。

同时可以通过:

AgentRouter

根据用户意图选择 Agent。

例如:

用户:
成都天气怎么样?

↓

Router

↓

Weather Agent

用户:

西安到成都有什么车次?

↓

Router

↓

Ticket Agent

如果是复杂任务:

帮我查询成都天气和车票

则可能同时调用:

Weather Agent
+
Ticket Agent

十二、A2A 的完整工作流程

把前面的概念串起来:

用户任务
   ↓
Main Agent
   ↓
Agent Router
   ↓
发现目标 Agent
   ↓
AgentCard
   ↓
查看 AgentSkill
   ↓
创建 Task
   ↓
发送给 A2A Server
   ↓
Agent 执行
   ↓
TaskStatus 更新
   ↓
生成 Artifact
   ↓
返回 Main Agent
   ↓
最终结果

核心思想其实并不复杂:

发现 Agent → 了解能力 → 分配任务 → 跟踪任务 → 获取结果。


十三、A2A 在真实业务中的应用

除了旅行助手,还可以应用于企业系统。

例如软件开发:

Manager Agent
├── Frontend Agent
├── Backend Agent
├── Database Agent
└── Test Agent

电力运维:

Operation Agent
├── Device Agent
├── Alarm Agent
├── Knowledge Agent
└── Analysis Agent

不同 Agent 专注自己的领域,再通过 A2A 进行协作。


十四、总结

A2A 的核心目标是:

让不同 AI Agent 能够以标准化方式发现能力、发送任务并进行协作。

几个重要概念:

概念作用
AgentSkill描述 Agent 能做什么
AgentCardAgent 的能力名片
TaskAgent 之间的任务
TaskState任务当前状态
TaskStatus任务状态信息
ArtifactAgent 产生的结果
A2A Server对外提供 Agent 能力

最后可以简单记住:

MCP
→ Agent 调用工具

A2A
→ Agent 调用 / 协作 Agent

掌握基本概念以后,下一步就可以通过多个 Agent 实际实现一次 A2A 协作。