Agent工坊

【Agent工坊】Hermes Agent 多Agent协作实战:用 delegate_task + Skill 构建自动化流水线

一口气把3个独立任务交给3个子Agent并行跑,3分钟后收到3份完整报告——这不是科幻,是 Hermes Agent 的 delegate_task 工具。

delegate_task 工作模式:单任务委托 vs 并行批处理▲ delegate_task 工作模式:单任务委托 vs 并行批处理

为什么你需要多Agent协作

很多人用 AI Agent 还停留在"一问一答"模式:你提问,Agent 回答。但真实的工作场景是这样的——

你早上打开电脑,需要同时做三件事:调研竞品新功能、修复昨晚测试报的 bug、写一份周报。如果你只能一件一件来,一上午就过去了。如果你的 Agent 也只能一件一件来,效率和你自己动手差不多。

Hermes Agent 的 delegate_task 工具改变了这个局面。它让你像管理一个小团队一样管理你的 AI Agent——分配任务、设定上下文、指定工具集,然后放手让子 Agent 并行工作。你(或者说你的主 Agent)只需要等待结果汇总。

这篇教程会带你从零掌握 delegate_task 的全部用法,包括:单任务委托、并行批处理、代码审查、多文件重构、以及最常见的踩坑场景。

delegate_task 是什么

delegate_task 是 Hermes Agent 内置的工具之一。它会在后台启动独立的子 Agent 实例,每个子 Agent 拥有:

  • 完全隔离的对话上下文:子 Agent 不知道父 Agent 之前聊过什么,只能看到你传过去的 goalcontext
  • 受限的工具集:你可以精确控制子 Agent 能用哪些工具(web、terminal、file 等)
  • 独立的终端会话:每个子 Agent 有自己的工作目录和 shell 环境
  • 最终摘要回传:子 Agent 完成工作后,只有结构化摘要回到父 Agent 上下文,中间的几十次工具调用不会污染父 Agent 的上下文窗口

默认最多 3 个子 Agent 并发运行,可以通过配置调高(没有硬上限)。

快速上手:单任务委托

最简单的用法——把一件事交给子 Agent,你继续做别的:

delegate_task(

    goal="Debug why tests fail",

    context="Error: assertion in test_foo.py line 42",

    toolsets=["terminal", "file"]

)

这里有两个关键参数:

goal:一句话描述要完成什么。子 Agent 的系统提示会围绕这个目标构建。

context:子 Agent 需要的所有上下文。文件路径、错误信息、项目结构、约束条件——全部写在这里。子 Agent 对父 Agent 的历史对话一无所知,漏掉任何信息都会导致它"瞎猜"。

常见错误

# ❌ 错误:context 太空泛,子Agent根本不知道"the error"是指什么

delegate_task(goal="Fix the error")

# ✅ 正确:把完整的错误信息和上下文传过去

delegate_task(

    goal="Fix the TypeError in api/handlers.py",

    context="""The file api/handlers.py has a TypeError on line 47:

'NoneType' object has no attribute 'get'.

The function process_request() receives a dict from parse_body(),

but parse_body() returns None when Content-Type is missing.

The project is at /home/user/myproject and uses Python 3.11."""

)

踩坑提醒:新手最容易犯的错误就是把 context 写得太简略。记住——子 Agent 是"失忆"的,它不知道你刚才在聊什么。文件名、行号、错误堆栈、项目路径,能写多详细就写多详细。

进阶实战:并行批处理

这才是 delegate_task 真正发光的地方。一次性派发多个任务,它们会并行执行:

delegate_task(tasks=[

    {

        "goal": "Research the current state of WebAssembly in 2026",

        "context": "Focus on: browser support, non-browser runtimes (Wasmtime, Wasmer), WASI progress, cloud/edge use cases",

        "toolsets": ["web"]

    },

    {

        "goal": "Research RISC-V server chip adoption in 2026",

        "context": "Focus on: server chips shipping now, cloud providers adopting, software ecosystem maturity",

        "toolsets": ["web"]

    },

    {

        "goal": "Fix the build error in the CI pipeline",

        "context": "The project is at /home/user/myapp. CI log shows 'ModuleNotFoundError: No module named 'src.utils'' in the test step. Check setup.py and imports.",

        "toolsets": ["terminal", "file"]

    }

])

三个任务同时启动:

  • 子Agent A 在搜索 WebAssembly 最新动态
  • 子Agent B 在研究 RISC-V 芯片进展
  • 子Agent C 在修 CI 构建错误

3 分钟后,父 Agent 收到三份结构化摘要,可以继续下一步——比如基于前两份研究写报告,同时确认 CI 已修复。

实战场景一:代码安全审查

代码审查是最适合 delegate_task 的场景——让一个"不带偏见"的新 Agent 审视你的代码:

