Ralph Loop:修复代理的健忘症

你知道那种感觉吗:你打开一个新的浏览器标签页要搜索什么东西,但当它加载时,你完全忘记了自己想查什么?

这正是 AI 代理工作一段时间后发生的情况。

本文解释了 Ralph Loop 及其权衡,这将帮助你构建更有效的 AI 代理

1、问题:AI 代理有可怕的记忆

残酷的事实是:AI 模型一次只能"记住"有限量的文本

把它想象成你电脑上的 RAM。

Claude 大约有 200,000 字的空间。GPT-4 大约有 128,000 字。听起来很多,对吧?

错了。

当你要求 AI 代理构建东西时,以下是填满那个记忆的内容:

  • 你的原始指令* 它正在阅读的代码
  • 每一次来回对话
  • 错误消息
  • 它创建的文件
  • 它自己的思考过程

工作 10-15 分钟后,那个记忆就满了。当它满了,AI 开始表现不稳定。它忘记了你要求什么。它重写同一个函数两次。它自相矛盾。

这被称为上下文腐烂你的代理没有变笨——它只是再也看不到对话的开头了。

就像在打电话时,有人不断往你耳朵里塞棉花。

2、解决方案:Ralph Loop

Ralph Loop(也称为 Ralph Wiggum 技术)是一种运行 AI 代理的方法论,使其在连续、自我纠正的循环中运行,直到任务完全完成。

它在 2024-2025 年由开发者 Geoffrey Huntley 推广,现在广泛用于像 Claude Code 这样的自主编码代理。

这个名字来自Ralph Wiggum,《辛普森一家》中可爱的固执孩子。Ralph 以他的短期记忆问题和童真的困惑而闻名——他不断忘记自己在做什么,说像"我是爱达荷州!"和"我猫的呼吸闻起来像猫粮"这样的话。

但 Ralph 有一个救赎性的品质:他从不放弃他只是不断尝试,一次又一次,每次都以新鲜的眼光。

这就是 Ralph Loop 背后的哲学:

"迭代胜过完美。"

代理不是试图一次做对所有事情,而是不断尝试直到成功,每次都从错误中学习。

核心概念是:代理尝试一项任务,检查是否成功,如果没有,则用完全知道刚才失败的知识再试一次。

就像这样:

普通代理:尝试一次,失败,放弃或问你下一步该怎么做。

Ralph Loop 代理:尝试,失败,阅读错误消息,尝试不同的方法,再次失败,也从那中学习,继续直到成功。

3、它实际上是如何工作的:技术方面

Ralph Loop 创建一个自引用的反馈循环,使代理持续工作直到任务完成。

机制如下:

3.1 完成的承诺

你给代理一个任务,信号意味着"我完成了":

修复此仓库中所有失败的测试。
当你完全完成时,输出:<promise>COMPLETE</promise>

3.2 停止 Hook

这是巧妙的部分。

系统监视代理试图退出。如果代理试图停止但没有输出 <promise>COMPLETE</promise>,系统阻止退出并将原始任务重新注入对话。

代理直到成功才能逃脱。

3.3 通过文件实现持久记忆

这是它变得聪明的地方。因为代理在真实的文件系统(通常是 git 仓库)中工作,每次新迭代都可以看到前一次迭代做了什么

  • 代理看到来自尝试 #1 的代码更改
  • 它看到来自尝试 #2 的错误日志
  • 它看到显示哪些方法已经失败的 git 历史
  • 它从自己的错误中学习,而不需要记住它们

文件系统成为记忆。

每次循环迭代都像 Ralph 醒来头脑空白,但发现一本详细的日记,记录"昨天的 Ralph"尝试的一切。

3.4 循环继续

周期重复:

  1. 代理尝试修复问题
  2. 系统检查是否出现 <promise>COMPLETE</promise>
  3. 如果是:任务完成,循环退出
  4. 如果否:循环继续,代理获得另一次机会

4、真实实现:人们实际上如何使用这个

在 2026 年,有几种运行 Ralph Loop 的方式:

4.1 Claude Code 插件(官方)

最简单的方式:

/ralph-loop "migrate all tests from Jest to Vitest" --max-iterations 20 --completion-promise "DONE"

4.2 简单 Bash 循环

DIY 方法:

while true; do 
    cat PROMPT.md | claude-code
done

4.3 Ralph-Claude-Code(社区工具)

生产就绪版本,具有:

  • 速率限制以避免消耗你的 API 预算
  • tmux 仪表板,让你看着代理工作
  • 断路器以停止无限循环
  • 迭代计数器和进度跟踪

5、为什么这实际上有效

代理永远不会忘记目标,因为原始提示在每次迭代中被重新注入。

代理从失败中学习,因为它可以读取错误日志并看到哪些代码更改不工作。

代理不能提前放弃,因为循环直到成功才不会让它退出。

就像区别在于:

  • Ralph 曾经尝试制作一个立体模型,失败,然后走开
  • Ralph 正在尝试制作一个立体模型,失败,检查他的错误,再试一次,更好地失败,再试一次,直到最终成功

6、陷阱:它不是魔法

