📄 文档管理系统

← 返回列表

Hermes /goal 深度讲解:让AI自己持续干活,你只管定目标

article #hermes #ai-agent #工具教程 📅 创建:2026-05-15 18:52:51 🔄 更新:2026-05-15 10:53:02
👁️ 预览 & 复制到公众号 ✏️ 编辑

title: Hermes /goal 深度讲解:让AI自己持续干活,你只管定目标
description: 深入解析 Hermes Agent 的 /goal 功能——持续目标、auto-resume、subgoal 子目标机制,以及为什么它比"多轮对话催它继续"更优雅。


Hermes /goal 深度讲解:让AI自己持续干活,你只管定目标

01 被"继续"这个词折磨过的举手

你应该有过这种经历:让AI写一段代码,它给你了;你让它改,它改了;你让它"继续完善",它又给你一版;然后你再说"还是不对,继续",然后继续继续……

每一步都要你说一句,它才动一步。这不叫"AI干活",这叫"你指挥AI干活"。

Hermes 的 /goal 功能,就是来解决这个问题的。

你只需要做一件事:定目标。然后 Hermes 会自己持续工作下去,不需要你一遍遍地喊"继续"。


02 /goal 是什么

简单说:/goal 是"目标"命令,设置一个长期任务,Hermes 会自动持续推进,直到完成。

它的完整描述是(来源:hermes_cli/commands.py):

Set a standing goal Hermes works on across turns until achieved

支持子命令:

命令 作用
/goal <text> 设置目标,立刻开始执行
/goal/goal status 查看当前目标状态
/goal pause 暂停,不清除目标
/goal resume 继续(重置轮数计数器)
/goal clear 清除目标

03 它是怎么做到的——Ralph Loop 机制

这是最核心的部分。

/goal 的实现叫做"Ralph Loop",灵感来自 OpenAI Codex CLI 0.128.0 的同名功能(官方文档明确致谢)。但 Hermes 这里是独立实现。

整个机制分为三层:

第一层:Agent 执行

你设置 /goal 之后,Hermes 像正常对话一样开始工作,只是这个"目标"会一直"挂"在上下文里。

第二层:Judge 评判

每轮执行完毕后,Hermes 会调用一个辅助模型(Judge)来判断:"目标达成了吗?"

Judge 会收到:
- 目标文本
- Agent 最近的回复(最近约 4KB 内容)
- 一个系统提示,要求它返回严格 JSON 格式:{"done": true/false, "reason": "原因"}

Judge 的判断规则非常保守(来源:JUDGE_SYSTEM_PROMPThermes_cli/goals.py):

目标只有在以下情况才视为 DONE:
- 回复明确确认目标已完成
- 回复清楚显示最终交付物已产生
- 回复说明目标不可实现/被阻塞(也视为 DONE,避免浪费预算)

第三层:自动继续或停止

根据 Judge 的判断:

if done == true    停止,告诉用户"✓ Goal achieved"
if done == false   自动注入 continuation promptHermes 继续执行下一轮

这个 continuation prompt 长这样(来源:CONTINUATION_PROMPT_TEMPLATEhermes_cli/goals.py):

[Continuing toward your standing goal]
Goal: <你的目标>

Continue working toward this goal. Take the next concrete step.
If you believe the goal is complete, state so explicitly and stop.
If you are blocked and need input from the user, say so clearly and stop.

整个循环就是这样:

执行 → Judge评判 → 继续/停止 → 执行 → Judge评判 → ...

整个过程不需要你说一个字。


04 为什么要用 Judge 单独评判

你可能会问:让主模型自己判断"做完了没有"不就行了?为什么还要单独调用一个 Judge?

有道理,但 Hermes 选择了分离设计,原因有两点:

第一,主模型可能"当局者迷"

大模型有个特点:它倾向于认为自己在做的事很有价值。让它自己判断"做完了吗",它可能永远说"还没呢,再来一轮"。用一个独立的小模型做 judge,可以更客观。

第二,不浪费主模型的 token 和缓存

Judge 是一个轻量调用(~200 output tokens),每轮只跑一次。用小模型处理这个 side task,主模型的上下文缓存完全不受影响。如果让主模型同时做 judge 和执行,两件事混在一起,prompt 缓存策略会复杂很多。

默认情况下 Judge 会复用主模型,但你可以单独配置一个便宜的模型来当 Judge(后面会讲)。


