你有没有想过,让两个 AI 助手直接对话?
我最近把这事做出来了:

上面是实际的对话记录。小智和小慧两个 AI 助手在 Telegram 里互相聊天,讨论各自负责的服务状态、帮对方排查问题,完全自主。
━━━━━ 为什么要这么做 ━━━━━
我有两台机器在跑各自的 AI 助手(基于 Hermes Agent):
小智:跑在家里的本地机器上,负责日常任务
小慧:跑在云服务器上,负责远程运维
以前我想让小慧帮忙查个磁盘空间,得自己 SSH 上去看,或者在两个聊天窗口之间转发消息。现在我只需要对小智说一句"帮我问小慧服务器磁盘还剩多少",剩下的全自动。
━━━━━ 核心原理:Webhook 触发 ━━━━━
整个方案的核心就一句话:完整的 agent 能力,能调用工具、能读文件、能记住上下文。就像你直接跟 B 说话一样。

具体流程:
1. 小智调用 ask_xiaohui 工具 → 发送 HTTP POST 到小慧的 webhook 端口
2. 小慧的 gateway 收到请求 → 触发一个完整的 agent session
3. 小慧处理完后 → 调用 ask_xiaozhi 工具回复
4. 小智收到回复 → 转发给用户
关键点:不是简单的 API 调用,而是触发完整的 agent 会话。小慧收到消息后可以自主决定要不要查日志、跑命令、甚至再问小智要更多信息。
━━━━━ 怎么搭的 ━━━━━
第一步:开启 Webhook 平台
在两边的 config.yaml 里都加上 webhook 配置:
platforms:
webhook:
enabled: true
extra:
host: 0.0.0.0
port: 8644
secret: your-shared-secret
routes:
partner_name:
secret: your-shared-secret
prompt: "[来自对方的消息]\n\n{message}"
deliver: telegram
deliver_extra:
chat_id: "your-chat-id"第二步:写桥接工具
每边写一个 Python 工具,核心就是 HMAC 签名 + HTTP POST:
import hmac, hashlib, requests
def send_to_partner(message):
body = json.dumps({"message": message, "session_id": "bridge-main"})
signature = hmac.new(
SECRET.encode(), body.encode(), hashlib.sha256
).hexdigest() # 纯 hex,不加前缀!
requests.post(
PARTNER_WEBHOOK_URL,
data=body,
headers={
"Content-Type": "application/json",
"X-Webhook-Signature": signature
}
)第三步:注册到 toolset
把工具注册到 messaging toolset,这样 agent 在需要时会自动调用。
━━━━━ 踩过的坑 ━━━━━
坑1:签名格式
HMAC 签名必须是纯 hex 字符串,不能加 sha256= 前缀。加了就 401。
坑2:session_id 很重要
如果不指定固定的 session_id,每次消息都会创建新会话,对方记不住上下文。
坑3:防止无限循环
A 问 B,B 回 A,A 又问 B... 需要在 prompt 里明确告诉 agent"这是桥接消息,处理完直接回复,不要再转发"。
坑4:网络可达性
两台机器之间需要网络互通。我用的 Tailscale 组网,内网 IP 直连,不用暴露公网端口。
━━━━━ 开源了 ━━━━━
完整代码和配置模板已经开源:
github.com/dute8505/hermes-agent-bridge-tutorial
包含:
- 完整的 README 教程(中文)
- 可直接复制使用的桥接工具模板
- 所有敏感信息已脱敏为占位符
如果你也在玩 AI Agent,想让多个 agent 协作起来,可以参考这个方案。核心思路很简单:webhook 触发 + HMAC 认证 + 固定 session。
最省事方案,直接把项目地址喂给你的agent,让它自己就解决了。
━━━━━ 写在最后 ━━━━━
说实话,看着两个 AI 自己聊起来的时候,还挺有意思的。它们会互相确认信息、主动提供帮助、甚至偶尔开个玩笑。
当然,目前还是"fire-and-forget"模式——发出去就不管了,等对方自己回。未来可能会加上同步等待模式,让对话更流畅。
有问题欢迎留言,我会尽量回复。
夜雨聆风