从原型到代码的完美衔接,AI友好的需求描述模板
上周发了原型文章后,很多朋友兴冲冲地做完原型,然后...
"Claude,照着这个原型帮我写代码"
结果:
Claude写了一堆看起来很像的界面
但点击按钮没反应
数据逻辑一团糟
边界情况完全没考虑
为什么会这样?
因为你给Claude看到的只是原型的"外表",但它不知道:
按钮点击后应该发生什么
数据从哪里来,要存到哪里去
出错了该怎么处理
不同用户状态下的行为差异
简单说:Claude看得见界面,但看不见逻辑。
让我分享一个朋友的经历:
原型:很漂亮的界面,用户可以添加任务、标记完成
给Claude的指令:
帮我实现这个任务管理界面,要能添加任务和标记完成
Claude的实现:
✅ 界面完全一样
✅ 可以添加任务
✅ 可以点击完成
❌ 刷新页面数据就丢了
❌ 任务没有优先级排序
❌ 不能编辑已添加的任务
❌ 没有任务分类功能
❌ 完成的任务无法撤销
问题出在哪里?
小张只描述了"what"(界面长什么样),但没有描述"how"(逻辑如何运行)。
经过无数次踩坑,我总结出了一套"AI友好的需求文档模板":
产品概述:一句话说清楚要做什么
用户流程:详细的步骤拆解
数据结构:信息如何组织和存储
交互逻辑:每个操作的具体行为
状态管理:不同情况下的界面表现
错误处理:异常情况的应对方案
技术要求:实现的技术细节
让我们用实际案例来讲解每一部分:
"做一个任务管理工具"
产品名称:个人任务管理器
核心价值:帮助用户快速记录、分类和追踪日常任务的完成情况
目标用户:需要管理个人待办事项的上班族和学生
使用场景:工作中记录临时任务,生活中管理个人事务
成功标准:
- 用户能在10秒内添加一个新任务
- 用户能快速找到未完成的重要任务
- 数据在浏览器关闭后仍然保存
为什么这样写?
Claude能理解产品的边界和重点
明确了功能的优先级
给出了可衡量的标准
"用户可以添加任务和标记完成"
主要用户流程:
流程1:添加新任务
1. 用户点击"添加任务"按钮
2. 弹出输入框,包含:
- 任务标题(必填)
- 任务描述(可选)
- 优先级选择(高/中/低,默认中)
- 截止日期(可选)
3. 用户填写完成后点击"保存"
4. 系统验证输入(标题不能为空)
5. 新任务出现在任务列表顶部
6. 输入框自动清空并关闭
流程2:标记任务完成
1. 用户点击任务左侧的复选框
2. 任务标题显示删除线效果
3. 任务卡片背景变为灰色
4. 任务自动移动到列表底部
5. 系统显示完成提示:"任务已完成!"
6. 提供"撤销"按钮(5秒后自动消失)
流程3:编辑现有任务
1. 用户双击任务标题
2. 标题变为可编辑状态
3. 用户修改后按Enter保存,或按Esc取消
4. 保存后显示确认提示:"任务已更新"
这样写的好处:
Claude知道每一步的具体操作
包含了用户反馈和状态变化
考虑了取消和撤销操作
"需要存储任务信息"
数据结构设计:
Task对象结构:
{
id: string, // 唯一标识符,使用时间戳生成
title: string, // 任务标题,最长100字符
description?: string, // 任务描述,可选,最长500字符
priority: 'high' | 'medium' | 'low', // 优先级,默认medium
completed: boolean, // 完成状态,默认false
createdAt: Date, // 创建时间
completedAt?: Date, // 完成时间,可选
dueDate?: Date // 截止日期,可选
}
存储方案:
- 使用localStorage存储任务数组
- 存储key:'taskManager_tasks'
- 数据格式:Task[]
- 每次操作后自动保存到localStorage
数据操作:
- 添加任务:push到数组末尾,重新排序
- 删除任务:根据id过滤数组
- 更新任务:根据id找到对象并更新属性
- 排序规则:未完成任务在前,按优先级和创建时间排序
为什么要这么详细?
Claude知道如何组织代码结构
避免数据类型错误
明确了存储和操作逻辑
如果这里不会写,可以让 Claude 帮忙设计。
"点击按钮有相应的反应"
交互逻辑详述:
1. 添加任务按钮
- 默认状态:蓝色背景,白色文字"+ 添加任务"
- 悬停状态:背景色加深10%
- 点击后:弹出模态框,按钮变为不可点击状态
- 模态框打开时:自动聚焦到标题输入框
2. 任务复选框
- 未完成状态:空心圆圈,边框为灰色
- 悬停状态:边框变为蓝色
- 已完成状态:蓝色背景,白色对勾图标
- 点击动画:0.2秒的渐变过渡效果
3. 优先级显示
- 高优先级:红色圆点 + "高"
- 中优先级:黄色圆点 + "中"
- 低优先级:绿色圆点 + "低"
- 位置:任务标题右侧
4. 任务卡片状态
- 普通状态:白色背景,浅灰色边框
- 悬停状态:浅蓝色背景,蓝色边框
- 已完成状态:浅灰色背景,删除线文字
- 过期状态:浅红色背景,红色边框
5. 排序和筛选
- 默认排序:未完成在前,按优先级(高→中→低),然后按创建时间(新→旧)
- 已完成任务:显示在列表底部,按完成时间倒序
- 筛选选项:全部/未完成/已完成/高优先级
这样描述的价值:
Claude能生成准确的CSS样式
交互效果更专业
用户体验更流畅
"界面要能实时更新"
状态管理方案:
应用状态:
- tasks: Task[] // 所有任务列表
- filter: FilterType // 当前筛选条件
- isLoading: boolean // 加载状态
- isModalOpen: boolean // 添加任务模态框状态
- editingTaskId: string | null // 正在编辑的任务ID
状态更新场景:
1. 添加任务:
- 点击"添加任务" → isModalOpen = true
- 提交表单 → 新任务添加到tasks,isModalOpen = false
- 取消操作 → isModalOpen = false
2. 完成任务:
- 点击复选框 → 目标任务的completed状态切换
- 自动重新排序任务列表
- 显示撤销提示,5秒后自动消失
3. 编辑任务:
- 双击标题 → editingTaskId = 任务ID
- 保存编辑 → 更新任务信息,editingTaskId = null
- 取消编辑 → editingTaskId = null
4. 筛选变更:
- 点击筛选按钮 → filter状态更新
- 任务列表根据新筛选条件重新渲染
数据持久化:
- 每次tasks状态变更后,自动保存到localStorage
- 页面加载时,从localStorage恢复任务数据
- 如果localStorage为空,初始化为空数组
"要处理各种错误情况"
错误处理方案:
1. 输入验证错误:
- 任务标题为空:显示红色提示"请输入任务标题"
- 标题超过100字符:显示"标题不能超过100字符"
- 描述超过500字符:显示"描述不能超过500字符"
- 截止日期早于今天:显示"截止日期不能早于今天"
2. 存储错误:
- localStorage写入失败:显示提示"保存失败,请检查浏览器设置"
- localStorage已满:显示"存储空间不足,请清理浏览器数据"
- 数据读取失败:使用默认空数组,显示"数据加载失败,已重置"
3. 操作错误:
- 重复提交:防抖处理,按钮点击后0.5秒内不可再次点击
- 网络中断:所有操作基于本地存储,不受网络影响
- 页面刷新:数据从localStorage恢复,无数据丢失
4. 用户体验优化:
- 所有错误信息3秒后自动消失
- 错误提示使用红色背景,成功提示使用绿色背景
- 关键操作提供撤销功能
- 长时间无操作后提醒用户保存
错误信息设计:
- 位置:页面顶部固定位置
- 样式:圆角矩形,图标+文字
- 动画:从顶部滑入,淡出消失
- 可关闭:提供×按钮手动关闭
"用React写"
技术实现要求:
前端框架:
- React 18 + TypeScript
- 使用函数组件和Hooks
- 状态管理使用useState和useReducer
- 副作用处理使用useEffect
样式方案:
- Tailwind CSS 3.x
- 响应式设计,支持手机和桌面端
- 深色模式支持(可选)
- 平滑过渡动画使用transition-all
组件结构:
App
├── TaskList (任务列表容器)
│ ├── TaskItem (单个任务组件)
│ └── TaskFilter (筛选组件)
├── AddTaskModal (添加任务模态框)
└── Toast (提示消息组件)
数据处理:
- 使用localStorage API进行数据持久化
- 封装storage操作为自定义Hook:useTaskStorage
- 任务排序逻辑封装为工具函数
- 日期处理使用原生Date对象
性能优化:
- 使用React.memo优化TaskItem组件
- 使用useMemo缓存排序后的任务列表
- 使用useCallback缓存事件处理函数
- 大列表使用虚拟滚动(任务超过100个时)
浏览器兼容:
- 支持Chrome 80+, Firefox 75+, Safari 13+
- 使用Babel进行ES6+语法转换
- localStorage降级方案:不支持时使用内存存储
这里也是,如果不懂可以让模型帮忙生成一个标准方案,而不是自己瞎写
把所有部分组合起来,就是一份完整的AI友好需求文档:
项目:个人任务管理器 v1.0
=== 产品概述 ===
[产品概述内容]
=== 用户流程 ===
[详细的用户流程]
=== 数据结构 ===
[数据结构和存储方案]
=== 交互逻辑 ===
[每个交互的详细描述]
=== 状态管理 ===
[状态定义和更新逻辑]
=== 错误处理 ===
[各种错误场景的处理]
=== 技术要求 ===
[实现的技术细节]
=== 开发优先级 ===
Phase 1 (MVP):
- 添加任务功能
- 标记完成功能
- 本地存储功能
Phase 2 (增强):
- 编辑任务功能
- 优先级设置
- 筛选功能
Phase 3 (优化):
- 响应式设计
- 动画效果
- 性能优化
=== 验收标准 ===
- [ ] 用户能在10秒内添加新任务
- [ ] 任务数据在页面刷新后保持
- [ ] 所有交互都有视觉反馈
- [ ] 错误情况有友好提示
- [ ] 移动端体验良好
有了完整的需求文档,给Claude的提示词就很简单了:
我要开发一个个人任务管理器,已经完成了详细的需求分析和原型设计。
需求文档:[附上完整的需求文档]
原型链接:[你的原型链接]
请按照需求文档的技术要求,实现Phase 1的核心功能:
1. 添加任务功能
2. 标记完成功能
3. 本地存储功能
请从App组件开始,逐步实现所有相关组件。代码要包含:
- 完整的TypeScript类型定义
- 详细的注释说明
- 错误处理逻辑
- 基本的样式实现
实现完成后,我会进行测试并给出反馈进行调整。
这样的提示词Claude能完美理解,生成的代码质量会非常高!
用用户的视角描述:不要说"系统做什么",要说"用户看到什么"
包含边界情况:正常流程 + 异常流程都要考虑
提供具体示例:抽象描述 + 具体例子
定义清晰的验收标准:什么情况下算是完成了
分阶段实施:MVP + 增强功能 + 优化改进
基于你的原型,写一份AI友好的需求文档:
使用模板:按照7个部分的结构写需求文档
详细描述:至少包含3个主要用户流程
考虑边界情况:每个功能至少考虑2种异常情况
技术要求:明确框架、样式、存储方案
给Claude测试:用你的需求文档让Claude生成代码
对比结果:记录Claude的理解准确度
迭代优化:根据Claude的反馈优化需求文档
把你的需求文档分享到评论区,我会帮你review并提供改进建议!
下期预告:《迭代开发:用AI快速试错的正确姿势》
我们会学习如何用AI进行敏捷开发,包括MVP策略、版本管理、用户反馈收集和快速迭代的完整workflow。从需求到产品的最后一公里!
记住:好的需求文档是AI理解你产品逻辑的桥梁。投入时间写清楚需求,能节省10倍的调试时间。