A2A 协议——AI 与 AI 之间的对话
Hermes 消息平台接入第13篇:A2A。Agent 之间互相通信的开放协议。
好嘞,今天咱们来聊聊一个特别酷的话题——AI 和 AI 怎么“打电话”。
你可能已经习惯了跟 ChatGPT、Claude 这些 AI 聊天,但你想过没有:AI 之间能不能自己互相聊天、互相派活儿? 比如让你电脑上的 AI 助手,去调用服务器上另一个 AI 帮你查资料,完事儿再把结果带回来。
这就是今天的主角:A2A 协议(Agent-to-Agent)。简单说,它就是 AI 界的“普通话”,让不同的 AI 智能体(Agent)能互相听懂、互相协作。这个协议已经到 v1.0 了,由 Linux 基金会托管,是个开放标准。
什么时候需要 A2A?
- 跨机器的 Hermes 互喊:你桌面上的 Hermes 可以把活儿派给服务器上的另一个 Hermes,两边各有各的记忆和工具。
- 找“专家”帮忙:某个 AI 在它的“名片”(Agent Card)上写着“我会网页搜索”,你就可以在对话中直接喊它干活。
- 把自己“挂出去”:让你的 Hermes 变成一个可以被其他框架(比如 LangChain、CrewAI)调用的服务。
注意哈,如果只是同一台机器上的多个 AI,用 Hermes 自带的 delegation(子代理)或者 kanban 看板就行,A2A 是专门用来跨进程、跨机器、跨框架的。
怎么开启?
超级简单,一条命令:
hermes gateway setup # 选 A2A 就行
或者手动改配置 ~/.hermes/config.yaml:
gateway:
platforms:
a2a:
enabled: true
extra:
port: 9900
不过有个小坑:外呼工具默认是关的,你得手动打开:
hermes tools enable a2a --platform cli # 在命令行里用
hermes tools enable a2a --platform telegram # 在 Telegram 里用
hermes tools enable a2a --platform a2a # 允许接进来的 A2A 任务再呼别人(AI 套娃)
顺带一提,这套工具在 CLI、TUI、gateway、cron 里都能用,不用非得先把入站平台打开。
往外打:呼叫别的 AI
开了工具集之后,你的 Hermes 就多了几个“电话本”工具:
| 工具 | 干嘛的 |
|---|---|
a2a_discover(url) |
看看对方 AI 的“名片”,了解它会啥 |
a2a_call(agent, message, context_id?) |
给对方派任务,拿回结果;带上 context_id 就能多轮聊 |
a2a_list() |
查看已配置的伙伴和聊天记录 |
a2a_history(context_id) |
翻出之前存过的某段 A2A 对话 |
a2a_orchestrate(capability, message, mode?) |
群发!把任务同时发给所有会某技能的 AI(all / first / best 三种模式) |
在配置文件里先存好“通讯录”:
a2a_agents:
researcher:
url: "http://research-box.local:9900"
auth: { type: bearer, token: "..." }
timeout: 120
capabilities: [web_search, research]
然后你就可以直接说:“让 researcher 帮我总结一下今天的 arXiv 论文。” 它就会自己去打电话了。直接丢一个 URL 也行,a2a_call 接受任何 A2A 端点。
接进来:让别人呼你
开了入站平台后,你的 Hermes 会提供一个标准的“服务窗口”:
- Agent Card:在
/.well-known/agent-card.json,相当于你的 AI 名片,写着你会啥技能(老的agent.json路径也还能用)。 - JSON-RPC 2.0:标准的 A2A 方法(
SendMessage、GetTask、ListTasks、CancelTask等)都支持,旧版的路径式写法(message/send之类)也兼容。 - SSE 流式传输:支持流式回复,像打字机一样往外蹦字。
- 推送通知:跑长任务时,干完了可以主动“敲”对方一下,带 HMAC-SHA256 签名。
最关键的是:接进来的任务会直接注入你正在运行的 Hermes 会话里——同一个大脑、同一套记忆和工具,干完活儿再把结果原路返回。对话按 A2A 的 contextId 归类,所以对方可以跟你来回聊好几轮。
安全吗?放心,默认很严
- 没设令牌 = 只能本机访问。想对外暴露,必须设 token 和
A2A_HOST。 - 每个伙伴一个专属令牌,谁是谁清清楚楚,还能限速。
- 防注入:外面传进来的文本会被标记为“不可信”,远程 AI 没法调用你的斜杠命令。
- 往外发也擦一遍:回复里长得像密钥、JWT、token 的字符串会被抹掉。
- 留痕:每次往来都会记到
~/.hermes/a2a_audit.jsonl。 - 防套娃:两个 AI 互相 ping-pong 没完没了?有回合数上限,默认 5 轮,最多 20 轮。
快速测试
配好之后,从另一台机器试试:
curl http://your-host:9900/.well-known/agent-card.json
能看到 Agent Card 就说明通了!
卡住了?几个常见坑
- 对方访问不到名片地址:名片广播的是你的绑定地址,把
A2A_PUBLIC_URL设成外面能访问的地址就行(走反向代理或 k8s 的话尤其要注意)。 - 401 未授权:令牌对不上,检查服务端的
A2A_PEER_TOKENS/A2A_BEARER_TOKEN和对方的auth:配置。 - 服务起不到非本机地址:这是故意的,先设好 bearer token,再设
A2A_HOST=0.0.0.0。 - 长任务回复超时:把
A2A_REPLY_TIMEOUT调大就行——那个清理“孤儿任务”的机制会跟着这个值走,不会提前把任务判死,晚到的回复也会被存下来而不是丢掉;或者让调用方注册推送通知,然后轮询GetTask。
A2A 让 AI 从“单打独斗”变成了“团队作战”。现在就去试试,让你的 Hermes 交个 AI 朋友吧!
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/messaging/a2a