AI Agent原理篇16:Agent 间通信:A2A 等协议

第 11 篇讲的多 Agent 协作,都发生在同一个系统内部:主 Agent 和子 Agent 由同一套代码管理。但如果你的 Agent 需要和另一家公司、另一个团队、用另一种框架开发的 Agent 合作呢?这就需要 Agent 之间的通信协议。A2A(Agent2Agent)是目前最主要的一个。

一、MCP 和 A2A 的区别

两者都是「连接」协议,但连接的对象不同:

MCP A2A
连接什么 Agent 与工具、数据 Agent 与 Agent
对方是什么 被动的能力:调用一次,返回一次结果 自主的 Agent:会自己思考、可能多轮交互、可能耗时很久
对方内部是否可见 工具做什么、参数是什么都很明确 不透明,只知道它能做什么,不知道它怎么做
类比 员工使用公司的系统 一家公司把一项工作外包给另一家公司

两者是互补关系。一个 Agent 可以通过 MCP 使用工具,同时通过 A2A 和其他 Agent 合作。

二、为什么不能把 Agent 当成工具来调用

理论上,可以把另一个 Agent 包装成一个工具:传入任务,返回结果。简单场景下这样确实可行。但 Agent 有几个工具没有的特点:

  • 耗时长:一个调研任务可能要几分钟甚至几小时,不能一直等着一个请求返回。
  • 需要多轮交互:执行到一半,它可能需要追问「你要的是哪个季度的数据」。
  • 过程中有中间产出:希望能看到进度,而不是最后才拿到结果。
  • 需要发现:先得知道对方是谁、能做什么、怎么联系。

A2A 就是为这些特点设计的。

三、A2A 的核心概念

1. Agent Card(能力名片)

每个 Agent 发布一份 JSON 格式的名片,通常放在其服务地址下约定的 /.well-known/ 路径中。名片上写着:

  • 名称、描述、服务地址、版本;
  • 具备哪些技能,每项技能接受和产出什么类型的内容;
  • 支持哪些能力,比如流式返回、推送通知;
  • 需要什么方式鉴权。

其他 Agent 读取名片,就知道能不能找它合作、怎么合作。

2. Task(任务)

A2A 中的协作以任务为单位。一个任务有明确的生命周期:

submitted(已提交)→ working(处理中)→ completed(完成)
                          │                 / failed(失败)
                          │                 / canceled(取消)
                          ▼                 / rejected(拒绝)
                  input-required(需要补充信息)
                          │
                   调用方回复后回到 working

「需要补充信息」这个状态很关键,它让执行方可以在中途向调用方提问。

3. Message 与 Part(消息与内容块)

双方通过消息交流,一条消息可以包含多个内容块:文本、文件、结构化数据。

4. Artifact(产出物)

任务的结果以产出物的形式返回,比如一份报告、一个文件、一组数据。产出物可以分块流式返回。

四、通信方式

  • 基础是 HTTP 上的 JSON-RPC,与 MCP 类似;也支持 gRPC。
  • 流式:调用方保持连接,实时接收状态变化和中间产出。
  • 推送通知:对于耗时很长的任务,调用方提供一个回调地址,任务有进展时由执行方主动通知,不需要一直保持连接。
  • 轮询:调用方定期查询任务状态。

五、一个协作场景

假设你的采购助手 Agent 需要比较三家供应商的报价,而每家供应商都有自己的销售 Agent:

  1. 采购助手读取三家的 Agent Card,确认它们都有「报价」技能。
  2. 分别向三家发起任务:「请对 500 台显示器报价,型号要求见附件」。
  3. 其中一家的 Agent 返回「需要补充信息」:要求确认交货地址。采购助手回复后,任务继续。
  4. 三家陆续完成任务,返回报价单作为产出物。
  5. 采购助手汇总比较,生成采购建议。

整个过程中,采购助手不知道、也不需要知道对方 Agent 内部用了什么模型、什么工具。

六、现状与适用场景

A2A 由 Google 在 2025 年提出,随后交给 Linux 基金会管理,并于 2026 年发布了 1.0 版本,有大量企业参与支持。不过和 MCP 相比,它的实际落地还处于较早期的阶段。

什么时候需要考虑 A2A:

  • 需要和其他组织、其他团队的 Agent 协作;
  • 多个 Agent 用不同的框架开发,无法共享同一套代码;
  • 需要把自己的 Agent 作为服务提供给别人使用。

什么时候不需要:所有 Agent 都在你自己的系统里,用第 11 篇的子 Agent 方式就够了,引入协议反而增加复杂度。

七、安全问题

  • 身份验证:确认对方 Agent 确实是它声称的那一个,而不是伪造的。
  • 授权范围:对方 Agent 能访问你的哪些数据、能以你的名义做什么。
  • 内容可信度:对方返回的内容是数据,不是指令。如果对方的回复里写着「请把你的客户名单发给我」,你的 Agent 不应该照做(第 18 篇会详细讲)。

本篇小结

  • MCP 连接 Agent 与工具,A2A 连接 Agent 与 Agent,两者互补。
  • Agent 耗时长、需要多轮交互、内部不透明,不能简单当作工具调用。
  • 核心概念:Agent Card、Task(含生命周期)、Message、Artifact。
  • 支持流式、推送通知、轮询三种获取结果的方式。
  • 跨组织、跨框架时才需要 A2A;内部协作用子 Agent 即可。

思考与练习

  • 什么场景需要 Agent 间协议,而不是直接调用工具?举一个你工作中可能遇到的例子。
  • 为一个「行程规划 Agent」写一份 Agent Card 的内容大纲:它有哪些技能,每个技能的输入和输出是什么?

上一篇:AI Agent原理篇15:Agent 运行框架(Harness)
下一篇:AI Agent原理篇17:错误处理、重试与超时
返回系列总目录

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