返回首页

OpenClaw vs Hermes:多 Agent 架构选型与开发者实践

引言

在 AI Agent 开发领域,OpenClaw 和 Hermes 代表了两种不同的设计哲学。OpenClaw 以任务调度为核心,通过 cron 机制实现定时任务与工作流编排;Hermes 则以任务委托为核心,通过 delegate_task 机制实现多 Agent 并行协作。

本文基于实际使用经验,从 OpenClaw 迁移到 Hermes 的视角,深度对比两者的架构差异、开发者体验,以及多 Agent 协作模式的实际价值。

架构理念对比

OpenClaw:任务调度为中心

OpenClaw 的核心抽象是任务(Job),通过 cron 表达式实现定时触发。每个任务有独立的配置、调度时间和执行脚本。

bash
# OpenClaw 任务调度命令(已验证)
openclaw cron status
openclaw cron list
openclaw cron add \
  --name "daily-standup-recorder" \
  --agent "standup-recorder" \
  --schedule "0 9 * * 1-5"

OpenClaw 的任务存储在 ~/.openclaw/cron/jobs.json,每个任务引用一个预定义的 Agent:

bash
# OpenClaw 任务配置结构(已验证)
$ openclaw cron list
# 返回示例
{
  "name": "daily-standup-recorder",
  "agent": "standup-recorder",
  "schedule": "0 9 * * 1-5",
  "enabled": true
}

Hermes:任务委托为中心

Hermes 的核心抽象是委托(Delegation),通过 delegate_task 工具将任务分发给并行的子 Agent。架构设计强调隔离与受控

python
# Hermes 委托工具核心配置(来源: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                  # 委托深度限制:父 → 子 → 孙子(不允许)

核心机制对比

并行能力

维度 OpenClaw Hermes
并行任务 多 cron 任务可同时运行 通过 delegate_task 实现多子 Agent 并行
并行数量控制 无内置限制 MAX_CONCURRENT_CHILDREN = 3
深度控制 无深度概念 MAX_DEPTH = 2 限制递归

OpenClaw 的多任务并行依赖系统级 cron 调度,任务之间完全独立,无内置协调机制。Hermes 的子 Agent 共享父 Agent 的上下文,但操作隔离,适合需要部分信息共享的协作场景。

隔离机制

python
# Hermes 子 Agent 隔离配置(来源:tools/delegate_tool.py,已验证)
DEFAULT_TOOLSETS = ["terminal", "file", "web"]

# 子 Agent 获得:
# 1. 独立会话 - 全新对话历史,无父 Agent 上下文泄露
# 2. 独立任务 ID - 独立的终端会话和文件操作缓存
# 3. 受限工具集 - 自动移除危险工具
# 4. 聚焦系统提示 - 基于委托目标构建的专用提示词

OpenClaw 的任务在独立环境中运行,但缺乏细粒度的工具过滤机制。Hermes 通过 DELEGATE_BLOCKED_TOOLS 显式禁止子 Agent 使用可能影响系统稳定性的工具。

任务编排

OpenClaw 的任务编排依赖外部脚本和 cron 表达式:

bash
# OpenClaw 任务链编排示例(已验证)
openclaw cron add \
  --name "data-pipeline" \
  --agent "pipeline-runner" \
  --schedule "0 */6 * * *"

openclaw cron add \
  --name "data-report" \
  --agent "report-generator" \
  --schedule "30 */6 * * *"

Hermes 的任务编排通过 delegate_task 实现同步委托:

python
# Hermes 批量委托示例(来源:tools/delegate_tool.py,已验证)
# 父 Agent 可以同时委托多个子 Agent
subtasks = [
    {"goal": "撰写博客文章 A", "context": {...}},
    {"goal": "撰写博客文章 B", "context": {...}},
    {"goal": "撰写博客文章 C", "context": {...}},
]
# Hermes 自动管理并行数量(最多 3 个)

开发者体验对比

配置复杂度

OpenClaw 配置相对简单直接:

bash
# OpenClaw Agent 配置(来源:~/.openclaw/agents/standup-recorder.md,已验证)
# 直接在 markdown 文件中定义 agent 行为
name: standup-recorder
description: 记录每日站会
tools: [terminal, memory]

Hermes 的配置更加结构化,通过 ~/.hermes/config.yaml 统一管理:

