免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


我要投稿

让 AI 在 Claude Code 里跑到天荒地老

发布日期:2025-12-29 08:43:19 浏览次数: 1543
作者:知识药丸

微信搜一搜,关注“知识药丸”

推荐语

用AI无限循环创造编程语言?揭秘Ralph Wiggum技术的疯狂与智慧!

核心内容:
1. 通过Bash循环让AI持续迭代的Ralph技术原理
2. 自我指涉机制如何实现AI的持续改进
3. Stop Hook在无限循环中的关键作用

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家


👀 在网上看到一个案例,震撼到我了。

有人用 Claude Code 跑了一个 while true 循环,整整三个月,最后造出了一门编程语言。

对,你没看错,一门完整的编程语言,还是用 Gen Z 黑话写的那种(关键字包括 slaysusbased)。

我第一反应:这人是不是疯了?

仔细一想,这不就是软件工程吗——不断迭代,不断失败,不断改进,直到成功。只不过这次执行循环的不是人,是 AI。

这就是 Ralph Wiggum 技术

《贾杰的AI编程秘籍》付费合集,共10篇,现已完结。30元交个朋友,学不到真东西找我退钱;)


以及我的墨问合集《100个思维碎片》,1块钱100篇,与你探讨一些有意思的话题(文末有订阅方式





Ralph 是啥?

先说名字。

Ralph Wiggum 是《辛普森一家》里那个蠢萌的小男孩,有句经典台词:"Me fail English? That's unpossible!"(我英语不及格?那不可能!)

创造这个技术的 Geoffrey Huntley 用这个名字,想表达的哲学很简单:通过不断坚持和迭代,最终实现看似不可能的任务

Ralph 的本质是什么?Geoffrey 自己说得很直白:

Ralph is a Bash loop.

没错,就一个 Bash 循环:

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

把同一个提示词不断喂给 AI,让它反复执行、反复失败、反复改进,直到任务完成。

听起来傻?但 Geoffrey 说得好:

Deterministically bad in an undeterministic world.

在一个不确定的世界里,确定性的失败反而是好事。

为啥?因为可预测的失败意味着你能通过调整提示词来系统性改进。

自我指涉的魔法

我们看看 Ralph 怎么工作:

  1. 1. Claude 收到任务提示
  2. 2. 开始干活,改代码
  3. 3. 觉得干完了,准备退出
  4. 4. Stop Hook 拦住它
  5. 5. 把同样的提示词再喂一遍
  6. 6. Claude 看到自己刚才写的代码和 Git 记录
  7. 7. 继续改进
  8. 8. 循环往复

关键在第 6 步——Claude 通过读自己之前写的代码,形成了一种"自我指涉"(self-referential)的反馈。

这不是 AI 跟自己对话(那会疯),而是 AI 在不断审视自己的产出,就像程序员不停 review 自己的代码。

Stop Hook:让 Claude 停不下来

要实现 Ralph,核心是 Claude Code 的 Hooks 系统

Hooks 是啥?简单说,在 Claude Code 运行的特定时刻自动触发的 shell 命令。其中最关键的是 Stop Hook

当 Claude 想退出时,Stop Hook 会被触发。Ralph Wiggum 插件在这里做了件"不讲武德"的事:阻止 Claude 退出,把原始 prompt 重新塞回去

看核心代码(简化版):

#!/bin/bash
# stop-hook.sh


# 检查有没有活跃的 ralph-loop

if
 [[ ! -f ".claude/ralph-loop.local.md" ]]; then
  # 没有循环,正常退出

  exit
 0
fi


# 读循环状态

ITERATION=$(grep '^iteration:' .claude/ralph-loop.local.md | ...)
MAX_ITERATIONS=$(grep '^max_iterations:' .claude/ralph-loop.local.md | ...)
COMPLETION_PROMISE=$(grep '^completion_promise:' .claude/ralph-loop.local.md | ...)

# 到最大迭代次数了吗?

if
 [[ $ITERATION -ge $MAX_ITERATIONS ]]; then
  echo
 "🛑 到头了"
  rm
 ".claude/ralph-loop.local.md"
  exit
 0
fi


# 检测到完成标记了吗?

if
 [[ -n "$COMPLETION_PROMISE" ]]; then
  PROMISE_TEXT=$(echo "$LAST_OUTPUT" | perl -0777 -pe 's/.*?<promise>(.*?)<\/promise>.*/$1/s')
  if
 [[ "$PROMISE_TEXT" = "$COMPLETION_PROMISE" ]]; then
    echo
 "✅ 检测到 <promise>$COMPLETION_PROMISE</promise>"
    rm
 ".claude/ralph-loop.local.md"
    exit
 0
  fi

fi


# 还没完,继续!

NEXT_ITERATION=$((ITERATION + 1))
PROMPT_TEXT=$(awk '/^---$/{i++; next} i>=2' ".claude/ralph-loop.local.md")

# 输出 JSON 阻止退出,重新注入 prompt

jq -n \
  --arg prompt "$PROMPT_TEXT" \
  --arg msg "🔄 第 $NEXT_ITERATION 轮" \
  '{
    "decision": "block",
    "reason": $prompt,
    "systemMessage": $msg
  }'


