Curated
一文读懂 Ralph Loop 的四种变体:从 Claude 官方插件到…

一文读懂 Ralph Loop 的四种变体:从 Claude 官方插件到…

WquGuru|
来源

与其让人类一步步指导 AI,不如定义好目标,然后让 AI 自己反复尝试直到完成。这个想法来自一位澳大利亚山羊农场主的编程实践,以及一个只有 5 行代码的 Bash 脚本。

起源:5 行 Bash 脚本的故事

Geoffrey Huntley 遇到的问题

2025 年 5 月,Geoffrey Huntley 在澳大利亚乡村养山羊的同时,也在做软件开发。他发现 AI 编码工具有个很大的问题:每次遇到错误都要停下来等人类审查和指导。

这个流程有两个麻烦:

  • 每次重启会话都要重新解释项目背景
  • 必须手动审查每个错误并告诉 AI 下一步怎么做
  • Huntley 想,如果 AI 能看到自己的失败输出并自动重试,效率不就高多了?

    一个极简的解决方案

    他写了这样一个脚本:

    while :; do
      cat [PROMPT.md](//PROMPT.md) | claude-code --continue
    done

    就这么简单。一个无限循环,不停地把同一个提示文件喂给 AI。没有复杂的逻辑,没有状态管理,就是不停地重试。

    他给这个技术起名叫 “Ralph Wiggum”—— 那个在《辛普森一家》里永远乐观、不怕失败、一直坚持的小男孩。

    Huntley 后来解释说:“Ralph 会考验你。每次 Ralph 在开发 CURSED 语言时走错方向,我不会怪工具,而是检查自己的提示,然后调整它 —— 就像调吉他一样。”

    核心原理:为什么让 AI 反复失败反而有效

    “确定性地失败” 比 “不确定性地成功” 更有用

    Huntley 提出了一个看起来很反直觉的观点:

    “在不确定的世界中,确定性地糟糕胜过不确定性地成功。可预测地失败比不可预测地成功更好。”

    这是什么意思?传统开发中,我们追求一次性写对。但 AI 的特点是:

  • 测试失败会准确告诉你哪里错了
  • 根据具体错误修复比盲目尝试更靠谱
  • 如果任务目标明确,重复尝试最终会成功
  • 失败不是灾难,而是有用的反馈信息。每个失败的测试、每条编译错误、每个类型检查失败,都在告诉 AI 下一步该怎么改。

    自引用反馈循环的工作方式

    Ralph 创建了一个自引用反馈循环:

  • AI 收到同样的提示:“实现功能 X,让所有测试通过”
  • AI 写代码,运行测试,结果:3 个测试失败
  • AI 通常会退出会话,但这时文件系统已经变了:代码写好了,测试输出生成了,Git 历史记录了
  • 循环重启,喂入同样的提示,但 AI 看到的上下文不同了
  • AI 根据失败信息调试修复,重复到所有测试通过
  • 虽然每次都是同样的提示文件,但文件系统状态在不断变化。AI 不是在重复同样的工作,而是在一个不断积累历史的环境中改进代码。

    image

    Stop Hook: Claude Code 的实现方式

    Anthropic 的 Claude Code 团队把 Ralph 做成了官方插件,引入了 Stop Hook 拦截机制。

    传统的 Ralph 靠外部 Bash 循环重启会话。Claude Code 插件是在会话内部创建循环,核心逻辑是:

    拦截 Claude 的退出尝试 → 检查完成条件(查找特定的 标签)→ 如果未完成,阻止退出并注入新提示

    这种实现的好处:

  • 不需要外部包装脚本
  • 保持单一 Claude 会话的上下文
  • 用户只需运行一次 /ralph-loop 命令
  • 两种实现方式

    Claude Code 官方版

    Anthropic 的官方插件是工程化的版本:安全、可控、好用。

    安装:

    /plugin install ralph-loop@claude-plugins-official

    使用示例:

    /ralph-loop "构建 TODO 的 REST API。要求: CRUD、验证、测试。完成时输出

    <promise>COMPLETE</promise>" \
      --max-iterations 50 \
      --completion-promise "COMPLETE"

    特点:

  • 记录迭代状态
  • 限制最大迭代次数,防止无限循环
  • 精确匹配完成标签来判断任务完成
  • 可以随时停止
  • 适合:

  • 快速原型开发
  • 短时间任务(1 小时内)
  • 需要 Claude Code 生态集成的项目
  • Ryan Carson 版

    Ryan Carson 的实现遵循 Huntley 的原始思路:显式控制、工具无关。

    核心脚本逻辑:

    for i in $(seq 1 [$MAX](https://x.com/search?q=%24MAX&src=cashtag_click)_ITERATIONS); do
      OUTPUT=$(cat [prompt.md](//prompt.md) | amp --dangerously-allow-all 2>&1)
      if echo "$OUTPUT" | grep -q "<promise>COMPLETE</promise>"; then
        exit 0
      fi
    done

    项目结构:

    scripts/ralph/
    ├── [ralph.sh](//ralph.sh)          # 主循环脚本
    ├── [prompt.md](//prompt.md)         # AI 指令
    ├── prd.json          # 用户故事任务列表
    └── progress.txt      # 学习日志

    核心特点:

  • 每次迭代都是全新的上下文窗口
  • prd.json 结构化管理多个用户故事
  • progress.txt 的 “代码库模式” 跨迭代传递经验
  • 可以配合 amp、claude、cursor 等任意 CLI 工具
  • 适合:

  • 多任务 / 多故事项目
  • 长时间运行(数小时 / 过夜)
  • 需要积累项目特定知识
  • 不用 Claude Code 的开发者
  • 来源: Ryan Carson GitHub 仓库

    生产化改进:两个代表性实现

    原始的 Ralph Loop 虽然简单有效,但在生产环境中存在明显的问题:成本失控、漂移风险、缺乏可视化。开源社区很快开发出多种改进版本,其中 Vercel Labs 和 Zenflow 代表了两个不同的演进方向。

    image

    Vercel Labs:双层循环架构

    Vercel Labs 的实现是对 Ralph 理念的编程化封装,完全集成到 Vercel AI SDK 生态。它的核心创新是双层循环架构:

  • 外层循环:Ralph Loop 反复验证任务是否完成
  • 内层循环:AI SDK Tool Loop 处理单次迭代的工具调用
  • 与传统 AI SDK 的区别:传统 AI SDK 的 generateText 在 LLM 完成工具调用后就停止了。即使测试失败、编译报错,Agent 也不会自动重试。

    Vercel 的 Ralph Loop Agent 引入外层循环:内层的工具调用完成后,运行 verifyCompletion 函数检查任务是否真正完成。如果未达标,将反馈注入下一轮迭代,继续执行。

    关键机制:verifyCompletion 反馈

    这是 Vercel 实现的核心创新。验证函数返回的原因字符串会作为系统消息注入到下一次迭代的上下文中,让 Agent 能够根据具体失败原因调整策略,而不是盲目重试。

    成本控制示例:

    stopWhen: [
      iterationCountIs (50),        // 最多 50 次迭代
      totalCostIs (10.0),           // 最多花费 $10
      totalTokenUsageIs (200000)    // 最多 20 万 Token
    ]

    适用场景:

  • 单一明确任务:代码迁移、批量重构、测试覆盖率提升
  • 可编程集成:需要嵌入到现有工具链
  • AI SDK 生态用户:已经在使用 Vercel AI SDK 的项目
  • 成本敏感场景:需要精确控制 Token 消耗
  • Zenflow:规格驱动的受控循环

    Zenflow 是独立桌面应用,它的核心理念是:“没有锚点的循环会漂移”。Zenflow 不是简单地让 Agent 反复尝试,而是将循环嵌入到 Spec-Driven Development (SDD) 工作流中。

    核心架构plan.md 作为状态机

    工作流定义在 Markdown 文件中:

    .zenflow/tasks/{task_id}/
    ├── [plan.md](//plan.md)           # 可执行的工作流定义
    ├── [spec.md](//spec.md)           # 需求规格 (锚点)
    ├── [report.md](//report.md)         # 执行报告
    └── changes/          # 代码变更记录

    plan.md 有双重角色:既是执行指令,又是执行日志。

    自修改计划机制

    Zenflow 的循环不靠外部脚本重启,而是让 Agent 自己修改 plan.md 来延续循环

    循环原理:

  • Agent 完成 Implementation 步骤
  • 根据指令,识别下一个改进点
  • plan.md 末尾追加新步骤
  • Zenflow 检测到新步骤 → 自动启动下一轮执行
  • 重复循环
  • 这种机制的优势:循环有明确的进展方向。不是盲目重试同一个任务,而是完成一个目标后自动设置下一个目标。

    “委员会方法”:多模型交叉验证

    Zenflow 的研究发现:让不同模型互相审查比单一模型迭代更有效。典型的三步工作流:

    image
  • Step 1: Implementation - Claude Opus 4.5 实现功能
  • Step 2: Review - GPT-4o 审查代码(不同模型!)
  • Step 3: Fix - Claude Opus 4.5 修复问题
  • Step 4: Final Verification - Gemini Pro 最终验证
  • 不同模型有不同的 “盲点”。Claude 可能擅长生成简洁代码但忽略边界条件;GPT 可能更严格但过于保守。让它们互相审查能捕获单一模型会漏掉的问题。

    “黄金地带”:3 次迭代限制

    Zenflow 团队的实践经验:

  • 1-3 次迭代:Agent 能够收敛到正确解决方案
  • 4-7 次迭代:开始出现 “过度优化” 或 “方向漂移”
  • 7 次以上:几乎总是在原地打转或引入新问题
  • 超过 3 轮说明任务定义不清,需要人工介入。这种 “失败快速”(Fail Fast)哲学防止了无意义的 Token 消耗。

    防止漂移的机制

    纯 Ralph 循环的最大问题是 “漂移”:Agent 经过多次迭代后,逐渐偏离原始意图。Zenflow 用两种机制防止:

  • Spec 锚点检查:每次迭代前对照需求规格,计算偏离程度
  • 上下文总结:每 3 次迭代压缩历史,保持长期一致性
  • 适用场景:

  • 复杂多步骤流程:需要规划、实现、审查、验证的完整开发周期
  • 团队协作:多人同时运行任务,需要可视化管理
  • 防漂移需求:长时间运行的任务,容易偏离原始目标
  • 多模型环境:想利用不同模型的优势
  • 技术权衡对比

    Vercel Ralph Loop Agent:

  • 架构:双层循环(外层验证 + 内层工具)
  • 锚点: verifyCompletion 函数
  • 多模型:不支持
  • 成本控制:Token / Cost 停止条件,精确预算
  • 适用:单一明确任务,TypeScript 库
  • Zenflow 受控循环:

  • 架构:单层循环 + 自修改计划
  • 锚点:spec.md + plan.md
  • 多模型:核心特性(委员会方法)
  • 成本控制:3 次迭代硬限制,快速失败
  • 适用:复杂多步骤开发流程,独立桌面应用
  • 选择建议:

  • 选 Vercel:项目已用 Vercel AI SDK,任务单一明确,喜欢编程控制
  • 选 Zenflow:需要管理复杂工作流,团队协作,担心长时间漂移
  • 来源:Vercel Labs GitHub、Zencoder 博客

    真实案例

    案例 1:CURSED 编程语言 ——3 个月的长跑

    Geoffrey Huntley 用 Ralph 技术,花 3 个月时间,完全自主开发了一门叫 CURSED 的编程语言。成果包括:

  • 完整的编译器
  • 标准库
  • 编辑器支持
  • 文档系统
  • Huntley 只是定期调整 prompt.md 中的指令,Ralph 在后台持续工作。这证明 Ralph 不只适合短期任务,也能支持长达数月的复杂开发。

    案例 2:YC 黑客马拉松一夜生成 6 个仓库

    Y Combinator 黑客马拉松的参与者用 Ralph,一夜之间生成了 6 个完整的代码仓库。报告标题很直接:“我们把编码代理放进 While 循环,它一夜之间交付了 6 个仓库”。

    这个案例展示了 Ralph 的批量生成能力:并行运行多个 Ralph 实例,利用夜间时间无人值守开发。

    案例 3:$50,000 合同只花 $297

    有开发者用 amp 配合 Ralph 循环,完成了一个价值 $50,000 的商业合同,实际 API 成本只有 $297。成本比率仅 0.594%。

    这个案例引发了关于 AI 开发经济学的讨论:当 AI 能以不到 1% 的成本交付软件时,传统定价模型还能维持多久?

    案例 4:Reddit 上的真实问题

    Reddit 的 r / ClaudeCode 社区有更现实的反馈。有用户报告了个 bug:“第一次运行 Ralph-Wiggum—— 它接管了另一个会话!!”

    原因是 Ralph 的 Stop Hook 是全局的,在不同项目间切换时会相互干扰:

  • 项目 A 的 Ralph 循环中断了项目 B 的正常工作
  • 2 小时内消耗了 $200 订阅计划 14% 的用量
  • 迭代计数混乱,上下文泄漏
  • 解决办法:用 Git Worktrees 为每个 Ralph 实例创建独立的工作目录。

    另一位用户说:“Ralph 很厉害…… 但第一次用需要信念和对最终结果的信任。Ralph 会考验你。”

    来源: Reddit r / ClaudeCode 社区

    争议与现实问题

    “让 AI 反复失败直到成功” 的争论

    Ralph 的核心思路 —— 让 AI 无限重试直到成功 —— 挑战了传统软件工程思维。

    传统思维:

  • 第一次就做对(First Time Right)
  • 最小化错误尝试
  • 精确的规划和执行
  • Ralph 的做法:

  • 迭代比完美更重要
  • 失败就是数据
  • 坚持就会成功
  • VentureBeat 的报道说这是 “把模型逼到极限,直到它为了逃离循环而‘梦见’正确解决方案”。

    批评者说:这不就是暴力破解吗?为什么不一开始就写好 prompt?

    支持者反驳:人类自己就是这样工作的。没有程序员能一次性写出完美代码。我们都是写、测试、调试、重构 ——Ralph 只是把这个循环自动化了。

    Token 成本的现实

    Ralph 最大的问题是成本。Reddit 用户分享的数据:

  • 传统交互式开发:适度 Token 消耗,1-2% 周度用量,需人工监督
  • Ralph 自主循环(50 次迭代):很高 Token 消耗,10-15% 周度用量,2-5 小时无人值守
  • Better Stack 在 Twitter 警告:“Ralph Wiggum 插件在自主循环中运行 Claude Code…… 成本可能无限增长。”

    实际应对策略:

  • 始终设置 --max-iterations:这不是可选的,是必需的
  • 从小处开始:先用 5-10 次迭代测试任务
  • 监控用量:用监控工具实时跟踪
  • 算成本效益:如果 Ralph 在 2 小时内完成了 20 小时的工作,即使消耗 15% 用量也值
  • 从 “人在循环” 到 “人定义目标”

    Ralph 改变了 AI 辅助开发的模式。Matt Pocock (YouTube 技术博主)的说法是:

    “不再强迫 AI 遵循脆弱的多步计划,而是让代理简单地‘从看板上抓任务卡片’,完成它,然后找下一个。”

    传统模式:

    人类计划 → AI 执行步骤 1 → 人类审查 → AI 执行步骤 2 → ……(每一步都需要人工确认)

    Ralph 模式:

    人类定义成功标准 → Ralph 自主迭代 → 达成目标(文件系统反馈、测试结果反馈、Git 历史反馈)

    这要求开发者掌握新技能:写好目标而不是写好步骤。好的 prompt 不是 “做 A,然后做 B”,而是 “达成 X 状态,证据是 Y 测试通过”。

    安全问题

    Ralph 的自主性带来了安全担忧。2025 年的研究论文《AI 代码生成中的迭代安全降级》发现:

    “当最初安全的代码经过多轮 AI‘改进’时,在没有人工干预的情况下,可能会系统性地引入新漏洞。”

    实验表明,纯 LLM 反馈循环(无人类审查)在 5-7 次迭代后,代码安全性开始下降:

  • 身份验证绕过
  • SQL 注入风险
  • 内存泄漏
  • Reddit 用户的建议:“我的工作流中有一个只读权限的代理来验证和拒绝不安全的更改。”

    来源:arXiv 研究论文、Reddit 社区

    如何使用 Ralph

    image

    适合用 Ralph 的场景

  • 有明确成功标准的任务
  • /ralph-loop "让 tests/auth/ 下的所有测试通过。npm test -- auth 返回 0 退出码时输出DONE" \

    --max-iterations 30

  • 迭代改进类任务
  • 重构遗留代码符合新标准
  • 优化性能达到基准
  • 迁移框架版本并修复问题
  • 新项目开发
  • 没有遗留债务的新功能
  • 原型验证
  • 一次性脚本工具
  • 可自动验证的任务
  • 有完整测试套件
  • 有 linter 规则
  • 有 CI / CD 管道
  • 不适合用 Ralph 的场景

  • 需要人类判断
  • 架构决策(微服务还是单体?)
  • 用户体验权衡(简洁还是功能丰富?)
  • 安全审查(这个加密方案合适吗?)
  • 目标不明确比如 “让应用更快” 这种 prompt 会让 Ralph 无目的地优化,可能破坏功能或增加复杂性。
  • 生产环境调试
  • 线上事故需要实时响应
  • 数据库迁移(不可逆操作)
  • 支付系统更改(高风险)
  • 探索性工作
  • “找出为什么性能下降了”(需要分析)
  • “研究竞品实现”(需要理解意图)
  • image

    写好 Prompt 的技巧

    不好的例子:

    构建一个电商平台。

    好的例子:

    markdown
    ## 目标 实现用户认证系统 ## 成功标准 1. 所有测试通过 (npm test -- auth) 2. TypeScript 编译无错误 (npm run typecheck) 3. 包含功能: - JWT 令牌生成和验证 - 密码哈希 (bcrypt) - 刷新令牌机制 ## 验证步骤 每次迭代: 1. 运行 `npm test -- auth` 2. 检查 `npm run typecheck` 3. 如果都通过, 输出:<promise>AUTH_COMPLETE</promise> ## 约束 - 使用项目中现有的 lib/jwt.ts 工具 - 遵循 docs/security-guidelines.md - 密码最小长度 8 位 ## 如果卡住 15 次迭代后仍有失败: - 记录当前问题 - 列出已尝试的方法 - 建议替代方案 - 输出:<promise>BLOCKED</promise>

    要点:

  • 可验证的完成标准
  • 自动化验证命令
  • 明确的约束
  • 卡住时的处理方式
  • 监控和调试

    熔断器模式

    增强版 Ralph 实现了智能熔断器,防止无意义循环消耗资源。三种熔断策略:

  • 无进展检测:连续 3 次迭代没有任何文件变化
  • 相同错误检测:连续 5 次出现完全相同的错误消息
  • 输出质量下降:Agent 输出长度或结构化程度骤降
  • 熔断触发时会自动停止,输出诊断信息,建议下一步操作。

    监控仪表盘

    增强版本提供实时可视化:

    image
  • 进度条:当前迭代 / 最大迭代
  • Token 消耗图表:使用 ASCII 条形图展示累积消耗
  • 成本预估:基于当前速率预测最终成本
  • 成功率:有文件变化的迭代占比
  • 日志滚动:最新的 Agent 输出和错误信息
  • Git 安全网:

    # Ralph 运行前
    git checkout -b ralph/experiment-$(date +% s)
    
    # 出错时回滚
    git reset --hard origin/main

    来源: frankbria GitHub 仓库

    未来可能的方向

    递归自我改进的风险

    Ralph 本质上是受限的递归自我改进:AI 通过读取自己的输出来改进下一次迭代。但这种机制走极端会怎样?

    2025 年的研究论文《AI 系统中的递归自我改进》警告:

    “递归发展可能触发失控场景,AI 系统在反馈循环中不断增强能力,不受外部约束。”

    失控场景:

  • AI 改进自己的改进算法
  • 改进的算法进一步优化改进过程
  • 形成正反馈循环,指数级加速
  • 人类失去理解和控制能力
  • Ralph 的安全机制(--max-iterations、人类定义的目标)是第一道防线。但够吗?

    反馈循环安全降级研究

    2026 年 IEEE - ISTAS 会议即将发表的论文《迭代 AI 代码生成中的安全降级》提出了 “反馈循环安全降级” 问题:

    “在纯 LLM 交互中,安全性似乎随迭代而系统性恶化,而非改善。这说明人类专业知识在开发循环中很重要。”

    研究发现:

  • 第 1-3 次迭代:安全性稳定
  • 第 4-6 次迭代:开始引入小漏洞
  • 第 7-10 次迭代:严重安全缺陷出现
  • 第 10 次以上:可能完全破坏安全机制
  • image

    这对 Ralph 类工具提出了挑战:需要智能熔断器,不仅检测无进展,还要检测安全性退化。

    Human-in-the-Loop 的回归?

    讽刺的是,Ralph 最初想消除 “人在循环” 瓶颈,但最新研究表明可能需要重新引入 —— 以更智能的方式。

    可能的方向:

  • AI 遇到安全敏感操作时自动暂停
  • 每 N 次迭代触发人类快速检查
  • ML 模型监测代码质量下降
  • 每次改动的理由可审计
  • HumanLayer 的方法可能是个方向:不是 “人审查每一步”,而是 “AI 自主运行,但在关键点等人类确认”。

    从 Ralph 到 AGI 还有多远?

    Ralph 展示了 AI 代理在受限域(明确目标、可验证结果、有限上下文)的自主能力。但离 AGI 还很远:

    Ralph 能做的:

  • 让测试通过
  • 修复类型错误
  • 重构代码符合标准
  • 实现明确规范的功能
  • Ralph 不能做的:

  • 理解业务意图
  • 权衡长期架构影响
  • 创新性问题解决
  • 跨领域迁移知识
  • Geoffrey Huntley 总结:

    “Ralph 需要信念和对最终结果的信任。每次 Ralph 走错方向,我不怪工具 —— 我检查自己的 prompt 并调整。就像调吉他。”

    这说明:Ralph 把人类技能从 “逐步指导 AI” 转移到了 “设计正确的目标”。这是进步,但离 AGI 的自主定义目标还有质的差距。

    来源:学术研究论文、HumanLayer 博客

    总结

    Ralph Wiggum 技术从 5 行 Bash 脚本到全球现象,不到一年时间。它带来的不只是工具,更是思维方式的改变:

  • 拥抱失败:把错误当数据而不是灾难
  • 信任迭代:相信持续改进的力量
  • 目标驱动:定义成功标准而不是微管理步骤
  • 成本意识:自主性的代价是 Token 消耗
  • VentureBeat 说得好:

    “Ralph 不只是生成代码 —— 它生成了一个市场。从加密货币代币到企业 SaaS,从 YouTube 教程到学术论文,Ralph 证明了一个简单的循环可以改变整个生态。”

    下次运行 /ralph-loop 时,记住:你不只是在启动脚本,而是在参与一场关于 AI 自主性的实验 —— 从山羊农场开始,用辛普森角色命名,正在改变软件开发的实验。

    正如 Ralph Wiggum 本人可能会说:“我在帮忙!”

    如果您对 AI 或 AI Agent 感兴趣,推荐更多我的文章:
    https://x.com/wquguru/status/2007669143378727203?s=46