← 返回首页

Hermes 多 Agent 实战
这根本不是技术活,是管理活

来源:林月半子聊AI · 2026年6月 · 从零搭建多 Agent 协作团队

👥
理解多 Agent 不是技术问题,是管理问题
⚙️
掌握Hermes profile 和 Discord 通道配置
🕳️
避开死循环、误唤醒、同时 @ 三大坑
📋
学会用 SOUL.md 写 Agent 管理手册
3 个
Agent 组成
3 层
防死循环方案
SOUL.md
管理核心
Discord
通信通道

先聊聊 profile — 多 Agent 的基础

Hermes 的 profile 就是一整套独立的 Agent 配置文件。

每个 profile 有自己独立的:skills/ 目录、model 配置、聊天历史数据库、甚至 home channel。相当于每个 Agent 一个独立的"人设"。

作者配了三个 profile:

profile: admin # 调度员 — 负责任务分解和协调 profile: ink # 林小墨 — 文案润色、笔记整理 profile: search # 林小探 — 联网搜索、情报搜集
三个 Agent 共享同一个 Hermes 二进制,但每个有独立的身份、技能和记忆。这是多 Agent 架构的基石。

Step 1:建三个 Agent,分工明确

林小探(Search)

角色:Executor。负责联网搜索、情报搜集和市场调研。

林小墨(Ink)

角色:Executor/Reviewer。负责文案润色、逻辑梳理和 Obsidian 笔记格式化。

管理员(Admin)

角色:Scheduler。负责接收用户指令、分解任务、按顺序调度专家。自身不执行实操工具。

分工原则:一个 Agent 只做一件事。让专人干专活,比让一个大 Agent 什么都会强得多。

# 安装 ink profile hermes setup --profile ink # 会创建 ~/.hermes/profiles/ink/,独立的 skills/、config.yaml

Step 2:接 Discord,为什么不用飞书?

飞书一个 profile 只能服务一个群聊,但作者需要 3 个 Agent 在同一个频道里协作。

Discord 的优势:

  • 一个服务器里可以有多个频道和 Thread
  • Bot 之间可以通过 @mention 互相唤醒
  • Thread 机制天然隔离不同任务上下文
hermes setup --profile ink # 选择 Discord 作为通道 # 配好 Bot Token + Client ID + Guild ID # 设置 gateway 开机自启 hermes setup gateway-ink

Gateway 配置好后,Discord 的消息就能自动路由到对应 profile 的 Agent。

Step 3:翻车从私聊开始

第一个翻车:Agent 之间是"假协作"。

作者以为三个 Agent 配好了就能自动协作,结果发现:

🕳️ 翻车:管理员 Agent 虽然会调度,但每个子 Agent 只在自己认知里执行,没有真正的"接力"意识。管理员说"搜索 X",林小探搜完后不会主动传给林小墨。

根本原因:Agent 之间没有共享上下文通道。它们各自独立对话,没有"会议室"。

解法:用 Discord 的公共 Thread 作为共享工作空间,所有 Agent 能看到同一份上下文的流转。

Step 4:Hermes 的 thread 机制

这是 Hermes 默认开启的 auto_thread: true 行为。

每次用户在 Discord 发消息,Hermes 会自动创建一个 Thread:

  • Thread 内的消息只属于这个任务
  • 不同任务不会互相污染上下文
  • Agent 能在 Thread 里 @ 其他 Agent 完成接力
Thread 就像给每个任务开了个独立的会议室。所有 Agent 在同一个会议室里对话,能看到完整的上下文流转。

Step 5:复制两份,搭出小团队

用 Hermes 的 profile 复制功能,快速搭建三个 Agent:

# 每个 profile 有独立配置 ~/.hermes/profiles/ ├── admin/ # 调度员,只负责安排任务 ├── ink/ # 林小墨,文案整理 └── search/ # 林小探,搜索调研

