前言
前面学习 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 能做什么 |
| AgentCard | Agent 的能力名片 |
| Task | Agent 之间的任务 |
| TaskState | 任务当前状态 |
| TaskStatus | 任务状态信息 |
| Artifact | Agent 产生的结果 |
| A2A Server | 对外提供 Agent 能力 |
最后可以简单记住:
MCP
→ Agent 调用工具
A2A
→ Agent 调用 / 协作 Agent
掌握基本概念以后,下一步就可以通过多个 Agent 实际实现一次 A2A 协作。