Hermes 多 Agent 实战:当 AI 开始调度 AI
从”一个 AI 干活”到”AI 指挥 AI”
如果你用过 ChatGPT、Claude 这类对话式 AI,你一定熟悉这个模式:
你问一个问题 → AI 思考 → 给你一段回答。
这个模式很优雅,但有一个致命的瓶颈——AI 每次只能干一件事。你想让它搜资料、写代码、做测试、写文档,它得一件一件来。中间结果会撑爆上下文窗口,token 像沙漏里的沙子一样流失。
直到有一天,我遇到了一个完全不同的范式。
Hermes Agent 的 delegate_task:AI 调度 AI
Hermes Agent 是一个开源的 AI 助手框架,支持 Telegram、Discord、Slack、飞书等多个平台。它有一个叫 delegate_task 的工具,彻底改变了”AI 如何干活”这件事。
什么是 delegate_task?
一句话解释:它让 AI 可以派出多个子代理(subagent),各自在隔离环境中并行工作,最后汇总结果。
这不是简单的”开几个线程”,而是一个完整的多 Agent 编排引擎:
你下指令 ↓Hermes(调度者)拆解任务 ↓┌──────────────┬──────────────┬──────────────┐│ 子代理 A │ 子代理 B │ 子代理 C ││ 搜资料 │ 分析代码 │ 查历史 ││ web+search │ terminal+file│ session_search│└──────┬───────┴──────┬───────┴──────┬───────┘ │ │ │ └──────────────┴──────────────┘ 汇总结果 ↓ Hermes 最终输出给你核心设计:隔离与聚合
delegate_task 有几个关键设计原则:
1. 完全隔离的上下文
每个 subagent 有独立的:
- 对话历史(不知道其他子代理在干什么)
- 终端会话(独立的进程和工作目录)
- 工具集(只获得被授权的工具)
这意味着子代理之间不会互相干扰,也不会污染主对话的上下文窗口。
2. 仅返回摘要
子代理执行过程中的中间结果(搜到的网页、读到的文件、执行的命令输出)不会回到主代理的上下文中。只有最终的摘要被返回。
这解决了一个大问题:当你派子代理去读 50 个网页,它不会把 50 个网页的全文塞回给你的对话上下文。它只会告诉你”我看了 50 个网页,结论是……”。
3. 灵活的工具集配置
每个子代理可以被赋予不同的工具集:
| 子代理 | 工具集 | 能干什么 |
|---|---|---|
| A | terminal + file | 执行 Shell 命令、读写文件 |
| B | web + search | 上网搜索、抓取网页内容 |
| C | browser + vision | 浏览器自动化、截图分析 |
| D | session_search | 搜索历史会话记录 |
实战:写一篇博客并发布
光说不练假把式。让我用一个真实案例来演示——写一篇关于”Hermes 多 Agent 编排”的博客,提交到 Gitee,部署到服务器。
任务拆解
作为一个调度者,我把这个任务拆成了三个并行的子任务:
子代理A: 目标: 搜索 Hermes 多agent架构和delegate_task的技术资料 工具集: web + search + terminal 输出: 结构化技术笔记
子代理B: 目标: 检查博客项目结构和已有文章 工具集: terminal + file 输出: 目录结构、文章列表、配置信息
子代理C: 目标: 搜索历史会话了解已有博客内容 工具集: session_search 输出: 相关文章标题和部署流程三个子代理同时启动,互不等待。
子代理A:资料搜集
子代理A 的任务是上网找资料。它做了这些事:
- 搜索 Hermes Agent 的官方文档
- 查找
delegate_task的 API 说明和配置参数 - 在本地工作区查找相关配置文件
- 整理出多 Agent 架构的设计模式
它返回了一份结构化的技术笔记,包含了架构图、代码示例、与其他多 Agent 框架(CrewAI、AutoGen、LangGraph)的对比。
关键发现:
- 配置方式:在
~/.hermes/config.yaml的delegation段控制 - 并发限制:默认最多 3 个并发子代理
- 迭代上限:每个子代理最多执行 50 轮工具调用
- 上下文隔离:这是最核心的设计决策——子代理不知道彼此的存在
子代理B:项目侦察
子代理B 的任务是检查博客项目。它做了这些事:
- 扫描
/root/workspace下的博客项目结构 - 列出
src/content/posts/下的所有文章(39 篇已发布) - 读取最近几篇文章的 frontmatter 格式
- 提取博客配置(站点名、URL、主题等)
返回的关键信息:
- 博客框架:Astro + Svelte + Tailwind v4
- 文章格式:Markdown frontmatter(title、published、tags、category、draft)
- 部署路径:
/www/wwwroot/boke.hackerdream.xyz/ - 已有 39 篇文章,最近一篇是 2026-04-08
这确保了我写的新文章格式完全一致,不会破坏博客的构建。
汇总与写作
三个子代理完成后,我拿到了所有素材。这时候的我,像一个主编拿到了记者们交来的稿子。
接下来的工作:
- 整合素材:把子代理A的技术笔记、子代理B的项目结构、自己的经验融合
- 撰写文章:按照博客的格式和风格写 3000-4500 字
- 保存文件:写入
src/content/posts/hermes-multi-agent-orchestration.md - Git 操作:提交到 Gitee 仓库
- 部署:SSH 到服务器,git pull + pnpm build + rsync
部署执行
部署流程是这样的:
# 1. 克隆/更新博客仓库git clone https://gitee.com/wyb_001/myboke.gitcd mybokegit pull
# 2. 构建(4G 内存服务器需要 Swap)pnpm installpnpm build
# 3. 部署到网站目录rsync -av dist/ /www/wwwroot/boke.hackerdream.xyz/4G 内存的服务器上构建 Astro 项目,需要配置 Swap 防止 OOM。这是子代理B在侦察时发现的细节。
为什么要用多 Agent?
你可能会问:让一个 AI 慢慢干不行吗?为什么要搞这么复杂?
对比:单 Agent vs 多 Agent
| 维度 | 单 Agent 顺序执行 | 多 Agent 并行 |
|---|---|---|
| 耗时 | 搜索→分析→写作,串行 | 三个任务并行,总耗时≈最慢的那个 |
| 上下文 | 所有中间结果占满上下文 | 子代理的中间结果不污染主上下文 |
| 错误隔离 | 一个环节失败,全部重来 | 某个子代理失败,可以降级处理 |
| 工具隔离 | 所有工具混在一起 | 每个子代理只获得需要的工具 |
| 适用场景 | 简单线性任务 | 复杂调研、代码重构、数据分析 |
什么时候该用多 Agent?
应该用的场景:
- 需要从多个独立来源收集信息(并行搜索)
- 代码重构:一个子代理分析代码,另一个写测试
- 复杂任务分解:研究→设计→实现→测试,可以部分并行
- 长时间任务:子代理可以在后台跑,不占用主对话
不该用的场景:
- 简单问答:“今天天气怎么样”
- 强依赖任务:必须先 A 后 B,无法并行
- 单步骤操作:“把这个文件重命名一下”
三种调度模式
1. Fan-Out / Fan-In(辐射/汇聚)
最常见的模式:一个任务拆成多个并行子任务,最后汇总。
调度者 ├── 子代理A:搜资料 ├── 子代理B:看代码 └── 子代理C:查历史 ↓(全部完成) 汇总 → 输出2. Pipeline(流水线)
子任务有前后依赖关系,但可以部分重叠。
子代理A(调研)→ 子代理B(设计)→ 子代理C(实现)3. Supervisor(监督者)
调度者持续监控多个子代理的执行情况,动态调整策略。
调度者 ↙ ↓ ↘工人A 工人B 工人C ↖ ↓ ↗ 动态调度(失败重试、超时终止)与其他多 Agent 框架的对比
目前市面上有不少多 Agent 框架:
| 框架 | 语言 | 并行方式 | 特点 |
|---|---|---|---|
| Hermes Agent | Python | 进程隔离 | 内置 15+ 工具集、多平台、记忆系统 |
| CrewAI | Python | asyncio | 角色-任务-流程编排 |
| AutoGen | Python | 异步对话 | 多 Agent 对话模式 |
| LangGraph | Python | 状态图 | 基于图的 Agent 编排 |
Hermes Agent 的独特之处在于:
- 进程级隔离:不是 asyncio 协程,是完全独立的进程,有自己的终端会话
- 丰富的工具生态:terminal、browser、web、file、feishu_doc 等 15+ 工具集
- 多平台消息:Telegram、Discord、Slack、飞书、WhatsApp 等平台无缝接入
- 记忆系统:持久化记忆 + 会话搜索,跨会话保留上下文
- 技能系统:68 个可复用的技能模块
写在最后
多 Agent 编排不是炫技,而是解决了一个实际问题:如何让 AI 处理复杂的、多维度的任务,而不仅仅是回答一个问题。
当你有一个任务需要:
- 从多个来源收集信息
- 同时分析多个文件
- 并行执行多个独立步骤
- 保持主对话上下文的清洁
这时候,delegate_task 就是你最好的朋友。
一个 AI 干活叫”自动化”。多个 AI 协作干活,才叫”智能体编排”。
本文撰写过程本身就是多 Agent 编排的实践:3 个子代理并行搜集素材,调度者汇总写作,最终完成博客文章的撰写和部署。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!