delegate_task(

    goal="Review the authentication module for security issues and fix any found",

    context="""Project at /home/user/webapp.

Auth module files: src/auth/login.py, src/auth/jwt.py, src/auth/middleware.py.

The project uses Flask, PyJWT, and bcrypt. Python 3.11.

Focus on: SQL injection, JWT validation, password handling, session management.

Fix any issues found and run the test suite (pytest tests/auth/ -v).""",

    toolsets=["terminal", "file"]

)

子 Agent 会:

  1. 逐个读取 auth 模块文件
  2. 检查 SQL 注入风险、JWT 验证逻辑、密码哈希方式
  3. 修复发现的问题
  4. 运行测试套件确认没有引入新 bug
  5. 返回完整的审查摘要

这在真实团队中的价值在于:你不需要另一个工程师来做 code review,子 Agent 就是一个免费的审查员。

delegate_task 四大实战场景:安全审查、方案对比、代码重构、并行拆分▲ delegate_task 四大实战场景:安全审查、方案对比、代码重构、并行拆分

实战场景二:多方案对比评估

面对技术选型,让三个子 Agent 各自深入研究一种方案,然后你来做决策:

# 在主Agent对话中说:

"我需要为 Django 项目添加全文搜索。请用 delegate_task 并行评估三种方案:

1. PostgreSQL tsvector(内置)

2. Elasticsearch via django-elasticsearch-dsl

3. Meilisearch via meilisearch-python

对每种方案评估:搭建复杂度、查询能力、资源消耗、维护成本。最后给出推荐。"

Hermes 主 Agent 会自动构造三个 delegate_task 调用,每个子 Agent 独立研究一种方案。因为它们互不干扰,每个评估都是独立的,不存在"先入为主"的问题。

父 Agent 收到三份摘要后,综合对比给出推荐。这个过程在传统团队里需要开一个小时的会,在这里只需要 5 分钟。

实战场景三:大规模代码重构

当你面对"把整个 src/ 目录里的 print() 替换成 logging"这种机械但容易出错的任务时:

delegate_task(

    goal="Refactor all Python files in src/ to replace print() with proper logging",

    context="""Project at /home/user/myproject.

Use the 'logging' module with logger = logging.getLogger(__name__).

Replace print() calls with appropriate log levels:

- print(f"Error: ...") -> logger.error(...)

- print(f"Warning: ...") -> logger.warning(...)

- print(f"Debug: ...") -> logger.debug(...)

- Other prints -> logger.info(...)

Don't change print() in test files or CLI output scripts.

Run pytest after to verify nothing broke.""",

    toolsets=["terminal", "file"]

)

子 Agent 会遍历所有 Python 文件,识别 print() 调用,按规则替换为对应的 logging 级别,然后运行测试。关键是——这些中间步骤的几十行输出不会塞满你的上下文窗口,最终你只看到:"重构完成,修改了 23 个文件,127 处替换,所有测试通过。"

实战场景四:拆分重构到多个子Agent

对于大型重构,可以把不同模块分给不同子 Agent 并行处理:

delegate_task(tasks=[

    {

        "goal": "Refactor all API endpoint handlers to use the new response format",

        "context": """Project at /home/user/api-server.

Files: src/handlers/users.py, src/handlers/auth.py, src/handlers/billing.py

Old format: return {"data": result, "status": "ok"}

New format: return APIResponse(data=result, status=200).to_dict()

Import: from src.responses import APIResponse

Run tests after: pytest tests/handlers/ -v""",

        "toolsets": ["terminal", "file"]

    },

    {

        "goal": "Update all client SDK methods to handle the new response format",

        "context": """Project at /home/user/api-server.

Files: sdk/python/client.py, sdk/python/models.py

Old parsing: result = response.json()["data"]

New parsing: same key but add status code checking

Also update sdk/python/tests/test_client.py""",

        "toolsets": ["terminal", "file"]

    }

])

两个子 Agent 同时工作——一个改后端 handler,一个改客户端 SDK。传统做法是先改后端再改客户端,串行耗时翻倍。

子Agent上下文管理:你必须知道的事

这是整个 delegate_task 中最容易被忽视但最重要的部分。

子 Agent 的上下文是完全空白的。它不记得:

  • 你之前和主 Agent 讨论过的内容
  • 你项目的目录结构
  • 你用的编程语言版本
  • 任何前置讨论

所以,context 参数不是你"顺便提一句"的地方——它是子 Agent 的全部信息来源

context 的铁律:

✅ 文件路径:完整绝对路径

✅ 错误信息:完整堆栈,不要摘要

✅ 项目技术栈:语言版本、框架、关键依赖

✅ 约束条件:什么不能改、什么特殊处理

✅ 验证方式:跑什么测试、检查什么输出

❌ "修一下那个 bug"——哪个bug?

❌ "改一下格式"——什么格式?

❌ "和上次一样"——子Agent没有"上次"

配置技巧