05 子目标:给目标加条件

/goal 支持一个兄弟命令:/subgoal

/subgoal 允许你在目标运行时追加额外条件

举例子:

/goal 写一个用户注册 API
/subgoal 必须包含邮箱格式验证
/subgoal 密码要求至少8位且有数字和字母

设置了子目标之后:

源码里处理子目标的逻辑(hermes_cli/goals.py):

CONTINUATION_PROMPT_WITH_SUBGOALS_TEMPLATE = (
    "[Continuing toward your standing goal]
"
    "Goal: {goal}

"
    "Additional criteria the user added mid-loop:
"
    "{subgoals_block}

"
    "Continue working toward the goal AND all additional criteria."
)

Judge 的提示词也变成了检查 ALL 条件(来源:JUDGE_USER_PROMPT_WITH_SUBGOALS_TEMPLATE):

For each numbered criterion above, find concrete evidence
in the agent's response that the criterion is satisfied.
If ANY criterion lacks specific evidence, return CONTINUE.

06 状态管理与持久化

四个状态

状态 含义
active 目标进行中,自动继续
paused 暂停,需要你手动 resume 或轮数耗尽
done 完成
cleared 清除

什么情况会暂停?

  1. 轮数耗尽max_turns 默认 20,每轮执行完计数 +1。20 轮用完后自动暂停。
  2. Judge 模型持续输出非 JSON:连续 3 轮 Judge 返回不可解析的内容,触发自动暂停,并提示你换一个 Judge 模型。
  3. 你手动暂停/goal pause

持久化:关掉电脑明天继续

目标状态存在 SessionDB 的 state_meta 表里,key 是 goal:<session_id>

这意味着:

这和多轮对话的"上下文续接"不一样——普通对话续接的是聊天历史,而 /goal 续接的是任务执行状态,包括已用轮数、目标内容、子目标列表。


07 配置参数

~/.hermes/config.yaml 里:

goals:
  # 最大自动继续轮数,默认 20
  max_turns: 20

指定 Judge 模型

默认 Judge 复用主模型。也可以单独指定一个便宜的模型:

auxiliary:
  goal_judge:
    provider: openrouter
    model: google/gemini-3-flash-preview

官方建议用便宜快速的模型,因为 Judge 调用很小(~200 tokens),执行快且成本低。


08 实际效果演示

官方文档里的完整示例(website/docs/user-guide/features/goals.md):

You: /goal Create four files /tmp/note_{1..4}.txt, one per turn

   Goal set (20-turn budget): Create four files...

Hermes: Creating /tmp/note_1.txt
  💻 echo "1" > /tmp/note_1.txt
  Created /tmp/note_1.txt.

   Continuing (1/20): Only 1 of 4 files created; 3 remain.

Hermes: [Continuing toward your standing goal]
  💻 echo "2" > /tmp/note_2.txt
  Created /tmp/note_2.txt.

   Continuing (2/20): 2 of 4 files created; 2 remain.

...第3轮第4轮同理

Hermes: [Continuing toward your standing goal]
  💻 echo "4" > /tmp/note_4.txt
  All four files created.

   Goal achieved: All four files were created.

4 个文件,1 次 /goal,0 次"继续"。


09 适用场景 vs 不适用场景

适合用 /goal 的场景

核心特征:需要多轮迭代、目标明确、不需要你实时盯着。

不适合的场景


10 Fail-Open 设计哲学

如果 Judge 报错了呢?

Hermes 的回答是:继续干活。

源码里(hermes_cli/goals.py):

This is deliberately fail-open: any error returns ("continue", "...")
so a broken judge doesn't wedge progress.

网络抖动、API 超时、Judge 模型不可用——一律视为"继续",不打断目标推进。

真正的保底是轮数预算。 即使 Judge 完全坏了,20 轮之后也会自动暂停,不会无限燃烧 token。


写在最后

/goal 的本质,是把"人指挥AI一步一动"变成了"人定目标,AI自己跑"。

背后的 Ralph Loop 机制——执行 → 独立评判 → 自动继续——让 AI 真正变成了一个持续干活的主体,而不是一个你每句话都要回复的对话机器。

如果你经常觉得"这个任务明明很简单但要催 AI 七八遍才做完",试试 /goal,可能就一回合的事了。

你用过 /goal 吗?有没有遇到 Judge 判断不准的情况?评论区聊聊。

💬 评论区

加载中...