Think:从问题到一份 SPEC
和全班一起把整学期产品写成需求文档,分清「整学期要做的」和「本次只做的」。
- 形成一份包含用户、场景、功能范围与验收条件的 SPEC.md v0.1
- 把「能保存」等模糊说法改写为可逐条检查的验收条件
- 分清 SPEC 与 Prompt、产品目标与本次开发范围
本页目录
本节目标
不急着写代码。这一节,全班要一起把整学期的产品需求写成一份 SPEC.md,并冻结为 v0.1:
- 说清这个工具给谁用、解决什么问题。
- 分清「整学期要做的」和「本次只做的」。
- 把「能保存」这类模糊说法,改写成能逐条检查的验收条件。
本节交付:一份全班共同确认的
SPEC.mdv0.1,保存在项目根目录。
课前先知道:为什么要先写需求
先问自己一个问题:你上一次找不到自己的学习笔记,是什么时候?
课堂笔记、课程资料、临时想法散在聊天记录、文件夹和各种工具里——记下来了,要用的时候却找不到,更难用于复习。这个学期的项目就从这个真实问题出发:做一个「个人 AI 学习笔记本」,整学期持续迭代这一个产品。
先说问题,不急着说技术。增删改查(CRUD)不是目的,它只是第一步的实现手段。
谁在用这个工具
- 用户:学生本人,个人使用。
- 日常:记录课堂内容,随时重新查看。
- 进阶:整理重点、查询资料、辅助复习。
先想清楚「谁在什么情况下需要它」,再决定做什么功能。这个笔记本是全班共同讨论、共同使用一份完整的产品需求——不是每人各做一个不同的产品。
一份笔记的一生
一份笔记写下来之后,后面还应该能发生什么?
- 记录:写下来,保存并重新找到。
- 整理:提炼摘要和知识点,由人确认。
- 查找 / 问答:找到相关资料,回答时显示依据。
- 复习:形成要点和简单的练习任务。
这是整学期的产品主线。本次的第一步,只是把「记录」做可靠。
写 SPEC 的六条基本原则
- 问题先于功能。 先回答为什么要做、为谁做,不从页面和按钮开始。
- 场景先于技术。 先讲清用户怎么使用,再决定技术方案;不让 AI 替我们猜需求。
- 完整目标与本次范围分开。 可以定义整个学期的产品愿景,但本次只实现一个可完成、可验证的闭环。
- 明确不做什么。 登录、云同步这类没列入当前范围的内容,不因为 AI 能生成就顺手加上。
- 需求必须可验收。 「方便」「智能」「保存成功」不是可验证标准;要改写成具体操作和可观察的结果。
- SPEC 是协作基线,不是一次性 Prompt。 确定后保存到仓库;以后需求变了,先改 SPEC,再让 AI 改实现。
从想法到 SPEC 的六步
发现问题
↓
确定用户与典型场景
↓
明确产品目标与主要流程
↓
划分范围:本次 / 后续 / 不做
↓
写出可操作的验收条件
↓
检查一致性,确认并保存 SPEC 版本
每一步只回答一个关键问题:
| 步骤 | 关键问题 | 本模块的答案 |
|---|---|---|
| 问题 | 为什么做? | 学习资料零散,整理和查找困难 |
| 场景 | 谁在什么情况下用? | 学生记录、整理、查询、复习 |
| 目标 | 最终达到什么效果? | 一套可逐步加入 AI 能力的个人学习笔记本 |
| 范围 | 这次做什么、不做什么? | 本次只做 CRUD 与本地保存 |
| 验收 | 如何证明它真的有用? | 新建、修改、删除后刷新,数据状态正确 |
| 确认 | 大家理解一致吗? | 冻结 SPEC.md v0.1,作为开发依据 |
两个必须分清的区别
- SPEC 与 Prompt: SPEC 规定「要做什么、做到什么程度」,是较长期的要求依据;Prompt 是某一次交给 AI 的执行指令。不能用一段临时聊天代替产品要求。
- 产品级 SPEC 与本次开发任务: 可以先描述长期目标,但只能要求 AI 实现本次划定的范围。规划完整,不等于一次做完。
整学期的四个功能区,和本次只做的一小步
整学期,我们要建设四个功能区:
| 功能区 | 内容 | 什么时候做 |
|---|---|---|
| F1 笔记管理 | 增删改查;以后增加分类和搜索 | 本次只做增删改查 |
| F2 AI 整理 | 摘要和知识点,人确认后保存 | 后续 |
| F3 资料问答 | 基于导入资料回答,标出处 | 后续 |
| F4 复习辅助 | 复习任务、要点与简单练习 | 后续 |
本次范围只有一行:V0 = 新建、查看、编辑、删除 + 浏览器本地保存 + 空状态。
不做: 登录、同步、LLM API、RAG、Agent、部署。
想清楚「不做」和想清楚「做什么」同样重要——一次性做所有功能,只会让每个功能都做不可靠。
「能保存」怎样才算真的能保存
把模糊说法改写成看得见的结果:
| 操作 | 看得见的结果 |
|---|---|
| 新增 | 保存后列表出现新笔记 |
| 查看 | 点开能读到完整正文 |
| 修改 | 重新打开仍是修改后的内容 |
| 删除 | 确认后消失,刷新也不恢复 |
| 持久化 | 同一浏览器刷新 / 重开后数据仍在 |
| 空数据 | 首次打开有明确提示,不报错 |
写进 SPEC 的验收条件:
- AC01:新建一条笔记,列表出现,内容正确。
- AC02:编辑标题和正文,保存后再次打开仍为新值。
- AC03:刷新后,未删除的笔记仍然存在。
- AC04:删除后列表不显示,刷新后不会恢复。
- AC05:没有笔记时页面正常,且有可理解的提示。
先判断,再验证: 页面弹出「保存成功」,算满足持久化了吗?——不算。提示只是一个界面事件,数据是否真的写入,要刷新、必要时关掉再重新打开才算数。
本次交付:冻结 SPEC.md v0.1
把课堂讨论的结论保存为项目根目录的 SPEC.md,检查它包含:
- 产品目标
- 目标用户与使用场景
- 四个功能区(F1–F4)
- 本次 V0 开发范围(唯一编码范围)
- 验收条件 AC01–AC05
- 非目标(明确不做什么)
- 技术边界与版本规划
参考结构(以课堂讨论形成的版本为准):
# 个人 AI 学习笔记本 — SPEC
版本:0.1
1. 产品目标
2. 目标用户与使用场景
3. 功能范围(整学期):F1–F4
4. V0 本次开发范围:新增 / 查看 / 编辑 / 删除 / 本地保存 / 空状态
5. V0 验收条件:AC01–AC05
6. 后续模块的产品级验收目标
7. 非目标与后续候选
8. 技术边界
9. 版本规划
冻结不是永不再改:v0.1 是这一轮开发的基线。以后需求变化,先改 SPEC 再动代码——不能因为 AI 临时想到某个功能,就悄悄扩大范围。
下一节
需求写清楚了,就轮到让 AI 动手:进入 C202 · 让 AI 做出第一版。
