--- title: "从 PRD 到代码:Ralph 驱动的自治 AI 智能体执行循环" source: wechat url: https://mp.weixin.qq.com/s/iVfaAJx4DuFuzihf0TouHA ingest_date: 2026-07-04 vxc: 49 stars: 4 sha256: 9cfbf51d52dc6fab339519e3dfbc757b48c290e0904fb8f5992784cfedbef14f --- # 从 PRD 到代码:Ralph 驱动的自治 AI 智能体执行循环 **来源**: 技术极简主义 **发布日期**: 2026-02-23 **原文链接**: https://mp.weixin.qq.com/s/iVfaAJx4DuFuzihf0TouHA --- 传统的软件开发流程中,我们会先写需求文档、设计文档,再进行编码。但在 AI 编程时代,尽管工具越来越强大,从 PRD 到可直接上线的代码,自动化流程仍然不够顺畅。 Ralph 正是为了解决这一问题而设计。它基于 Geoffrey Huntley 提出的 Ralph 循环模式 [1] ,通过不断启动 AI 编码工具(Amp 或 Claude Code),逐条处理 PRD 中的任务,直到所有事项完成为止。 在上一篇文章 简单就是美!Claude Code Ralph循环机制详解 中,我们已经系统了解了 Ralph 如何接管重复性工作,并保证任务可靠完成。 在本文中,我将带你看看 Ralph 是如何实现 自动化开发 的,包括它的核心原理、完整流程、最佳实践,以及在实际项目中的应用效果。 ## 核心原理 ### 架构设计:Bash 循环 + AI 实例 Ralph 的架构其实很简单。核心是一个 Bash 循环脚本:每轮迭代启动一个新的 AI 实例,读取 PRD 数据,只处理一个明确的任务,然后进入下一轮。 创建 PRD     ↓ 转换为 JSON → prd.json(任务清单)     ↓ ralph.sh(Bash 循环)     ↓ 启动 AI 实例 → 读取 prd.json → 选择未完成任务     ↓ 实现单个任务 → 运行质量检查 → 提交代码 → 更新 AGENTS.md / CLAUDE.md     ↓ 更新 prd.json → 将经验写入 progress.txt → 进入下一轮     ↓ 所有任务完成 → 输出 COMPLETE 这种设计的关键在于: 每一轮迭代都使用全新的上下文窗口。 AI 不依赖之前的对话记忆,而是通过外部存储( Git 历史 、 progress.txt 和 prd.json )来获取状态。这样既避免了上下文不断累积带来的限制,也能确保每次迭代都基于最新、可审计的项目状态。 ### 核心概念 每次迭代 = 全新 AI 实例 在 Ralph 的流程里,每轮都会启动一个新的 AI 实例(Amp 或 Claude Code),不沿用之前的对话记录,上下文都是全新的。 需要保留的状态,都放在外部: - • Git 历史 :记录开发过程中的变动和约定 - • progress.txt :保存当前进度和关键经验 - • prd.json :任务列表及完成情况 小任务原则 每个 PRD 里的任务最好一次就能做完。任务拆得不够细,模型还没写完,上下文就快满了,后面的代码质量肯定会受影响。 比较合适的任务例子(一次迭代能完成): - • 添加一个数据库列并编写迁移 - • 在现有页面中新增一个 UI 组件 - • 修改一段已有的服务端逻辑 - • 给列表页加一个筛选下拉框 明显偏大的任务(需要继续拆分): - • 实现一个完整的仪表板 - • 新增一整套认证/登录体系 - • 对现有 API 做整体重构 AGENTS.md / CLAUDE.md 的更新很重要 每次迭代后,Ralph 会更新相关的 AGENTS.md 或 CLAUDE.md 文件,记录学习内容。这一步非常关键,因为 AI 编码工具会自动读取这些文件,使未来迭代以及后续的个人开发者都能直接受益。 适合记录的内容示例: - • 发现的模式 :这个代码库通常用 X 来实现 Y - • 常见陷阱 :修改 W 时别忘了同步更新 Z - • 有用的上下文 :设置面板的逻辑集中在组件 X 中 反馈循环 Ralph 只有在存在反馈机制时才能高效运行: - • 类型检查 :及时捕获类型错误 - • 自动化测试 :验证功能行为是否正确 - • 持续集成(CI) :保持通过状态,避免错误在迭代间累积 ### 工作流程 理解了 Ralph 的核心概念之后,接下来可以看看它在真实项目中的用法。整体流程其实并不复杂,本质上是一个清晰的三步闭环,把需求一步步推进到可用代码。 1. 创建 PRD(产品需求文档) 使用 Ralph 的第一步,是先把需求讲清楚。你可以直接用它自带的 PRD 技能来生成需求文档: # 加载 PRD 技能并创建需求文档 加载 prd 技能,为「你的功能描述」创建 PRD 在生成过程中,工具会针对一些关键细节向你确认,比如边界条件、使用场景等。根据你的回答,它会整理出一份结构化的 PRD,并保存到 tasks/prd-[feature-name].md 。 2. 转换为 Ralph 格式 生成 PRD 之后,需要把它转换成 Ralph 能理解的 JSON 格式: # 加载 Ralph 技能并转换 PRD 加载 ralph 技能,将 tasks/prd-[feature-name].md 转换为 prd.json Ralph 技能会解析 Markdown 格式的 PRD,把每个用户故事和任务拆分出来,生成一个结构化的 prd.json 文件。 3. 启动 Ralph 循环 当 PRD 和 prd.json 准备好后,就可以启动 Ralph 循环,让 AI 实例逐条执行任务: # 使用 Amp(默认) ./ralph/ralph.sh [max_iterations] # 使用 Claude Code ./ralph/ralph.sh --tool claude [max_iterations] 参数说明: - • --tool 指定使用的 AI 工具,可选 amp 或 claude - • max_iterations 最大迭代次数,默认是 10 次 运行后,Ralph 会进入一个自治循环,自动执行以下步骤: 步骤 1:创建功能分支 git checkout -b feature/your-feature-name Ralph 会读取 prd.json 里的 branchName 字段,自动在 Git 中创建对应的功能分支并切换过去。这样每个任务都有自己独立的分支环境,出问题也方便回滚和管理。 步骤 2:选择下一个任务 Ralph 会从 prd.json 中选出优先级最高、且尚未完成(passes: false)的用户故事。每一轮循环只处理一个任务,保证 AI 实例足够专注,也能有效降低出错的风险。 步骤 3:实现单个故事 Ralph 会为当前任务启动一个全新的 AI 实例,只专注处理这一条用户故事。由于任务本身被控制在合适的规模内,通常可以在一个上下文窗口内完成,输出也更集中、更可靠。 步骤 4:运行质量检查 在任务实现完成后,Ralph 会自动执行质量检查,包括: - • 类型检查 :比如 TypeScript 的 tsc --noEmit - • 单元测试 :例如 npm test - • 自定义检查命令 :可根据项目需要添加其他命令 步骤 5:提交代码 当所有质量检查通过后,Ralph 会自动提交代码: git add . git commit -m "feat: [Story ID] - [Story Title]" 如果检查未通过,AI 会尝试修复问题并重新运行检查,确保每次提交的代码都是可靠且可用的。 步骤 6:更新任务状态 提交成功后,Ralph 会在 prd.json 中将对应任务标记为已完成: {   "id": "US-001",   "title": "添加用户登录表单",   "passes": true  // 从 false 变为 true } 步骤 7:记录学习内容 Ralph 会把本轮迭代中学到的经验写入 progress.txt ,内容包括: - • 代码模式 :例如「这个功能通常用 X 实现」 - • 遇到的坑和解决方案 - • 有用的上下文信息 :例如「设置面板逻辑在组件 X 中」 后续迭代的新 AI 实例会读取这些内容,形成一个持续学习的机制,让每轮循环都能更顺畅。 步骤 8:重复或退出 Ralph 会检查 prd.json 中的任务状态: - • 还有未完成任务 → 返回 步骤 2 ,处理下一个任务 - • 所有任务完成 → 输出 COMPLETE 并结束循环 可视化流程图 : 查看交互式流程图 [2] (支持动画演示每个步骤) 这样,每轮迭代都会自动推进任务,直到整个 PRD 完全实现。 自动归档历史运行 每次启动新功能时,Ralph 会自动把之前的运行记录归档到 archive/YYYY-MM-DD-feature-name/ 目录。这样既保持了项目根目录的整洁,又完整保留了历史记录,方便日后查阅或回溯。 ## 快速上手指南 Ralph 提供多种安装方式,你可以根据项目需求灵活选择。 ### 前置条件 使用 Ralph 前,需要先准备好以下环境: - AI 编程工具(二选一) : - • Amp CLI - • Claude Code - jq 工具(用于处理 JSON) : - • Windows(PowerShell,需管理员权限): python winget install jqlang.jq - • Mac: python brew install jq - 在项目中初始化 Git 仓库 : cd my-project git init ### 方式一:项目内复制 将 Ralph 相关文件复制到你的项目中: # 在项目根目录执行 mkdir -p ralph cp /path/to/ralph/ralph.sh ralph/ # 根据使用的 AI 工具,复制对应的提示词模板 cp /path/to/ralph/prompt.md ralph/prompt.md    # 用于 Amp # 或者 cp /path/to/ralph/CLAUDE.md ralph/CLAUDE.md    # 用于 Claude Code chmod +x ralph/ralph.sh ### 方式二:全局技能安装 将 Ralph 相关技能复制到 Amp 或 Claude 的配置目录中,实现跨项目复用: # 对于 Amp cp -r skills/prd ~/.config/amp/skills/ cp -r skills/ralph ~/.config/amp/skills/ # 对于 Claude Code cp -r skills/prd ~/.claude/skills/ cp -r skills/ralph ~/.claude/skills/ ### 方式三:Claude Code 插件安装(推荐) 这是最简单的方式,直接从市场安装: # 1. 添加市场 /plugin marketplace add snarktank/ralph # 2. 安装插件 /plugin install ralph-skills@ralph-marketplace 安装后可用的技能: - • /prd — 生成产品需求文档 - • /ralph — 将 PRD 转换为 prd.json 格式 在实际使用中,这些技能通常不需要你手动调用。当你在 Claude 中发出以下类似请求时,它们会自动触发: - • "create a prd" , "write prd for" , "plan this feature" - • "convert this prd" , "turn into ralph format" , "create prd.json" ### 配置 Amp 的 auto-handoff(推荐) 如果任务太大,超出了单个上下文窗口,建议开启 Amp 的 auto-handoff 功能,自动切换上下文,保证 Ralph 可以处理大型任务。 在 ~/.config/amp/settings.json 中添加: {   "amp.experimental.autoHandoff": { "context": 90 } } ## 实战教程 接下来,让我们通过一个完整的实例,看看 Ralph 在实际项目中是如何发挥作用的。 ### 示例:使用 Claude Code 构建任务管理器应用 步骤一:初始化项目 # 创建项目 mkdir ralph-todo-app cd ralph-todo-app # 初始化 Git 仓库 git init 步骤二:创建 PRD 首先,使用 /prd 技能创建产品需求文档: /prd 创建一个简单、清晰、可扩展的 Todo 应用,支持本地存储持久化。功能包括:新增、编辑、删除以及筛选待办事项 AI 会收集需求细节,生成结构化 PRD 文档,并保存到 tasks/prd-todo-app.md 。 prd-todo-app.md 内容: 步骤三:转换为 Ralph 格式 有了 PRD 后,需要将其转换为 prd.json /ralph tasks/prd-todo-app.md AI生成的结果: prd.json 内容: 步骤四:复制 Ralph 相关文件 将 Ralph 相关文件复制到你的项目中: # 在项目根目录 cp ~/.claude/plugins/marketplaces/ralph-marketplace/ralph.sh ralph/ cp ~/.claude/plugins/marketplaces/ralph-marketplace/CLAUDE.md ralph/CLAUDE.md # Mac / Linux chmod +x ralph/ralph.sh 步骤四:运行 Ralph 循环 Windows(Git Bash): sh ./ralph/ralph.sh --tool claude 10 Mac / Linux: ./ralph/ralph.sh --tool claude 10 步骤五:查看 progress.txt progress.txt 会记录每次迭代中 AI 学到的内容: 这些信息会在后续迭代中自动提供给新的 AI 实例,帮助形成知识积累。 步骤六:查看 Git 提交历史 git log --oneline ralph/todo-app 每次提交都是原子化且可独立验证的,这让代码审查和回滚变得非常简单。 最终成果 经过上面几个步骤,我们的任务管理器应用应用就成功开发出来了! ## 常用技巧与最佳实践 ### 浏览器验证 对于前端任务,如果验收标准需要在浏览器中验证。Ralph 会根据你安装的 dev-browser 技能或 playwright MCP 服务,自动执行相关操作: - • 自动打开浏览器 - • 导航到目标页面 - • 与 UI 交互,确认功能是否正常 ### 监控与调试 当你想了解 Ralph 当前运行状态时,可以使用以下命令: # 查看哪些任务已完成 cat prd.json | jq '.userStories[] | {id, title, passes}' # 查看之前迭代记录的学习内容 cat progress.txt # 查看最近的 Git 提交历史 git log --oneline -10 # 查看当前所在分支 git branch ### 自定义提示词模板 将 prompt.md (Amp)或 CLAUDE.md (Claude Code)复制到项目中后,可以根据项目实际情况进行定制: - • 添加项目特定的质量检查命令 - • 写入代码库约定和编码规范 - • 提供技术栈相关的常见陷阱或注意事项 ### 适用场景 ✅ 适合 Ralph 的情况: - • 功能迭代 :添加新功能或修复 Bug - • 小模块开发 :独立功能模块 - • 明确需求 :有清晰的 PRD 和验收标准 - • 原型开发 :快速构建 MVP ❌ 不太适合的情况: - • 探索性开发 :需求不明确,需要大量试验 - • 大规模重构 :涉及多个文件的系统性变更 - • 安全关键代码 :需要人工严格审查的部分 - • 性能优化 :需要深入分析系统架构的场景 ### 常见问题 Q1:Ralph 在某次迭代中卡住了 A:解决方法: # 查看当前未完成任务 cat prd.json | jq '.userStories[] | select(.passes == false)' # 手动运行质量检查,找出问题 npm run typecheck npm run test # 修复问题后,重新启动 Ralph ./ralph/ralph.sh Q2:任务太大,AI 无法在单个上下文窗口内完成 A:手动编辑 prd.json ,将较大的任务拆分成多个小任务;如果使用 Amp,可以启用 auto-handoff 功能,让 Ralph 自动处理超大任务,并在不同上下文间继续执行。 Q3:AGENTS.md 更新不准确 A:检查并修正 AGENTS.md ,然后在 prompt.md 或 CLAUDE.md 中添加明确指令,保证未来迭代能正确记录学习内容。 ## 写到最后 Ralph 通过自治循环模式,带来了一种新的 AI 编程思路:不再指望单个 AI 实例完成所有事情,而是通过迭代和共享记忆,让多个 AI 实例协作完成复杂任务。 这背后其实是一种信任的变化:不再盯着每一步对不对,而是相信模型在反复尝试中会慢慢走对;相信反馈能把跑偏的地方拉回来;也相信边界条件不会让成本失控。 正如 Geoffrey Huntley 所说: Ralph 不是用来取代开发者,而是自动化那些枯燥的部分,让我们能专注于更有趣的工作。 如果你也希望提高 AI 协作开发的效率和质量,不妨在下一个项目中试试 Ralph。 GitHub 地址 :https://github.com/snarktank/ralph 引用链接 [1] Ralph 循环模式: https://ghuntley.com/ralph/ [2] 查看交互式流程图: https://snarktank.github.io/ralph/ 既然看到这里了,如果觉得有启发,随手点个赞、推荐、转发三连吧,你的支持是我持续分享干货的动力。