引言
在复杂任务场景中,单一 Agent 往往面临能力边界清晰、并发处理受限等问题。Hermes Agent 框架通过 delegate_task 工具提供了完整的多 Agent 协作能力,允许一个父 Agent 将任务委托给多个独立的子 Agent 并行处理。
本文基于 Hermes Agent v0.8.0 的源代码,深入解析其多 Agent 架构的设计理念,并通过实际代码演示批量博客写作这一典型工作流。
Hermes 多 Agent 架构概述
Hermes 的多 Agent 能力由 delegate_task 工具实现,核心设计哲学是隔离与受控。
核心组件
# 来源:tools/delegate_tool.py(已验证)
DELEGATE_BLOCKED_TOOLS = frozenset([
"delegate_task", # 禁止递归委托
"clarify", # 禁止用户交互
"memory", # 禁止写入共享记忆
"send_message", # 禁止跨平台副作用
"execute_code", # 子 Agent 应逐步推理而非写脚本
])
MAX_CONCURRENT_CHILDREN = 3 # 最多 3 个并行子 Agent
MAX_DEPTH = 2 # 委托深度限制:父 → 子 → 孙子(不允许)
DEFAULT_MAX_ITERATIONS = 50
DEFAULT_TOOLSETS = ["terminal", "file", "web"]
隔离机制
每个子 Agent 获得:
- 独立会话:全新对话历史,无父 Agent 上下文泄露
- 独立任务 ID:独立的终端会话和文件操作缓存
- 受限工具集:自动移除危险工具(递归委托、用户交互等)
- 聚焦系统提示:基于委托目标构建的专用提示词
# 来源:tools/delegate_tool.py _build_child_system_prompt()(已验证)
def _build_child_system_prompt(goal, context=None, *, workspace_path=None) -> str:
parts = [
"You are a focused subagent working on a specific delegated task.",
f"YOUR TASK:\n{goal}",
]
if context and context.strip():
parts.append(f"\nCONTEXT:\n{context}")
if workspace_path:
parts.append(f"\nWORKSPACE PATH:\n{workspace_path}")
parts.append("Complete this task using the tools available to you. "
"When finished, provide a clear, concise summary of:\n"
"- What you did\n- What you found or accomplished\n"
"- Any files you created or modified\n- Any issues encountered")
return "\n".join(parts)
单任务委托模式
最简单的用法是将一个独立任务委托给子 Agent:
# 单任务委托示例
result = delegate_task(
goal="分析 ~/.hermes/config.yaml 配置文件,找出所有 toolset 相关配置项",
context="只需分析配置文件,不要修改任何文件",
max_iterations=30
)
父 Agent 等待子 Agent 完成后,获得一个结构化的 JSON 结果:
{
"results": [
{
"task_index": 0,
"goal": "分析配置文件...",
"success": true,
"summary": "找到 3 个 toolset 配置项:hermes-cli, terminal, browser..."
}
]
}
批量并行委托模式
当有多个相互独立的任务时,可以使用批量模式让子 Agent 并行执行:
# 批量委托示例 - 博客写作工作流
result = delegate_task(
tasks=[
{
"goal": "撰写博客文章:测试文章:Hermes 多 Agent 实战",
"context": "标题:测试文章:Hermes 多 Agent 实战\n日期:2026-04-10\n标签:Hermes, 多Agent, 实战\n分类:技术\n项目路径:~/.hermes/projects/zz1blog",
"toolsets": ["terminal", "file"]
},
{
"goal": "验证已完成的博客文章内容真实性",
"context": "检查 content/pending/hermes-multi-agent-practice.md 中的代码块是否与实际源代码一致",
"toolsets": ["terminal", "file", "web"]
},
{
"goal": "更新任务状态并记录工作日志",
"context": "将任务结果记录到 ~/.hermes/teams/code-dream-factory/memory/2026-04-10.md",
"toolsets": ["terminal", "file"]
}
],
max_iterations=50
)
批量模式的核心特性:
- 并行执行:所有子 Agent 同时启动,独立运行
- 进度可视化:父 Agent 实时显示子 Agent 的工具调用进度
- 统一返回:父 Agent 收到包含所有结果的 JSON 数组
实战:代码梦工厂写作工作流
下面通过一个完整的博客写作任务演示多 Agent 的实际应用场景。
任务描述
假设我们需要完成一篇关于 Hermes 多 Agent 实战的博客文章,传统的做法是:
- Agent 独自完成所有工作(调研 → 写稿 → 验证 → 发布)
- 单一 Agent 难以并行处理多个子任务
使用多 Agent 模式后,可以实现流水线并行:
# 完整的博客写作工作流委托
result = delegate_task(
tasks=[
{
"goal": "创作博客文章「测试文章:Hermes 多 Agent 实战」",
"context": """文章信息:
- 标题:测试文章:Hermes 多 Agent 实战
- 日期:2026-04-10
- 发布日期:2026-04-10 14:00:00
- 标签:["Hermes", "多Agent", "实战"]
- 分类:["技术"]
项目路径:~/.hermes/projects/zz1blog
模板路径:~/.hermes/projects/zz1blog/content/template/BLOG_POST_TEMPLATE.md
输出路径:~/.hermes/projects/zz1blog/content/pending/hermes-multi-agent-practice.md
重要要求:
1. 必须先读取模板文件,严格遵循格式
2. 必须验证内容真实性:文章中的代码、配置、命令必须经过实际验证
3. 禁止发布未经验证的内容
4. 每个代码块必须标注验证状态:✅ 已验证 或 ⚠️ 待验证""",
"toolsets": ["terminal", "file", "web"]
},
{
"goal": "执行文章自检流程",
"context": """待检查文件:~/.hermes/projects/zz1blog/content/pending/hermes-multi-agent-practice.md
自检清单:
- [ ] 文章是否覆盖了选题的核心观点?
- [ ] 是否有未经验证的内容混入了正文?
- [ ] 代码块是否都有标注验证状态?
- [ ] 删除了模板底部的"模板提示"说明?
- [ ] 文章内的链接是否真实存在?
- [ ] published 字段是否已填写?""",
"toolsets": ["terminal", "file"]
}
],
max_iterations=50
)
工作流程图
┌─────────────────────────────────────────────────────────────┐
│ 父 Agent │
│ (任务编排与协调) │
└─────────────────────┬───────────────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 子Agent │ │ 子Agent │ │ 子Agent │
│ 写稿 │ │ 验证 │ │ 发布 │
└─────────┘ └─────────┘ └─────────┘
│ │ │
└────────────┴────────────┘
│
┌────────────┴────────────┐
▼ ▼
独立执行,并行处理 完成后汇总结果
注意事项与最佳实践
1. 深度限制不可突破
MAX_DEPTH = 2 意味着子 Agent 无法再委托孙 Agent。这一限制是硬编码的,旨在避免无限递归:
# 来源:tools/delegate_tool.py(已验证)
depth = getattr(parent_agent, '_delegate_depth', 0)
if depth >= MAX_DEPTH:
return json.dumps({
"error": f"Delegation depth limit reached ({MAX_DEPTH}). "
"Subagents cannot spawn further subagents."
})
2. 工具集继承与限制
子 Agent 的工具集是父 Agent 工具集的子集,交集运算确保子 Agent 不会获得父 Agent 没有的能力:
# 来源:tools/delegate_tool.py(已验证)
if toolsets:
# 取交集并移除被blocked的工具
child_toolsets = _strip_blocked_tools([t for t in toolsets if t in parent_toolsets])
3. 凭证隔离
通过 delegation 配置项,可以将子 Agent 路由到不同的模型提供商:
# ~/.hermes/config.yaml
delegation:
model: "openai/gpt-4o-mini"
provider: "openai"
base_url: "https://api.openai.com/v1"
api_key: "sk-..."
4. 并发数限制
MAX_CONCURRENT_CHILDREN = 3 限制了单次批量委托的最大并行数,超出部分会排队等待。
总结
Hermes 的多 Agent 架构通过 delegate_task 工具提供了强大而安全的任务委托能力:
| 特性 | 说明 |
|---|---|
| 隔离执行 | 子 Agent 独立上下文,互不干扰 |
| 深度限制 | 最多 2 层委托,防止无限递归 |
| 工具受限 | 自动移除危险工具子集 |
| 并行处理 | 支持最多 3 个子 Agent 并行 |
| 凭证隔离 | 可配置子 Agent 使用独立模型 |
在实际应用中,多 Agent 模式特别适合独立任务并行处理和流水线式工作流拆分场景,如本文演示的博客写作工作流——将写作、验证、发布拆分为独立子任务并行执行,显著提升效率。