Skip to content

第四章 子代理与并行编排

一个人干不过来?让墨鱼分身——同时处理多个独立任务,速度翻倍。

两种并行机制

Hermes Agent 提供两种并行处理方式:

机制工具适合场景
子代理delegate_task需要推理的复杂任务
脚本批量execute_code机械式多步骤操作

选哪个?

需要推理/决策? ──→ delegate_task(子代理)
纯机械操作?    ──→ execute_code(脚本)
3个以上工具调用且有处理逻辑? ──→ execute_code
单次工具调用?  ──→ 直接调用工具
需要用户交互?  ──→ 都不行,自己做

delegate_task 子代理

基本原理

┌─────────────────────────────────┐
│          主 Agent(你对话的)      │
│                                  │
│   delegate_task ──→ 子 Agent 1  │ → 研究主题 A
│   delegate_task ──→ 子 Agent 2  │ → 研究主题 B
│   delegate_task ──→ 子 Agent 3  │ → 写代码 C
│                                  │
│   ← 汇总所有子 Agent 结果        │
│   ← 整合后回复你                 │
└─────────────────────────────────┘

每个子代理有:

  • 独立的对话上下文
  • 独立的终端会话
  • 独立的工具集
  • 只有最终摘要返回给主 Agent

两种模式

单任务模式:

python
delegate_task(
  goal="分析 hermes-agent 仓库的代码统计",
  context="仓库路径: /path/to/hermes-agent",
  toolsets=["terminal", "file"]
)

批量模式(并行):

python
delegate_task(
  tasks=[
    {"goal": "研究 Python asyncio", "context": "..."},
    {"goal": "研究 Rust tokio", "context": "..."},
    {"goal": "研究 Go goroutines", "context": "..."}
  ]
)

最多 3 个子代理同时运行。

两个关键参数

参数说明
goal任务目标(具体、自包含)
context背景信息(文件路径、错误消息、约束)

WARNING

子代理没有你对话的记忆!必须通过 context 传递所有必要信息。


execute_code 脚本批量

基本原理

execute_code 在 Python 沙箱中运行脚本,可以调用 Hermes 工具:

python
from hermes_tools import terminal, read_file, write_file, search_files

# 批量操作
files = search_files(pattern="*.py", target="files", path="./src")
for f in files["matches"][:10]:
    content = read_file(path=f)
    # 处理...

特性

特性说明
内置工具terminal, read_file, write_file, search_files, patch 等
内置函数json_parse, shell_quote, retry
限制5 分钟超时,50KB stdout 上限,最多 50 次工具调用

适用场景

  • 需要循环处理 N 个文件
  • 需要条件分支(if/else)
  • 需要在工具调用间做数据处理
  • 需要重试逻辑

实战案例

案例 1:并行研究

你:帮我对比分析三个 AI Agent 框架:
    Hermes Agent、OpenAI Agents SDK、LangGraph。
    从架构设计、工具系统、部署方式三个维度对比。

Agent 会创建 3 个子代理并行研究,汇总后生成对比表。

案例 2:批量文件处理

你:把 src/ 目录下所有 Python 文件的 docstring 翻译成英文

Agent 使用 execute_code 循环处理,避免逐个调用的开销。

案例 3:代码审查 + 测试并行

你:审查这个 PR 的代码变更,同时运行测试套件
┌─ 子代理1:代码审查(加载 github-code-review 技能)

├─ 子代理2:运行测试(终端执行 pytest)

└─ 主代理:汇总两份报告

案例 4:多仓库同步

你:检查我的 5 个活跃项目,每个项目:
    1. 检查是否有未提交的变更
    2. 检查是否落后于远程
    3. 检查 CI 状态

用 execute_code 循环遍历 5 个仓库,一次性收集所有信息。


性能与限制

delegate_task 限制

限制
最大并行数3
最大工具调用轮次50(可配置)
上下文隔离完全隔离
用户交互不支持

execute_code 限制

限制
执行超时5 分钟
stdout 上限50KB
工具调用上限50 次
前台执行不支持后台

何时不用并行

  • 单次工具调用 → 直接调用
  • 任务有前后依赖 → 串行执行
  • 需要用户反馈 → 亲自处理

高级模式

ACP 子代理

可以让子代理使用不同的 AI 模型:

python
delegate_task(
  goal="深度代码审查",
  acp_command="claude",     # 使用 Claude Code 作为子代理
  acp_args=["--acp", "--stdio", "--model", "claude-opus-4"]
)

子代理工具集控制

限制子代理可用的工具,提高安全性:

python
delegate_task(
  goal="搜索论文",
  toolsets=["web"],          # 只给 web 搜索工具
  max_iterations=10          # 限制最多 10 轮
)

嵌套限制

子代理不能再创建子代理(防止无限递归)。但子代理可以使用 execute_code。


最佳实践

  1. goal 要具体:不要说"帮我做研究",要说"分析 xxx 仓库的代码统计,包括 LOC、语言分布、文件数量"
  2. context 要完整:包含所有文件路径、URL、错误消息
  3. 控制并行度:最多 3 个,间隔适当,避免 API 限流
  4. 结果汇总:子代理只返回摘要,主 Agent 负责整合

深入阅读


基于 CC BY-NC-SA 4.0 发布 | GitHub