规格、提示、约束的分工 | 与 AI 协作 | 做产品
规格、提示、约束的分工
同一句话该写在哪,取决于它要管多久。临时的写在提示里,一个模块内通用的写进规格,整个项目通用的写进约束文件。
你会遇到的现象
-
每次对话都要重复交代同样的规矩
-
约束文件越写越长,最后它开始不遵守了
-
改到第三轮,它推翻了第一轮定好的数据结构
三层各放什么
层放在哪写什么典型内容
约束 CLAUDE.md 整个项目一直成立的规矩 组件必须实现四态、间距只用这六个值、权限一律后端校验
规格 docs/specs/模块名.md 某个模块的数据、状态、边界 评论支持两层楼中楼、删除是软删除、超 500 字折叠
提示 你打的那段字 这一次要做的具体事 把这个按钮挪到右上角、这里的间距改成 24
规格这一层是最容易被跳过的。跳过之后,模块内的决定只存在于对话历史里,而对话历史会随着长度变长逐渐失效。
三层之间有个顺序关系:约束是背景,规格是这个模块的设定,提示是当下的动作。生成代码时三层同时生效,冲突时以下层为准——但下层要覆盖上层,最好明确说出来,不要指望它自己判断。
同一句话该写在哪,取决于它要管多久 有效期
约束 CLAUDE.md 整个项目一直成立的规矩 组件必须实现四态 · 间距只用这六个值
规格 docs/specs/模块.md 某个模块的数据、状态、边界 评论支持两层楼中楼 · 删除是软删除
提示 你打的那段字 这一次要做的具体事 把这个按钮挪到右上角
同一句话说了三次,挪进规格;在两个以上模块里都要重申,挪进约束。三次是个比「感觉说得有点多」可靠的阈值。 三层同时生效,冲突时以下层为准——但下层要覆盖上层,最好明确说出来,别指望它自己判断。
中间那层最容易被跳过。跳过之后,模块内的决定就只存在于对话历史里——而对话历史会随着长度变长逐渐失效。「改到第三轮它推翻了第一轮定好的数据结构」,根因几乎都在这里。
什么时候往上挪
-
**同一句话说了三次,挪进规格。**三次是个不错的阈值,比「感觉说得有点多」可靠。
-
**在两个以上模块里都要重申,挪进约束。**只在一个模块成立的,留在规格里。
-
**规格改了,代码也要跟着改。**反过来也一样——改了代码不改规格,规格就废了。让 AI 每次改动前先更新规格文件。
-
**约束文件要定期删。**项目变了之后,过时的约束比没有约束更糟,它会让 AI 做出你已经不想要的东西。
约束不是命令
有一点要清楚:约束文件不是硬性开关。它作为一段普通内容进入上下文,模型是按概率去遵守的,不是保证执行。这意味着两件事。
所以要精简
每一行都问一遍:删掉它会不会导致出错。不会就删。 控制在两百行以内。写得越长,每一条被遵守的概率越低。
所以要复查
关键约束不能只写在文件里,还要在当下这条指令里重申一次。 做完之后让它对照约束自检一遍,成本很低。
「删掉它会不会导致出错」这个筛子很好用。大部分人写的约束文件里,一半内容是在描述项目而不是在约束行为,那一半可以直接删。
接着看
先规格后代码 中间那一层怎么写。四块内容里最值钱的是「未定项」,它会逼出你自己都没想清楚的地方。
上下文是怎么回事 为什么写进文件比留在对话里可靠——对话会随长度失焦,文件不会。
约束沉淀 最上面那一层的展开:哪些该写进 CLAUDE.md,怎么写,以及怎么防止它膨胀。