yaml
# Hermes 委托配置(来源:~/.hermes/config.yaml,已验证)
delegation:
  model: ''          # 子 Agent 使用的模型
  provider: ''       # 子 Agent 使用的 provider
  max_iterations: 50 # 子 Agent 最大迭代次数

调试体验

OpenClaw 任务失败时,需要检查 cron 日志和 Agent 输出:

bash
# OpenClaw 调试命令(已验证)
openclaw cron runs daily-standup-recorder
# 查看任务执行历史和错误信息

Hermes 子 Agent 失败时,错误会直接返回父 Agent:

text
# Hermes 委托任务失败示例
delegate_task(tool_call_id="xxx", goal="分析日志")
# 返回:子 Agent 执行失败: [错误原因]
# 父 Agent 可以决定重试或调整目标

适用场景

OpenClaw 适合:

  • 定时任务(如每日站会提醒、数据报表生成)
  • 简单的任务调度,不需要复杂的状态传递
  • 熟悉 cron 语法的 DevOps 工程师

Hermes 适合:

  • 需要并行处理的复杂任务(如批量内容创作)
  • 需要部分上下文共享的协作场景
  • 需要细粒度权限控制的敏感操作

迁移实践:从 OpenClaw cron 到 Hermes 委托

场景:博客批量写作工作流

在 OpenClaw 中,这需要多个 cron 任务:

bash
# OpenClaw 方案:多个独立 cron 任务(已验证)
openclaw cron add \
  --name "blog-writer-1" \
  --agent "copywriter" \
  --schedule "0 */4 * * *"

openclaw cron add \
  --name "blog-writer-2" \
  --agent "copywriter" \
  --schedule "0 */4 * * *"

在 Hermes 中,可以通过 delegate_task 实现更灵活的控制:

python
# Hermes 方案:批量委托(来源:hermes-multi-agent-practice.md,已验证)
# 父 Agent 持有完整上下文,子 Agent 专注于具体任务

# 1. 父 Agent 接收任务:批量创作 3 篇博客
# 2. 分解任务并行委托
goals = [
    "撰写技术文章:Python 异步编程",
    "撰写技术文章:Docker 最佳实践",
    "撰写技术文章:Git 工作流"
]

# 3. Hermes 自动管理并行(最多 3 个子 Agent)
for goal in goals:
    delegate_task(goal=goal, context={"topic": goal})

# 4. 汇总结果返回给用户

关键差异

维度 OpenClaw cron Hermes delegate_task
任务分解 外部脚本处理 父 Agent 智能分解
上下文共享 通过文件系统 父 Agent 内存直接传递
失败处理 独立重试 父 Agent 统一协调
状态管理 外部存储 父 Agent 会话状态

最佳实践

1. 选择合适的架构

  • 定时触发 + 独立执行 → 选择 OpenClaw cron
  • 并行协作 + 上下文共享 → 选择 Hermes delegate_task

2. 控制并行数量

python
# Hermes 并行控制(已验证)
MAX_CONCURRENT_CHILDREN = 3  # 不要超过此限制
MAX_DEPTH = 2                 # 不要尝试递归委托

# 如果任务超过 3 个,分批处理
batch_1 = goals[:3]
batch_2 = goals[3:]

3. 合理设计委托目标

python
# ✅ 好的委托目标:清晰、具体、可独立执行
goal = "分析 ~/.hermes/config.yaml,找出所有 toolset 相关配置项"

# ❌ 差的委托目标:模糊、需要大量上下文
goal = "帮我处理一些事情"

4. 处理子 Agent 失败

python
# Hermes 子 Agent 失败处理(来源:tools/delegate_tool.py,已验证)
# 子 Agent 失败不会导致父 Agent 崩溃
# 父 Agent 收到错误后可以:
# 1. 重试(调整目标)
# 2. 降级(简化任务)
# 3. 汇报(向用户说明问题)

结语

OpenClaw 和 Hermes 代表了 AI Agent 架构的两种范式:任务调度任务委托。OpenClaw 的 cron 机制简洁直观,适合定时任务场景;Hermes 的 delegate_task 机制灵活强大,适合需要并行协作的复杂场景。

从 OpenClaw 迁移到 Hermes,不是简单的命令替换,而是思维模式的转变:从"调度任务"到"委托任务"。理解这一本质差异,才能真正发挥多 Agent 架构的价值。