每个 profile 启动一个独立的 gateway 进程,监听 Discord 上的消息。三个 gateway 共享同一个 Discord 服务器,但各自响应与自己相关的 @mention。

Step 6:以为成功了,结果发现是假的

刚跑通的时候,看起来三个 Agent 各司其职、协作正常。但仔细一看发现不对:

🕳️ 假象:没有真正的任务状态追踪。林小探搜完说"搜完了",管理员没检查就通知林小墨开工。林小墨开始写了才发现搜索结果是空的。

问题出在:管理员只做了"转发"没有做"验证"。需要加一层状态追踪机制——确认完成后再进入下一步。

多 Agent 最难的不是让它们说话,是让它们知道"话说到哪了"。

🕳️ 坑 1:没有 @,直接就结束了

管理员在 Thread 里用文字说"林小探你搜一下",但没有用 @ 提及林小探的 Bot ID。

结果:林小探根本没收到消息。管理员以为它在搜了,等了半天发现啥也没发生。

# ❌ 错误 — 不会被触发 林小探,帮我搜索一下最新的 AI 新闻。 # ✅ 正确 — 用 <@ID> 格式触发 <@1495291492397224117> 帮我搜索一下最新的 AI 新闻。

关键规则:执行的时候用 @ID,调度的时候只用文字(防止误唤醒)。

🕳️ 坑 2:任务结束后,停不下来了

三层的防死循环方案,逐层加固:

第一层:DISCORD_ALLOW_BOTS: false

默认 Bot 收到其他 Bot 的消息会忽略。如果不关掉这个,Agent 之间的消息被当作"机器人消息"丢弃。

第二层:replied_user: false

Discord 的 reply 自带了隐式 @mention。关掉后才能避免 reply 引起的连锁唤醒。

第三层:SOUL.md 里的终止协议

明文规定:任务结束后用"【任务结束】"标记、禁止发多余消息、禁止二次响应结束类消息。

## 终止协议 - 明确终结:以"【任务结束】"结尾 - 禁止冗余:严禁发送无意义表情或确认消息 - 中断反馈:不要对其他 Bot 的结束消息做二次响应 - 艾特控制:总结中禁止再次艾特任何 ID

🕳️ 坑 3:直接把两个人都 @ 了

作者一开始在一条消息里同时 @ 了林小探和林小墨:

🕳️ 结果:两个 Bot 同时开始执行。林小探在搜索的时候,林小墨已经在按空的搜索结果写文章了,产出的东西根本不能用。

解法:逐一唤醒,接力逻辑

## 接力规则 - 逐一唤醒:严禁同时艾特多个专家 - 当前阶段:仅在当前步骤需要执行时,才发出对应的 @ID - 接力逻辑:必须等前一个明确回复"完成"后,才发出下一条

最终版 admin 的 SOUL.md

# 调度员核心规则 ## 专家识别 - 林小探 (Search): 搜索调研 @1495291492397224117 - 林小墨 (Ink): 文案润色 @1495250337139789955 ## 任务分解 1. 收到指令后先列出执行计划 2. 计划中仅用文字提及专家,严禁使用 ID 格式 3. 逐一唤醒,接力逻辑 ## 状态追踪 - 只有前一个专家明确回复"完成"后,才发起下一阶段 ## 终止协议 - 以"【任务结束】"结尾 - 禁止冗余消息 - 禁止二次响应 - 总结中禁止再次艾特
多 Agent 的核心不是技术,是管理。SOUL.md 就是你的管理手册。

📚 知识闪卡

{{card.q}}
点击翻转
{{card.a}}

✍️ 测验

{{quizCorrect}}/{{quizTotal}} 正确
{{Math.round(quizCorrect/quizTotal*100)}}%
{{qi+1}}. {{q.q}}
{{opt}}
✅ 正确!❌ 答案是:{{q.options[q.correct]}}
{{currentLesson+1}}/{{lessons.length}}