ralph-loop。
核心思路
Ralph Loop 不再只是“重试直到出现<promise>DONE</promise>”。完成标记现在只表示模型的收尾意图,不代表任务已经被证明完成。
默认情况下,只有同时满足下面两个条件,Ralph Loop 才接受完成:
- 最新 AI 回答包含
<promise>DONE</promise>。 - 最新可信验证证据已经通过。
Goal Slash Command
当当前 agent 连接了 Ralph Loop 时,中间件会暴露一个 runtime slash command:RalphLoopMiddleware.meta.slashCommands 声明。下发给 composer 的 runtime command 类型是 insert_invocation,所以前端只插入 /goal ...,不会在客户端展开完整 prompt 模板。
默认 /goal 模板要求智能体遵循:
完成标记
Ralph Loop 仍然使用这个标记:验证证据
Ralph Loop 会从配置的 verifier tools 中收集最近的ToolMessage。默认可信验证工具列表是:
- 工具名
- tool call id
- 命令内容,如果存在
- 状态,
pass或fail - 输出内容
- 观察时间
工作方式
| 钩子 | 行为 |
|---|---|
beforeAgent | 启动或恢复 Ralph Loop 状态。除非用户开始了新目标,或之前运行已经进入终态,否则 active 状态会跨 turn 保留。 |
wrapModelCall | 向系统消息追加验证优先的完成规则。重试时发送紧凑续跑提示,而不是完整历史消息。 |
afterModel | 提取验证证据,检查完成标记,用验证状态门控完成;然后决定接受完成、继续循环,或在预算耗尽时停止。 |
- 原始目标
- 当前迭代次数
- 紧凑运行摘要
- 上一次验证证据
- 续跑原因
- 下一步期望行为
Plan -> Act -> Verify -> Reflect -> Retry,修复失败验证,在缺少验证证据时先运行验证器,并且只有在验证契约满足后才用完成标记收尾。
如果原始用户消息包含结构化内容片段,Ralph Loop 会把这些片段保留在续跑提示之后。
配置项
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
maxIterations | number | 20 | 最大自动验证优先续跑轮次。 |
requireVerifier | boolean | true | 接受完成标记前,是否要求可信验证证据通过。 |
verifierToolNames | string[] | ["sandbox_shell"] | 这些工具名对应的 ToolMessage 会被视为可信验证证据。 |
verifierInstructions | string | "" | 关于智能体应如何验证目标的附加说明。 |
maxRuntimeSummaryChars | number | 4000 | 续跑提示中携带的紧凑运行摘要最大长度。 |
运行时状态
Ralph Loop 会保存以下状态字段:| 字段 | 说明 |
|---|---|
ralphLoopIteration | 当前续跑迭代次数。 |
ralphLoopOriginalHumanContent | 原始用户消息内容或结构化消息片段。 |
ralphLoopOriginalTaskText | 从 runtime human input 中提取到的原始纯文本任务。 |
ralphLoopStatus | 当前运行状态:active、completed、blocked 或 budget_exhausted。 |
ralphLoopRunId | 当前 Ralph Loop 运行标识。 |
ralphLoopRuntimeSummary | 跨清理重试 turn 携带的紧凑摘要。 |
ralphLoopLastVerifier | 最近一次可信验证证据。 |
ralphLoopStopReason | 循环停止或继续的原因。 |
completed、blocked 和 budget_exhausted。当用户开始新目标,或上一次运行已经是终态时,会启动新的运行。
预算耗尽
当达到maxIterations,但验证优先完成契约仍未满足时,Ralph Loop 会停止重试,并在最新回答后追加包含验证信息的提示:
budget_exhausted。
适用场景
当你希望智能体持续工作,直到有外部证据证明目标完成时,可以使用 Ralph Loop:- 需要通过测试的迁移和重构
- 需要 Playwright Interactive 检查的 UI 视觉一致性任务
- 模型容易提前停止的长实现任务
- 有明确验证命令的研究或分析任务
- 比起携带杂乱历史,更适合使用干净续跑提示的任务
/goal 产品界面;它仍然运行在现有 middleware hook 形态内。
排障建议
- 最终回答里看不到
<promise>DONE</promise>:这是正常现象。Ralph Loop 接受完成后会移除该标记。 - 模型说已经完成但仍继续循环:完成标记没有配套通过的可信验证证据。
- 验证输出失败:Ralph Loop 会带着失败上下文继续,让智能体修复根因并再次验证。
- 没有检测到验证器:确认智能体可以访问
verifierToolNames中列出的工具,或为你的验证工具配置对应名称。 - 智能体带预算耗尽提示停止:提高
maxIterations,明确目标,或查看最后一次验证证据判断阻塞点。