exit
 0

关键机制:

状态文件.claude/ralph-loop.local.md 存当前状态(迭代次数、最大次数、完成标记等)

阻止退出:返回 "decision": "block" 的 JSON,Claude Code 就会拦住

重新注入"reason" 字段装着原始 prompt,作为下一轮输入

这就像给 Claude 设了个"死循环"。但这循环是有目标的。

怎么用 Ralph?

Ralph Wiggum 插件用起来很简单。

启动循环

/ralph-loop "Build a REST API for todos. Requirements: CRUD operations, input validation, tests. Output <promise>COMPLETE</promise> when done." --completion-promise "COMPLETE" --max-iterations 50

这命令做了啥?

  • • 创建 .claude/ralph-loop.local.md 状态文件
  • • 写入初始 prompt 和配置
  • • 激活 Stop Hook

然后你就可以离开电脑了。

Claude 会自己:

  1. 1. 实现 API
  2. 2. 写测试
  3. 3. 跑测试发现 bug
  4. 4. 修 bug
  5. 5. 再跑测试
  6. 6. 继续迭代...
  7. 7. 直到所有测试过了,输出 <promise>COMPLETE</promise>

两个安全阀

Ralph 提供两种停止机制:

最大迭代次数(--max-iterations

这是你的救命稻草。永远记得设:

/ralph-loop "Fix the auth bug" --max-iterations 20

为啥这么重要?

因为 --completion-promise 只能精确字符串匹配,不能有多个完成条件。任务要是完不成,Ralph 会一直跑,直到你 API 配额耗光(或者哭着取消)。

完成承诺(--completion-promise

让 Claude 输出特定标签表示完成:

<promise>TASK COMPLETE</promise>

注意! 这里有个道德约束:Claude 绝对不能为了退出而撒谎输出这标签。

插件文档反复强调:

CRITICAL RULE: You may ONLY output the promise when the statement is completely and unequivocally TRUE. Do not output false promises to escape the loop.

就像程序员的职业道德——代码没过测试,你也不能强行改成 assert True

取消循环

要手动停:

/cancel-ralph

怎么写好的 Prompt?

Ralph 能不能成,80% 看 prompt 质量

❌ 糟糕的例子

Build a todo API and make it good.

问题在哪?

  • • 完成标准不明确(啥叫"good"?)
  • • 没法验证
  • • Claude 不知道啥时候该停

✅ 好的例子

Build a REST API for todos.

When complete:
-
 All CRUD endpoints working
-
 Input validation in place
-
 Tests passing (coverage > 80%)
-
 README with API docs
-
 Output: <promise>COMPLETE</promise>

好 prompt 应该:

  1. 1. 明确的完成标准:能验证的、具体的
  2. 2. 增量式目标:大任务拆小步骤
  3. 3. 自我修正机制:包含测试和验证
  4. 4. 逃逸策略:卡住时知道咋办

实战技巧:TDD 风格

Implement feature X following TDD:
1.
 Write failing tests
2.
 Implement feature
3.
 Run tests
4.
 If any fail, debug and fix
5.
 Refactor if needed
6.
 Repeat until all green
7.
 Output: <promise>TESTS PASSING</promise>

这种 prompt 利用测试的确定性反馈——要么绿,要么红,没模糊地带。

Ralph 的哲学

Ralph 技术背后有几个深刻的道理。

迭代 > 完美

不要想着第一次就做对。让循环去打磨。

Geoffrey 自己说,他从没写过编译器,但通过 Ralph,用 3 个月跑出了完整的编程语言,包括:

  • • 词法分析器和解析器
  • • LLVM 后端编译到二进制
  • • 标准库
  • • 部分编辑器支持

这传统开发里可能要个小团队干一年。

失败是数据

"确定性的糟糕"(deterministically bad)意味着失败是可预测、可分析的。

每次失败告诉你:

  • • 哪里逻辑有问题
  • • 提示词哪部分要调
  • • 任务哪个环节最难

这些比成功更有价值。

操作员技能至关重要

Ralph 不是"设了就忘"的工具。它是个放大器——放大你写 prompt 的能力。

LLMs are mirrors of operator skill.

经验丰富的开发者,通过精心设计的 prompt,能让 Ralph 干出惊人的活儿。新手可能陷入无尽循环。

真实战绩

YC 黑客松

Y Combinator 的一次黑客松测试中,Ralph 一夜生成了 6 个完整代码仓库,API 成本 297 美元。

5 万美元的合同

Geoffrey 分享的案例:价值 5 万美元的外包合同,用 Ralph 完成,API 成本 297 美元。

当然,这不是说 Ralph 能替代所有开发工作。但对于明确定义的、机械性任务,它确实提效明显。

Cursed 编程语言

Geoffrey 用 Ralph 跑了三个月,造了 Cursed 编程语言——用 Gen Z 俚语做关键字的函数式语言。

成功的定义?让 Cursed 上 Stack Overflow 开发者调查,成为"最受喜爱"或"最被憎恨"的语言之一。

适合啥场景?

✅ 适合的

  • • 大规模重构:框架迁移、依赖升级、API 版本升级
  • • 批量操作:文档生成、代码标准化、工单分类
  • • 测试覆盖:给所有未覆盖函数加测试
  • • 绿地项目:从零搭新项目脚手架

共同点:有明确成功指标,执行过程机械化

❌ 不适合的

  • • 需要人类判断或设计决策
  • • 一次性操作(用 Ralph 反而浪费时间)
  • • 成功标准不明确
  • • 生产环境 debug(针对性调试更快)

插件技术细节

Ralph Wiggum 插件的代码结构很清晰:

ralph-wiggum/
  .claude-plugin/
    plugin.json              # 插件元数据
  commands/
    ralph-loop.md            # /ralph-loop 命令
    cancel-ralph.md          # /cancel-ralph 命令
    help.md                  # /help 命令
  hooks/
    hooks.json               # Hook 配置
    stop-hook.sh             # Stop Hook 实现
  scripts/
    setup-ralph-loop.sh      # 初始化脚本

状态文件设计

.claude/ralph-loop.local.md 用的是 Markdown + YAML frontmatter

---
active: true
iteration: 1
max_iterations: 50
completion_
promise: "COMPLETE"
started_at: "2025-12-28T10:30:00Z"
---

Your original prompt goes here...

为啥用 Markdown 不用纯 JSON?

因为 Markdown 易读,方便检查当前状态。YAML frontmatter 提供结构化元数据。

Hook 的输入输出

Stop Hook 通过 stdin 收 JSON:

{
  "transcript_path"
: "/path/to/conversation.jsonl"
}

通过 stdout 返回 JSON:

{
  "decision"
: "block",
  "reason"
: "The original prompt to feed back",
  "systemMessage"
: "🔄 Ralph iteration 5"
}

这设计很优雅——hook 脚本只处理 JSON,不用管 Claude Code 内部实现。

总结

Ralph Wiggum 技术让我重新想了 AI 编程助手的用法。

我们习惯了交互式编程——写一点,问 AI 一点,再改一点。

但 Ralph 展示了另一种可能:自主式编程——定义好目标,让 AI 自己迭代到完成。

这不是替代程序员,是解放程序员

把那些明确的、重复的、机械的任务交给 Ralph,我们专注更有创造性的工作——架构设计、产品决策、用户体验。

Geoffrey 说得对:"最高智商的做法可能是最低智商的做法:让 AI 跑循环"。

有时候,最简单的方案就是最强大的。

P.S. 要是想试 Ralph,记得:

  1. 1. 永远设 --max-iterations(救命稻草)
  2. 2. 写清楚完成标准(能验证的、具体的)
  3. 3. 从小任务开始(先跑 10 次看效果)
  4. 4. 别让 AI 撒谎(就算很想退出也不行)

好吧,就这样。

参考资料

  • • Ralph Wiggum 官方博客 - Geoffrey Huntley
  • • Ralph Wiggum 插件源码 - Anthropic
  • • Claude Code Hooks 文档 - Anthropic
  • • Cursed 编程语言 - Geoffrey Huntley
  • • Ralph Orchestrator - 生产级实现




 坚持创作不易,求个一键三连,谢谢你~❤️
以及「AI Coding技术交流群」,联系 ayqywx 我拉你进群,共同交流学习~


 

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询