【让AI编程代理在你睡觉时帮你写代码】
最近发现了一种能让AI编程代理长时间(几小时甚至几天)运行、在你睡觉时持续产出代码的方法。试过之后,我已经回不去了。
这就是所谓的“Ralph Wiggum”方法。核心理念很简单:用一个清白的状态反复运行编程代理,直到满足停止条件。
+ 具体实现
整个方案只需要一个Bash脚本:
1. 设置一个有限次数的for循环(比如10次),防止代理无限运行
2. 循环内让编程代理(Claude Code、OpenCode、Codex等)专注于仓库中的单一功能,直到完成。提示词中要求:“如果实现后没有更多工作要做,回复
3. 在循环中检测这个标记,存在就提前退出
+ 停止条件的设定
LLM如何知道何时发出完成信号?有几种方式:
- 直接提示:在提示词中给出清晰的停止条件
- TODO列表:给代理一个待办清单
- PRD(产品需求文档):推荐方法,下面详述
+ 进度报告机制
必须在提示词中要求代理提交工作,并将进度追加到本地progress.txt文件。提交工作让后续代理能通过git历史了解之前做了什么。progress.txt是长期运行代理的标准做法,喂给代理时用“追加”而非“更新”,确保不覆盖之前的记录。
+ 保持CI绿色
每次提交必须通过所有测试和类型检查。这一点至关重要——如果不这样做,就会给后续代理留下坏代码,它们得花时间二分查找bug,非常麻烦。健康的反馈循环是成功的关键。
+ 用PRD解决核心问题
Ralph方法面临两个挑战:
第一,代理会选择过大的任务。它们不能正确评估工作量,尝试过于雄心勃勃的事情,结果耗尽上下文窗口,最终失败。
第二,代理不知道何时停止。
解决方案是用基于PRD的方法,将工作形式化为用户故事列表。这是PRD和TODO列表的结合体——一个JSON文件,包含多个用户故事,每个都有“passes: false”属性。
提示代理选择最高优先级的功能,只做这一件事,完成后更新相应PRD项的状态。这样能有效限制范围,只使用上下文窗口的一小部分,避免上下文腐化。停止条件也变得简单:“当PRD中所有测试用例都通过时,发出完成信号”。
+ 社区反馈中的洞见
有开发者指出,这个方法之所以有效,是因为它体现了“笨编排,聪明工人”的哲学。我们常常用LangChain或AutoGen等复杂框架过度设计代理,但一个简单的while循环加清晰的退出条件往往更稳健。把LLM当作需要重试的随机函数来对待——在代理设计中,“坚持不懈”比“聪明绝顶”更重要。
也有人提醒,flaky tests(不稳定的测试)是这种方法的隐形杀手。可能需要添加重试和隔离逻辑,否则循环会一直卡住。反馈循环的质量远比提示词技巧重要。
+ 总结
- Bash脚本循环
- JSON格式的PRD
- progress.txt进度追踪
- 保持CI绿色
- 建立健康的反馈循环
成本确实不低,但奇怪的是,比手动开发或单代理上下文切换等替代方案还是便宜。
x.com/mattpocockuk/status/2007924876548637089