Ralph Loop 有真正的成本和限制:

API 成本快速增加:每次迭代消耗令牌。复杂任务上的 20 次迭代循环可能花费 $5-15 的 API 费用。设置 --max-iterations 来保护你的预算。

时间投入:有些任务需要 30+ 次迭代。那可能是 2-4 小时的计算时间。这就是为什么人们对于大型任务通宵运行 Ralph Loop。

可能陷入局部最小值:有时代理连续 5 次尝试相同的破坏性方法。好的实现会检测到这一点并强制重置或尝试完全不同的策略。

仅适用于客观任务:循环需要一种方式知道它是否成功了。"所有测试通过"效果很好。"让 UI 更漂亮"不起作用——没有客观的完成信号。

上下文窗口仍然重要:如果你的任务太大而无法适应一个上下文窗口,即使完美的迭代,代理也会产生垃圾代码。将大任务分解成更小的原子故事。

7、何时使用 Ralph Loop

在以下情况下使用:

  • 任务有明确的成功条件(测试通过,linter 干净,构建成功)
  • 你正在进行机械重构(迁移 500 个文件,添加类型,更新依赖项)
  • 你可以让它运行数小时而无需监督* 失败是便宜的,迭代是容易的

完美的用例:

  • 通宵功能构建:当你睡觉时发送 6 个仓库的更改
  • TDD 开发:编写代码直到你所有预定义的单元测试变绿
  • 机械重构:跨 200 个测试文件将 Jest 迁移到 Vitest
  • 依赖项更新:升级框架并修复所有破坏性更改

在以下情况下不要使用:

  • 任务是创造性的或主观的
  • 你需要在 5 分钟内得到结果
  • 没有程序化的方式检查成功
  • 任务需要人为判断

8、真实示例:修复破碎的测试套件

假设在重大重构后你有 47 个失败的测试。

没有 Ralph Loop(2 小时你的时间):

  • 你手动阅读每个测试失败
  • 修复你认为破碎的东西
  • 再次运行测试
  • 12 仍然失败
  • 修复那些
  • 出现了 3 个新失败(你破坏了某些东西)
  • 重复直到完成
  • 你筋疲力尽

使用 Ralph Loop(20 分钟设置,90 分钟代理时间):

  • 你写道:"修复所有失败的测试。当 npm test 显示 0 失败时输出 COMPLETE。"
  • 使用 --max-迭代次数 30 启动 Ralph Loop
  • 去冲咖啡* 回来发现:
  • 迭代 1–3:代理修复了明显的语法错误
  • 迭代 4–7:代理修复了导入路径
  • 迭代 8–12:代理意识到一个测试帮助器坏了,修复了它
  • 迭代 13–15:代理清理了边缘情况
  • 迭代 16:所有测试通过,代理输出 COMPLETE
  • 循环退出
  • 成本:$2.40 的 API 费用

代理尝试了 16 种不同的方法,从每次失败中学习,最终成功。你没有监督任何部分。

9、2026 年的最佳实践

人们在生产中运行 Ralph Loop 两年后,以下是实际有效的:

1. 程序化定义成功。不要使用"让它更好"。使用"npm test 返回退出码 0"或"eslint 报告 0 错误"。

2. 始终设置最大迭代次数。从 20 开始。如果它在没有成功的情况下达到限制,任务可能太大或定义不清。

3. 使用小的原子任务 "向认证系统添加 TypeScript 类型"比"向整个代码库添加 TypeScript"更好。你可以运行 10 个小的 Ralph Loop,而不是一个巨大的。

4. 用仪表板监控。像 Ralph-Claude-Code 这样的工具给你实时可见性。你可以看到它在哪个迭代以及它当前正在尝试什么。

5. 使用紧急出口。添加像"如果你尝试同样的事情 3 次,停止并寻求帮助"这样的条件以防止无限循环。

10、底线

还记得那个忘记你想搜索什么的浏览器标签页吗?

Ralph Loop 就像书签该标签页,反复刷新它,并检查你的答案是否出现了

天才不在于让 AI 更聪明。它在于让 AI 持久。Ralph Wiggum 不聪明,但如果你给他一个清单告诉他继续尝试直到每个框都被勾选,他最终会完成。

这就是 Ralph Loop 做的。它给代理:

  • "完成"的明确定义
  • 允许反复失败
  • 从每次失败中学习的能力
  • 成功之前没有逃脱

它完美吗?不。它很贵且慢。但它是"我尝试一次然后放弃"与"我尝试了 15 次最终弄清楚"之间的区别。

大多数 AI 工具在一次尝试后放弃。Ralph Loop 不会放弃直到工作完成。

它不花哨。它只是作为系统设计的持久性

Ralph Wiggum 最终学会了系鞋带的方式(经过 47 次尝试),你的 AI 代理最终会修复那些测试,迁移那个代码库,或构建那个功能。

你只需要让它继续尝试。

正如 Ralph 自己会说的:"我在帮忙!而这次我不会停止直到完成!"


原文链接:The Ralph Loop: Fix Your AI Agent's Forgetfulness Forever

汇智网翻译整理,版权归原作者所有