PRD 检查·需求评审
需求返工,十有八九不是功能做错了,而是文档没说清:没有背景、目标不量化、
不写目标用户、范围只有「做什么」没有「不做什么」、通篇「尽快 / 良好 / 高性能」这类
没法验收的词、需求条目既没编号也没优先级、把「用 Redis 缓存」这种实现方案直接写成了需求。
本工具按小节与列表项解析 PRD,逐项检查要素是否齐全,对模糊表述与实现泄漏给出定位到行的提示,
最后按 高 / 中 / 低 输出分级清单与结论。
执行原则
- 只判有没有写。 只检查要素是否齐全与是否有明显反模式;不评价需求是否有价值、优先级排得对不对——那需要业务判断。
- 定位到行。 每条结论都要给出行号(条目级问题还要给出所属小节);不要只丢一个「缺背景」这种无处下手的结论。
- 不臆造内容。 只指出缺失、模糊与反模式,给出补正方向;不要替用户补写需求条目、编造量化指标或验收标准。
- 不重复刷屏。
N8在个别条目缺失时逐条报、全文没有优先级标记时合并为一条;不要把同一类问题对每一行重复报出。 - 只读不改原文。 只输出清单与建议,不修改 PRD 文件本身;不要把「建议补什么」说成「已经改好了」。
何时使用
CRITICAL: 只要用户提出「这份 PRD 能不能开发、能不能验收 / 评审前帮我看看还漏了什么 / 需求写得够不够清楚」,就必须使用本 skill,即使看起来可以用别的方式解决。
- PRD 要拿去评审之前,先做一次完整性自检。
- 用户给出需求文档,问「这份 PRD 能不能开发 / 能不能验收」。
- 需求评审、迭代排期前的统一校对。
怎么用
python3 scripts/prd_lint.py PRD.md
python3 scripts/prd_lint.py PRD.md --json
python3 scripts/prd_lint.py --sample
退出码:0 = 未发现问题;1 = 发现问题(或输入不可读/为空)。
输入与解析方式
- 输入为 Markdown 或纯文本;按 UTF-8(含 BOM)读取。
- 需求条目:
## 需求 / 功能 / 特性 / 故事 / 待办 / 迭代(或Feature / Story / Backlog)
小节下的顶层列表项(-/*/1.),且正文含 6 个以上汉字。
更深的缩进项视为细节,不单独计为需求条目。 - 文档大标题(一级标题)不视为需求小节,避免把整篇文档误判为需求条目。
- 需求条目编号识别:
REQ-1/FR-01/[12]/#3/需求1(任意位置)或行首3.1形式。 - 优先级识别:
P0–P4、【高/中/低】、[高]、高优先级、优先级:、Must/Should/Could。
检查项与规则码
| 规则码 | 含义 | 严重度 | 定位 |
|---|---|---|---|
N1 |
缺背景 / 问题陈述 | 高 | 全文 |
N2 |
缺目标 | 高 | 全文 |
N3 |
目标无量化成功指标 | 中 | 全文 |
N4 |
缺目标用户 / 角色 | 中 | 全文 |
N5 |
缺范围(做什么 / 不做什么) | 中 | 全文 |
N6 |
模糊词(尽快 / 良好 / 友好 / 高性能 / 等等 / 若干 / 较多 …) | 中 | 行 |
N7 |
缺验收标准 | 高 | 全文 |
N8 |
需求无优先级(P0/P1/高/中/低) | 中 | 需求条目 / 全文 |
N9 |
缺异常 / 边界场景 | 中 | 全文 |
N10 |
缺版本号或日期 | 低 | 全文 |
N11 |
需求条目无编号 | 中 | 需求条目 |
N12 |
写成技术实现方案而非需求 | 中 | 需求条目 |
N13 |
缺依赖 / 前置条件 | 低 | 全文 |
EMPTY_DOC |
文档内容几乎为空 | 高 | 全文 |
> 说明:N8 在「文档其他位置已有优先级标记、个别条目缺失」时逐条报;
> 若全文完全没有任何优先级标记,则合并为一条全文级提示,避免刷屏。
输出示例(节选)
需求条目数:5 | 文档行数:15
问题合计 22 项:高 3 · 中 17 · 低 2
结论:存在关键要素缺失,先补齐再评审
—— 高风险 ——
[N1] 缺背景 / 问题陈述
· 说明:没有交代为什么要做,评审时无法判断需求是否成立
· 建议:补「背景与问题」:现状是什么、要解决什么问题
[N2] 缺目标
· 建议:补「目标」小节,写清本期要达成的结果
—— 中风险 ——
[N6] 模糊表述:「友好」(第 7 行)
[N11] 需求条目无编号:「登录页支持手机号验证码登录,界面要友好」(第 7 行 · 小节「功能需求」)
[N12] 写成技术实现而非需求:「用 Redis 缓存榜单数据,并加索引优化查…」(第 10 行)
—— 低风险 ——
[N10] 缺 版本号、日期
[N13] 缺依赖 / 前置条件
边界与免责
- 纯标准库 Python(3.12+),只读,无网络请求,无
subprocess/eval/exec/os.system。 - 只判「要素有没有写」与「有没有明显反模式」,不评价需求本身是否有价值、优先级是否排得对
(那需要业务判断)。 N2(缺目标)与N3(无量化指标)为两条独立判断:文档完全没写目标时只报N2;
写过目标但全文找不到任何可衡量指标时报N3。两者可能同时出现。N12只扫描需求条目内的实现词(如 Redis / 加索引 / 建表 / 改配置),
因此「依赖:Redis 中间件」这类写在小节正文里的内容不会被误报。- 表格/编号要求以列表项为准;若需求以三级标题而非列表项组织,
N11/N12不会对其生效。 - Word/PDF 请先转为 Markdown 或纯文本。
- 内置样例(
--sample)中的产品、公司与示例内容全部虚构,仅用于演示,不涉及任何真实系统或组织。