A2A 生态互操作:不同框架的 AI 也能互相打电话
Hermes 消息平台接入第41篇:A2A 开放协议如何打通各框架智能体。
好嘞,今天咱们来聊个特别带感的话题——让不同框架的 AI 互相打电话。
想象一下:你电脑上的 Hermes 想查点资料,但它懒得自己动手,直接一个电话打给服务器上另一个 Hermes;或者你正在跟 ChatGPT 聊天,聊到一半想让 CrewAI 里的某个专家 Agent 插句话。这事儿搁以前,基本属于“跨服聊天”,想都别想。但现在,A2A 协议把这事儿变成了现实。
A2A 是啥?能吃吗?
A2A(Agent-to-Agent)是 Linux 基金会维护的一个开放协议,专门解决 AI 之间怎么互相通信的问题。你可以把它理解成 AI 界的“普通话”——不管对方是 Hermes、LangChain、CrewAI 还是 Google ADK,只要会说这口“普通话”,就能无障碍交流。
Hermes 的 A2A 插件是双向的:你的 Hermes 能调用别的 A2A Agent,别人也能通过 HTTP 往你的 Hermes 派活儿。
什么时候用 A2A?
- 跨机器的 Hermes 互传任务:台式机上的 Hermes 把活儿丢给服务器上的 Hermes,各干各的,互不干扰。
- 找专家帮忙:对方 Agent 在“名片”上写了会
web_search、research这些技能,你聊天聊到一半就能直接喊它来干活。 - 把自己变成“可呼叫服务”:让别的框架的 Agent 能直接给你派任务。
不过注意:如果只是同一台机器上多个 Agent 协作,用 delegation 或 kanban 更轻量。A2A 是给“跨进程、跨机器、跨框架”这种大场面用的。
怎么开启?
一条命令搞定:
hermes gateway setup # 选 A2A
或者手动改配置:
gateway:
platforms:
a2a:
enabled: true
extra:
port: 9900
注意,出站工具默认是关的,得手动开:
hermes tools enable a2a --platform cli # 命令行用
hermes tools enable a2a --platform telegram # 聊天平台用
hermes tools enable a2a --platform a2a # 让打进来的 A2A 任务还能再打给别人(套娃)
往外打:调用别的 Agent
开了工具集之后,你的 Hermes 就多了几个“电话本”工具:
| 工具 | 干啥的 |
|---|---|
a2a_discover(url) |
看看对方“名片”,了解它有什么技能 |
a2a_call(agent, message, context_id?) |
派任务、拿回复,支持多轮对话 |
a2a_list() |
查看已配置的伙伴、历史对话 |
a2a_history(context_id) |
翻旧账,找回之前的对话 |
a2a_orchestrate(capability, message, mode?) |
群发!把所有会某项技能的 Agent 都喊一遍 |
在 config.yaml 里配置好“通讯录”:
a2a_agents:
researcher:
url: "http://research-box.local:9900"
auth: { type: bearer, token: "..." }
timeout: 120
capabilities: [web_search, research]
然后直接说:“让 researcher 帮我总结今天的 arXiv 论文”,它就屁颠屁颠去打电话了。
接电话:让别人调用你
开启了入站平台后,你的 Hermes 会提供:
- Agent 名片:
GET /.well-known/agent-card.json,介绍你是谁、会啥技能。 - JSON-RPC 2.0 接口:
POST /,支持SendMessage、SendStreamingMessage、GetTask等标准方法。 - SSE 流式响应:长任务可以流式返回结果。
- Webhook 推送通知:任务跑完了主动告诉你,带 HMAC 签名。
打进来的任务会直接注入你正在运行的 gateway 会话——同一个 Agent、同一套记忆和工具,干完活把结果回给调用方。多轮对话靠 contextId 保持,对方可以跟你来回聊。
安全:默认锁死,想开得自己拧钥匙
- 没设 token? 那只能本机访问,绑定
127.0.0.1。 - 想远程访问? 必须设 bearer token 并且显式设置
A2A_HOST。 - 每个伙伴一个专属 token:
A2A_PEER_TOKENS="alice:tok1,bob:tok2",谁是谁清清楚楚。 - 防注入:打进来的文本会被过滤,远程 Agent 没法调用你的斜杠命令。
- 防套娃:每个对话最多来回 5 轮(可配),防止两个 Agent 无限互相 ping-pong。
- 审计日志:所有交流都记在
~/.hermes/a2a_audit.jsonl。
快速测试
# 从另一台机器试试:
curl http://your-host
能看到 Agent 名片就说明通了。
长任务超时了咋办?
如果对方 Agent 干活慢,回复等超时了,把 A2A_REPLY_TIMEOUT(默认 300 秒)调大就行。放心,那个负责清理“孤儿任务”的后台扫描会跟着这个值走——只要还在等回复,它就不会把任务判死;就算回复姗姗来迟,也会被存下来而不是丢掉。当然,也可以让调用方注册一个 webhook 推送通知,然后轮询 GetTask 拿结果。
一句话总结:A2A 让 AI 之间互相打电话成了标配,Hermes 这边电话线已经拉好,就等你拨号了。
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/messaging/a2a