做产品 PMaker
空格的键盘空格的键盘
与 AI 协作

规格、提示、约束的分工

规格、提示、约束的分工 | 与 AI 协作 | 做产品

规格、提示、约束的分工

同一句话该写在哪,取决于它要管多久。临时的写在提示里,一个模块内通用的写进规格,整个项目通用的写进约束文件。

你会遇到的现象

  • 每次对话都要重复交代同样的规矩

  • 约束文件越写越长,最后它开始不遵守了

  • 改到第三轮,它推翻了第一轮定好的数据结构

三层各放什么

层放在哪写什么典型内容

约束 CLAUDE.md 整个项目一直成立的规矩 组件必须实现四态、间距只用这六个值、权限一律后端校验

规格 docs/specs/模块名.md 某个模块的数据、状态、边界 评论支持两层楼中楼、删除是软删除、超 500 字折叠

提示 你打的那段字 这一次要做的具体事 把这个按钮挪到右上角、这里的间距改成 24

规格这一层是最容易被跳过的。跳过之后,模块内的决定只存在于对话历史里,而对话历史会随着长度变长逐渐失效。

三层之间有个顺序关系:约束是背景,规格是这个模块的设定,提示是当下的动作。生成代码时三层同时生效,冲突时以下层为准——但下层要覆盖上层,最好明确说出来,不要指望它自己判断。

同一句话该写在哪,取决于它要管多久 有效期

约束 CLAUDE.md 整个项目一直成立的规矩 组件必须实现四态 · 间距只用这六个值

规格 docs/specs/模块.md 某个模块的数据、状态、边界 评论支持两层楼中楼 · 删除是软删除

提示 你打的那段字 这一次要做的具体事 把这个按钮挪到右上角

同一句话说了三次,挪进规格;在两个以上模块里都要重申,挪进约束。三次是个比「感觉说得有点多」可靠的阈值。 三层同时生效,冲突时以下层为准——但下层要覆盖上层,最好明确说出来,别指望它自己判断。

中间那层最容易被跳过。跳过之后,模块内的决定就只存在于对话历史里——而对话历史会随着长度变长逐渐失效。「改到第三轮它推翻了第一轮定好的数据结构」,根因几乎都在这里。

什么时候往上挪

  • **同一句话说了三次,挪进规格。**三次是个不错的阈值,比「感觉说得有点多」可靠。

  • **在两个以上模块里都要重申,挪进约束。**只在一个模块成立的,留在规格里。

  • **规格改了,代码也要跟着改。**反过来也一样——改了代码不改规格,规格就废了。让 AI 每次改动前先更新规格文件。

  • **约束文件要定期删。**项目变了之后,过时的约束比没有约束更糟,它会让 AI 做出你已经不想要的东西。

约束不是命令

有一点要清楚:约束文件不是硬性开关。它作为一段普通内容进入上下文,模型是按概率去遵守的,不是保证执行。这意味着两件事。

所以要精简

每一行都问一遍:删掉它会不会导致出错。不会就删。 控制在两百行以内。写得越长,每一条被遵守的概率越低。

所以要复查

关键约束不能只写在文件里,还要在当下这条指令里重申一次。 做完之后让它对照约束自检一遍,成本很低。

「删掉它会不会导致出错」这个筛子很好用。大部分人写的约束文件里,一半内容是在描述项目而不是在约束行为,那一半可以直接删。

接着看

先规格后代码 中间那一层怎么写。四块内容里最值钱的是「未定项」,它会逼出你自己都没想清楚的地方。

上下文是怎么回事 为什么写进文件比留在对话里可靠——对话会随长度失焦,文件不会。

约束沉淀 最上面那一层的展开:哪些该写进 CLAUDE.md,怎么写,以及怎么防止它膨胀。