PRD驱动开发:我如何使用30多个PRD与AI代理协同交付
SaasMaker的RalphBlaster工作流能在45分钟内根据一行工单生成完整的拉取请求,开发者在实现过程中无需编写任何代码。1
我尝试过这种模式。它确实有效。但它也会以演示视频未展示的方式失败。
TL;DR
在过去六个月中,我为AI代理任务编写了30多个PRD。这种模式在需求明确、验收标准清晰的任务中表现良好:CRUD端点、测试补充、遵循既定模式的UI组件。但在需求模糊、涉及新架构决策以及需要迭代式人工判断的场景中,它会失败。我的PRD模板从简单的用户故事格式演变为包含文件位置、测试预期、约束条件和明确的”禁止修改”列表的结构化文档。这一演变的原因是代理对模糊PRD的解读出乎意料。
我实际使用的工作流
第1步:创建工单
我用自然语言定义需要完成的事项。具体程度比我最初意识到的更为重要:
模糊(产生不可预测的结果):
Add user preference saving to the settings page.
具体(产生可预测的结果):
Add dark mode toggle to /settings. Persist to user_preferences
table (column: dark_mode, type: boolean, default: false).
Use existing SettingsForm component. Add toggle below the
notification section. No new dependencies.
第二个版本对代理施加了足够的约束,使输出符合预期。第一个版本则给我生成了一个带有新React组件、三个新npm包的设置页面,并使用了localStorage实现而非我所需的数据库持久化。
第2步:生成或编写PRD
我的/prd技能会将工单转换为包含用户故事、验收标准、文件位置和测试预期的结构化PRD。2一个典型的PRD如下所示:
## Story: Add dark mode toggle
**As a** user
**I want to** toggle dark mode from settings
**So that** I can read comfortably in low light
### Acceptance Criteria
- [ ] Toggle appears in SettingsForm below notifications
- [ ] Persists to user_preferences.dark_mode (boolean)
- [ ] Default: false (light mode)
- [ ] Toggle state reflects current DB value on page load
### Files to Modify
- app/routes/settings.py (add dark_mode to form handler)
- app/templates/settings.html (add toggle component)
- app/models/user.py (add dark_mode column if missing)
### Files NOT to Modify
- app/static/css/styles.css (dark mode CSS already exists)
- app/templates/base.html (already reads dark_mode class)
### Test Expectations
- Test toggle persists to database
- Test default value on new user
- Test toggle reflects current state on reload
“Files NOT to Modify”部分是模板演变中最重要的改进。没有这一部分,代理会热心地”改进”相关文件,引入我未请求也不需要的更改。
第3步:代理实现
代理在隔离的git worktree中工作,防止干扰我当前的分支:3
# Create isolated worktree for agent task
git worktree add ../worktrees/dark-mode -b feature/dark-mode
# Agent works in ../worktrees/dark-mode/
# I continue working in main workspace
# Review and cleanup after merge
git worktree remove ../worktrees/dark-mode
我的递归守卫会监控代理的派生行为。我的git安全守护程序会阻止代理强制推送或提交凭证。这些钩子自动运行,我在实现过程中无需监督代理。
第4步:审查
代理完成后会收到通知。我根据PRD验收标准审查差异。如果所有标准都通过,我就合并。否则,我会手动修复或使用更新的上下文重新启动代理。4
PRD驱动开发有效的场景
具有明确数据模型的CRUD端点。 PRD指定了模型、路由和响应格式。代理生成的样板代码与现有模式一致。
为现有代码添加测试。 “为app/content.py编写测试,覆盖load_post_by_slug的有效slug、无效slug和文件缺失场景”会产生有用的测试,因为函数已经存在且验收标准是客观的。
遵循既定模式的UI组件。 “使用与指南页面相同的标签模式,为博客列表页面添加分类筛选器”之所以有效,是因为代理可以参考现有模式。
具有明确schema的数据库迁移。 PRD指定了列名、类型、默认值和约束条件。代理生成迁移脚本并更新模型。
PRD驱动开发失败的场景
需求模糊。 “让博客更好”不是PRD。代理会做出更改,但不会符合您的意图,因为您的意图未被明确表达。
新架构决策。 当我需要设计协商系统的共识模型时,没有任何PRD能够捕捉这个决策。我需要探索选项、评估权衡并迭代设计。这需要我的协商技能,而非PRD。
性能优化。 “让页面加载更快”需要分析、测量和迭代调查。代理无法通过PRD来分析您的生产流量模式。
安全关键代码。 针对认证系统的PRD生成的代码只处理了正常路径。认证中的边缘情况(时序攻击、会话固定、非标准流程中的CSRF)需要PRD无法编码的人类专业知识。
我的PRD模板演变历程
版本1(第1个月):简单用户故事
As a user, I want to save preferences so I can customize my experience.
问题: 太模糊。代理对存储机制、UI位置和范围做出了合理但错误的假设。
版本2(第2个月):添加文件位置
## Story: Save preferences
### Files to Modify
- app/routes/settings.py
- app/templates/settings.html
问题: 有所改善,但代理仍会在未经许可的情况下”改进”相邻文件。
版本3(第4个月):添加约束条件
## Story: Save preferences
### Files to Modify (only these)
- app/routes/settings.py
- app/templates/settings.html
### Constraints
- No new dependencies
- Use existing database models
- Do not modify CSS
问题: 当约束条件与训练数据中的”最佳实践”冲突时,代理有时会忽略约束。
版本4(当前版本):明确排除项 + 测试预期
当前模板增加了”Files NOT to Modify”、明确的测试预期和验收标准复选框。此版本大约85%的情况下能产生可预测的结果。剩余15%需要使用澄清后的指令进行第二轮处理。5
30个PRD的模式库
在编写30多个PRD后,模式浮现:
| PRD类型 | 成功率 | 平均代理耗时 | 平均审查耗时 |
|---|---|---|---|
| CRUD端点 | ~95% | 10-15分钟 | 5分钟 |
| 测试补充 | ~90% | 5-10分钟 | 10分钟 |
| UI组件(现有模式) | ~85% | 15-20分钟 | 10分钟 |
| 数据库迁移 | ~90% | 5-10分钟 | 5分钟 |
| Bug修复(含复现步骤) | ~80% | 15-25分钟 | 15分钟 |
| 新功能(创新型) | ~50% | 30-45分钟 | 30+分钟 |
创新型功能的成功率(50%)解释了为什么PRD驱动开发是我工作流的补充而非替代。一半的创新型工作需要PRD无法预先捕捉的迭代过程。
关键要点
面向独立开发者: - 从一种定义明确的PRD类型(CRUD、测试)开始,验证工作流后再扩展到复杂任务 - 在每个PRD中添加”Files NOT to Modify”;代理会热心地”改进”您未要求修改的代码 - 使用git worktree隔离代理工作;失败的代理运行的清理成本应该只需一个命令,而非一场git考古
面向工程管理者: - PRD质量决定代理输出质量;在扩大自主代理使用规模之前,先投资于PRD模板和审查流程 - 跟踪无需修改直接合并的比率来衡量工作流成熟度;随着PRD模板的演变,该比率应有所提升 - 新架构工作和安全关键代码不应通过PRD委派;将代理委派保留给定义明确、可重复的任务
参考文献
-
@saasmakermac。”RalphBlaster自主工作流演示。”X/Twitter,2026年1月。 ↩
-
作者使用Claude Code技能实现的PRD模板。2025年8月至2026年2月期间编写了30多个PRD。 ↩
-
GitHub - snarktank/ralph。”Ralph:用于开发任务的自主AI代理循环。”2026年。 ↩
-
作者对30多个代理任务的PRD成功率分析,记录在项目MEMORY.md中。 ↩