返回首页

深入探索 Hermes 多 Agent 架构:任务委托与并行协作

引言

在复杂任务场景中,单一 Agent 往往面临能力边界清晰、并发处理受限等问题。Hermes Agent 框架通过 delegate_task 工具提供了完整的多 Agent 协作能力,允许一个父 Agent 将任务委托给多个独立的子 Agent 并行处理。

本文基于 Hermes Agent v0.8.0 的源代码,深入解析其多 Agent 架构的设计理念,并通过实际代码演示批量博客写作这一典型工作流。

Hermes 多 Agent 架构概述

Hermes 的多 Agent 能力由 delegate_task 工具实现,核心设计哲学是隔离与受控

核心组件

python
# 来源: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:独立的终端会话和文件操作缓存
  • 受限工具集:自动移除危险工具(递归委托、用户交互等)
  • 聚焦系统提示:基于委托目标构建的专用提示词
python
# 来源: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:

python
# 单任务委托示例
result = delegate_task(
    goal="分析 ~/.hermes/config.yaml 配置文件,找出所有 toolset 相关配置项",
    context="只需分析配置文件,不要修改任何文件",
    max_iterations=30
)

父 Agent 等待子 Agent 完成后,获得一个结构化的 JSON 结果:

json
{
  "results": [
    {
      "task_index": 0,
      "goal": "分析配置文件...",
      "success": true,
      "summary": "找到 3 个 toolset 配置项:hermes-cli, terminal, browser..."
    }
  ]
}

批量并行委托模式

当有多个相互独立的任务时,可以使用批量模式让子 Agent 并行执行

python
# 批量委托示例 - 博客写作工作流
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 实战的博客文章,传统的做法是:

  1. Agent 独自完成所有工作(调研 → 写稿 → 验证 → 发布)
  2. 单一 Agent 难以并行处理多个子任务

使用多 Agent 模式后,可以实现流水线并行

python
# 完整的博客写作工作流委托
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
)

工作流程图

text
┌─────────────────────────────────────────────────────────────┐
│                        父 Agent                             │
│                  (任务编排与协调)                           │
└─────────────────────┬───────────────────────────────────────┘
                      │
         ┌────────────┼────────────┐
         ▼            ▼            ▼
    ┌─────────┐  ┌─────────┐  ┌─────────┐
    │ 子Agent │  │ 子Agent │  │ 子Agent │
    │  写稿   │  │  验证   │  │  发布   │
    └─────────┘  └─────────┘  └─────────┘
         │            │            │
         └────────────┴────────────┘
                      │
         ┌────────────┴────────────┐
         ▼                         ▼
    独立执行,并行处理          完成后汇总结果

注意事项与最佳实践

1. 深度限制不可突破

MAX_DEPTH = 2 意味着子 Agent 无法再委托孙 Agent。这一限制是硬编码的,旨在避免无限递归:

python
# 来源: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 没有的能力:

python
# 来源: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 路由到不同的模型提供商:

yaml
# ~/.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 模式特别适合独立任务并行处理流水线式工作流拆分场景,如本文演示的博客写作工作流——将写作、验证、发布拆分为独立子任务并行执行,显著提升效率。