你有5个AI Agent在"待命"——一个负责搜热点、一个写大纲、一个写正文、一个审核质量、一个做封面。但它们各干各的,你要手动把上一个的输出复制粘贴给下一个。有没有办法让它们自动接力?Hermes 的 delegate_task 就是做这件事的——一条指令,5个Agent接力完成,你只需验收最终结果。
你肯定遇到过这个流程痛点
假设你的「AI创业内参」内容流水线是这样的:
① 研究员搜索热点 → 产出调研笔记
② 你复制调研笔记 → 发给大纲Agent → 产出大纲
③ 你复制大纲 → 发给写作Agent → 产出一稿
④ 你复制一稿 → 发给审核Agent → 产出修改意见
⑤ 你复制修改意见 → 发给写作Agent → 修改定稿
⑥ 你复制定稿 → 发给设计Agent → 做封面
每一步都需要你手动"搬运"上下文。5个Agent、6次手动操作——对于一个号称"自动化"的系统来说,你依然是最累的那个环节。
这不是Agent能力的问题,是编排方式的问题。
Hermes 从 v0.18 开始内置的 delegate_task 机制,就是专门解决这个问题的。它能让你在主会话中"派发任务"给独立的子Agent,子Agent完成任务后把结果写入文件,主Agent继续下一步——全程不需要你手动搬运任何东西。
delegate_task 是什么?(30秒速览)
delegate_task 是 Hermes Agent 的多Agent任务派发机制。它的工作原理:
┌──────────────────┐
│ 主控 Agent │
│ (你的会话) │
└──────┬───────────┘
│ delegate_task()
┌───────────┼───────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 子Agent 1│ │ 子Agent 2│ │ 子Agent 3│
│ │ │ │ │ │
│ 独立会话 │ │ 独立会话 │ │ 独立会话 │
│ 独立工具 │ │ 独立工具 │ │ 独立工具 │
│ 独立上下文 │ │ 独立上下文 │ │ 独立上下文 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
▼ ▼ ▼
输出文件 输出文件 输出文件
│ │ │
└────────────┴────────────┘
│
▼
主控Agent 读取结果 → 下一步
核心概念:
| 概念 | 说明 |
|---|---|
| 子Agent | 独立会话,有自己的上下文窗口和工具集 |
| role | leaf(纯执行,不做进一步委派)或 manager(可以再委派) |
| toolsets | 分配给子Agent的工具组合,如 ["web","file","terminal"] |
| goal | 一次性的任务描述,子Agent完成即退出 |
| context | 静态背景信息,注入到子Agent的system prompt |
关键优势:每个子Agent有独立的上下文窗口。主Agent的上下文不会被子Agent的搜索/读取操作污染。这意味着你可以在一个主会话中调度数十个子Agent,而不会超出上下文窗口。
实战:5个Agent接力完成一篇公众号文章
下面是一个真实可运行的完整例子。目标:从零开始,自动产出《AI创业内参》的一篇文章。
架构设计
主控Agent(你)
│
├─→ ① researcher Agent(调研)
│ toolset: [web, file, terminal]
│ 输出: research/outputs/01-research.md
│
├─→ ② outliner Agent(大纲)
│ toolset: [file]
│ 输入: 01-research.md
│ 输出: outline/outputs/01-outline.md
│
├─→ ③ writer Agent(写作)
│ toolset: [file]
│ 输入: 01-research.md + 01-outline.md
│ 输出: content/outputs/01-article.md
│
├─→ ④ reviewer Agent(审核)
│ toolset: [file]
│ 输入: 01-article.md
│ 输出: review/outputs/01-review.md
│
└─→ ⑤ writer-fix Agent(修正)
toolset: [file]
输入: 01-article.md + 01-review.md
输出: 覆盖 01-article.md
完整调用代码
以下代码在主控Agent的会话中一次性执行:
# ========== STEP 1: 调研 ==========
delegate_task(
goal="""作为AI创业内参的调研Agent,请完成以下任务:
1. 搜索今日AI Agent工具领域的最新动态(Hermes Agent、OpenClaw、Claude Code、MCP等)
2. 从搜索结果中提取3个候选选题,每个选题包含:
- 标题(含悬念/数字)
- 核心观点(1句话)
- 目标读者价值
- 2-3条关键数据来源URL
3. 输出到文件: ~/ai-neican/research/outputs/01-research.md
格式:
# 今日AI Agent热点调研报告
## 候选选题1
- 标题:
- 核心观点:
- 数据来源:
## 候选选题2
...(以此类推)
注意:每条关键数据必须附带具体URL,不可只标注"官网"。""",
context="""项目路径: ~/ai-neican/
输出路径创建: mkdir -p ~/ai-neican/research/outputs/
AI创业内参面向AI创业者,聚焦AI Agent工具赛道。""",
toolsets=["web", "file", "terminal"],
role="leaf"
)
# ========== STEP 2: 大纲 ==========
delegate_task(
goal="""作为AI创业内参的大纲Agent,请完成以下任务:
1. 读取 ~/ai-neican/research/outputs/01-research.md
2. 选取最佳候选选题,撰写结构化大纲
3. 输出到 ~/ai-neican/outline/outputs/01-outline.md
大纲需包含:
- 引言钩子(前3句话怎么抓住读者)
- 5-7个章节,每章标注核心要点
- 字数分配(总2500字)
- 结尾CTA(引导关注/分享/订阅)""",
context="""读取文件: ~/ai-neican/research/outputs/01-research.md
输出路径: mkdir -p ~/ai-neican/outline/outputs/
写作风格: 公众号体,实操导向,有代码/数据/截图。""",
toolsets=["file", "terminal"],
role="leaf"
)
# ========== STEP 3: 写作 ==========
delegate_task(
goal="""作为AI创业内参的写作Agent,请按大纲创作完整文章。
1. 读取 ~/ai-neican/research/outputs/01-research.md
2. 读取 ~/ai-neican/outline/outputs/01-outline.md
3. 按大纲撰写2500字完整的公众号文章
4. 输出到 ~/ai-neican/content/outputs/01-article.md
要求:
- 公众号风格(短段落、多分段、小标题清晰)
- 必须有3+处具体数据
- 必须有可复制的代码/配置片段
- 结尾有CTA引导关注""",
context="""输入文件:
- ~/ai-neican/research/outputs/01-research.md
- ~/ai-neican/outline/outputs/01-outline.md
输出: mkdir -p ~/ai-neican/content/outputs/
风格: 实操导向,AI创业者视角。""",
toolsets=["file"],
role="leaf"
)
# ========== STEP 4: 审核 ==========
delegate_task(
goal="""作为AI创业内参的审核Agent,请审核以下文章并输出审核报告。
1. 读取 ~/ai-neican/content/outputs/01-article.md
2. 按以下五维度评分(每维度满分25,总分100):
- 事实准确:关键数据是否有来源URL
- 逻辑完整:是否有"事件→分析→行动"框架
- 标题质量:信息密度和吸引力
- 内容价值:是否有可操作的代码/模板
- 原创性:是否有独家视角
3. 输出到 ~/ai-neican/review/outputs/01-review.md
格式:
# 审核报告
## 总评分: X/100
## 各维度评分
- 事实准确: X/25 — 具体问题
- 逻辑完整: X/25 — 具体问题
...
## 修改清单
1. 问题 + 修复建议
2. ...
## 裁决
✅ 直接发布 / ⚠️ 修改后发布 / ❌ 需重写""",
context="""输入: ~/ai-neican/content/outputs/01-article.md
输出: mkdir -p ~/ai-neican/review/outputs/
审核标准: 60分及格线,事实准确维度无来源URL直接0分。""",
toolsets=["file"],
role="leaf"
)
# ========== STEP 5: 修正 ==========
delegate_task(
goal="""作为AI创业内参的写作Agent,请根据审核报告修改文章。
1. 读取 ~/ai-neican/content/outputs/01-article.md(原文)
2. 读取 ~/ai-neican/review/outputs/01-review.md(审核报告)
3. 逐项修改审核报告中的问题
4. 输出修改后的文章,覆盖 ~/ai-neican/content/outputs/01-article.md
要求:
- 必须逐条响应审核报告中的修改清单
- 中文字数不低于2500字
- 保留所有代码片段和数据结构""",
context="""输入:
- ~/ai-neican/content/outputs/01-article.md
- ~/ai-neican/review/outputs/01-review.md
输出: 覆盖 ~/ai-neican/content/outputs/01-article.md""",
toolsets=["file"],
role="leaf"
)
执行以上5个 delegate_task 调用后,你的 content/outputs/ 目录下就有了一篇经过"调研→大纲→写作→审核→修改"五轮加工的文章。
delegate_task 的三个关键参数(彻底搞懂)
1. role: "leaf" vs "manager"
# leaf: 纯执行者,不能再委派任务给其他Agent
delegate_task(goal="搜索今日AI热点", role="leaf", ...)
# manager: 可以进一步委派(适合复杂工作流)
delegate_task(goal="协调整个内容生产流水线", role="manager", ...)
选择决策树:
- 子任务单一、可一步完成 → leaf
- 子任务需要拆分成多个子子任务 → manager
实际经验:90%的场景用 leaf 就够了。manager 容易导致嵌套太深、难以追踪。优先考虑扁平化设计。
2. toolsets: 给子Agent什么工具
# 需要搜索网络 → 给 web
toolsets=["web", "file", "terminal"]
# 只需要读写文件 → 只给 file
toolsets=["file"]
# 需要执行脚本 → 给 terminal
toolsets=["file", "terminal"]
最小权限原则:只给子Agent完成任务所需的工具,不给多余的。这既是安全实践,也能避免子Agent"乱跑"——比如给了 terminal 的Agent可能会执行你不期望的命令。
3. goal vs context
delegate_task(
goal="具体的、一次性的任务指令。子Agent完成即退出。", # ← 执行什么
context="静态背景信息,注入到子Agent的system prompt。" # ← 需要知道什么
)
goal:任务指令,类似"给freelancer的brief"。要具体、有交付物、有输出路径。
context:背景知识,类似"项目README"。子Agent不需要主动探索的信息放在这里。
避坑指南:4个最常见的 delegate_task 失败场景
坑1:子Agent超时但文件已写入
场景: writer Agent 写作 2500 字文章,600 秒超时。
问题: 主控收到超时错误,以为任务失败。
真相: 文章已完整写入 01-article.md(2739字)。
正确处理:
# 不要因为超时就放弃
result = delegate_task(...)
if result.timed_out:
# 检查输出文件是否存在且内容完整
if os.path.exists(output_path) and os.path.getsize(output_path) > 2000:
print("文件已写入,继续流程")
else:
print("确实失败,重试")
坑2:子Agent的输出格式不符合预期
场景: 大纲Agent输出了Markdown,但格式与预期不符。
问题: 下游写作Agent读到异常格式,产出一团糟。
正确处理:
# 主控Agent在读取子Agent输出后做格式校验
def validate_outline(filepath):
content = open(filepath).read()
assert "## 候选选题" in content, "大纲缺少选题章节"
assert "字数分配" in content, "大纲缺少字数分配"
return True
坑3:并行 vs 串行的错误选择
# ❌ 错误:把互不依赖的任务串行执行
delegate_task(goal="搜Hermes新闻", ...) # 等待完成
delegate_task(goal="搜OpenClaw新闻", ...) # 再等待完成
delegate_task(goal="搜Claude Code新闻", ...) # 再等待完成
# 总耗时: T1 + T2 + T3
# ✅ 正确:互不依赖的调研任务可以并行
# 但在同一个主Agent会话中,delegate_task 目前是串行的
# 解决方案:用多个独立的 cron job 并行触发
实战技巧:如果你需要并行,可以考虑在主Agent中用 terminal 工具集触发多个独立的 Hermes CLI 调用。
坑4:子Agent的搜索工具被限
场景: researcher Agent 分配了 ["web"] 工具集。
问题: Tavily API 返回 432 错误,子Agent束手无策。
正确处理:
# 在 context 中预先告知降级方案
delegate_task(
goal="搜索今日AI热点",
context="""
搜索降级方案:
1. web_search 失败 → 用 terminal + curl 调 GitHub API
2. GitHub API: curl -s "https://api.github.com/repos/.../releases"
3. HN Algolia: curl -s "https://hn.algolia.com/api/v1/search_by_date?..."
""",
toolsets=["web", "file", "terminal"],
role="leaf"
)
从 delegate_task 到"一人公司":四步落地
第一步:用 cron 触发主控Agent
# 每2小时自动运行内容生产流水线
0 */2 * * * hermes run --profile ai-neican --goal "执行完整内容生产流水线" >> /var/log/ai-neican.log 2>&1
第二步:主控Agent中串联所有 delegate_task
把上面5个 delegate_task 放进一个主控脚本,cron 自动触发。
第三步:增加发布环节
第六个Agent负责:
- 读取最终文章
- 上传配图到微信素材库
- 构建 HTML
- 提交草稿箱
第四步:增加数据复盘
第七个Agent(analyst)负责:
- 读取昨日发布数据
- 分析标题/选题/发布时间与阅读量的关系
- 输出优化建议
至此,你拥有一个7 Agent 的自主内容工厂。
总结:你的第一个多Agent工作流
今天的内容可以浓缩为一张"执行清单":
☐ 1. 创建项目目录结构(research/outline/content/review/outputs)
☐ 2. 编写第一个 delegate_task(researcher,toolsets=["web","file"])
☐ 3. 测试 researcher → 确认输出文件格式符合预期
☐ 4. 编写 outliner → 确认大纲质量
☐ 5. 串联前三步 → 验证"调研→大纲→写作"链路
☐ 6. 加入 reviewer + writer-fix → 验证五步全链路
☐ 7. 配置 cron → 定时自动触发
今天就能行动的第一步:打开你的 Hermes Agent,复制上面第一个 delegate_task(researcher) 的代码,看看你的Agent能不能自己完成一次热点调研。
如果你已经在用 Hermes Agent 但还没试过 delegate_task——你现在少做的事,就是竞争对手正在做的事。
AI创业 #HermesAgent #多Agent协作 #一人公司 #自动化
数据来源:
- Hermes Agent delegate_task 文档: https://hermes-agent.nousresearch.com/docs
- 本文中所有 delegate_task 代码均为 Hermes Agent v0.18+ 原生API,可直接运行
