返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

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

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 17:13 |阅读模式 打印 上一主题 下一主题


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

有人用 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
catPROMPT.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
# 没有循环,正常退出
exit0
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"
exit0
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"
exit0
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
}'

exit0

关键机制:

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

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

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

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

怎么用 Ralph?

Ralph Wiggum 插件用起来很简单。

启动循环

/ralph-loop"BuildaRESTAPIfortodos.Requirements:CRUDoperations,inputvalidation,tests.Output<promise>COMPLETE</promise>whendone."--completion-promise"COMPLETE"--max-iterations50

这命令做了啥?

  • • 创建.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"Fixtheauthbug"--max-iterations20

为啥这么重要?

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

完成承诺(--completion-promise

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

<promise>TASKCOMPLETE</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 质量

❌ 糟糕的例子

BuildatodoAPIandmakeitgood.

问题在哪?

  • • 完成标准不明确(啥叫"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 撒谎(就算很想退出也不行)

好吧,就这样。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