子Agent上下文管理铁律:错误做法 vs 正确做法对比▲ 子Agent上下文管理铁律:错误做法 vs 正确做法对比

调整并发数

默认 3 个并发。如果你的任务都很轻量(比如都是纯搜索),可以考虑调高:

# ~/.hermes/config.yaml

delegation:

  max_concurrent_children: 5

环境变量方式:DELEGATION_MAX_CONCURRENT_CHILDREN=5

为子Agent指定更便宜的模型

重任务留给主 Agent,轻任务(搜索、简单格式转换)派给便宜的模型:

# ~/.hermes/config.yaml

delegation:

  model: "google/gemini-flash-2.5"

这样你的研究类子 Agent 用 Gemini Flash(极低成本),代码修改类子 Agent 还是用主 Agent 的模型。

常见踩坑

坑1:context 写得太简略

症状:子 Agent 返回"I cannot find the file"或"unable to determine the error"。

解法:context 里必须包含文件路径、错误堆栈、项目根目录。宁可多写不要少写。

坑2:忘记指定 toolsets

症状:子 Agent 返回"I don't have access to the tools needed"。

解法:需要读文件就加 "file",需要执行命令就加 "terminal",需要搜索就加 "web"

坑3:并发任务访问同一文件

症状:两个子 Agent 同时改同一个文件,后完成的覆盖了先完成的。

解法:拆分任务时确保不同子 Agent 操作不同文件。如果真的需要改同一文件,用单任务模式而非并行批处理。

坑4:子Agent上下文污染主Agent

不用担心。delegate_task 只返回结构化摘要,子 Agent 中间的几十次工具调用完全不会进入父 Agent 的上下文窗口。这也是它的核心设计优势之一。

坑5:把 delegate_task 和 cron job 搞混

delegate_task 是把一个任务派给子 Agent 立即执行,适合需要等结果的场景(代码审查、研究、重构)。

terminal(background=True, notify_on_complete=True) 是启动一个后台进程,适合长时间运行的构建、部署、测试套件。

cron 是定时任务,适合每天自动执行的重复工作(日报、数据采集、备份)。

三者用途不同,不要混用。

什么时候不该用 delegate_task

虽然 delegate_task 很强大,但不是所有场景都适合:

  • 简单的一行命令terminal("ls -la") 比 delegate_task 快得多
  • 需要紧跟对话流的任务:子 Agent 不知道你在聊什么,如果任务高度依赖对话历史,直接在父 Agent 里做
  • 需要人工确认的操作:子 Agent 不会中途问你"这样可以吗",它只会按指令执行到底。如果有决策需要你参与,不要委托
  • 需要读写父Agent上下文记忆的任务:子 Agent 无法访问 memories/ 目录

完整的每日工作流示例

假设你是一个独立开发者,每天早上需要:

  1. 查看 GitHub Issues 和 PR 动态
  2. 阅读 AI 行业最新新闻
  3. 检查生产环境日志是否有异常

用 delegate_task 一步搞定:

delegate_task(tasks=[

    {

        "goal": "Check GitHub notifications and summarize important items",

        "context": "Repository: myorg/myapp. Check open issues, recent PRs, and any mentions. Summarize in 5 bullet points max.",

        "toolsets": ["web"]

    },

    {

        "goal": "Catch up on AI industry news from the last 24 hours",

        "context": "Focus on: LLM releases, AI agent frameworks (Hermes Agent, OpenClaw, Claude Code), MCP ecosystem updates, AI regulation news.",

        "toolsets": ["web"]

    },

    {

        "goal": "Check production logs for errors in the last 12 hours",

        "context": "SSH into prod-server (ssh prod-server). Check /var/log/app/error.log for entries in the last 12 hours. Summarize any critical errors.",

        "toolsets": ["terminal"]

    }

])

3 分钟后你得到三份报告,一天的工作优先级一目了然。

总结

delegate_task 是 Hermes Agent 从"一个聪明的助手"进化为"一个能管理团队的操作系统"的关键工具。核心要点:

  1. context 是子Agent的全部世界——写得越详细,结果越好
  2. 并行批处理是效率倍增器——3 个任务同时跑,不是 3 倍速,而是 3 个独立工作者
  3. 子Agent不污染父Agent上下文——中间步骤静默执行,只回传摘要
  4. 为不同任务选择不同模型——省钱的同时不牺牲质量
  5. 划分好任务边界——不同子Agent操作不同文件,避免冲突

动手试试:打开 Hermes Agent 终端,输入"帮我把 src/ 目录所有 Python 文件的 TODO 注释收集到一个文件里",看看 delegate_task 是怎么自动分解和执行这个任务的。


*本文由AI辅助创作,经人工审核编辑发布*

#AI创业 #Agent工坊 #HermesAgent #多Agent协作 #一人公司

本文由AI辅助创作,经人工审核编辑发布