速查卡 B · Spec-Kit Constitution 模板与五铁律
完整原理与实战详见:OpenSpec+SpecKit 完整整理版
核心认知:Constitution 是写给 AI 看的
不是给人看的产品文档——术语要精确、边界要清楚、大白话要转成专业用词。
写这四类内容:
- AI 行为边界(能做什么 / 不能做什么)
- 禁止项(把红线写死,避免 AI 发散)
- 纠偏落到技术细节(每一步可能踩的坑用技术语言标出来)
- 代码复用策略(AI 天然倾向新建函数/类,不复用旧代码 —— 必须显式强制)
五铁律(好宪法 vs 坏宪法)
| # | 好宪法 | 坏宪法 |
|---|---|---|
| 1 | 明确说“我不是什么”(划定项目范围) | 模糊、模棱两可 |
| 2 | 可量化、可验证的规范 | 没有禁止项,让 AI 自由发挥 |
| 3 | 每条约束附带原因(Why) | 内容过长(≤ 500 字,复杂项目 ≤ 2000 字) |
| 4 | 明确标注技术栈版本号(避免语法 / 接口兼容差异) | — |
| 5 | 核心标记:明确列出让 AI 做什么 / 不做什么 | — |
写作六原则
| 原则 | 展开 |
|---|---|
| 禁止项 > 允许项 | “不允许 XX” 效果比 “允许 XX” 更好 |
| 具体 > 抽象 | 少用形容词,多用可验证的规则 |
| 说明原因(Why) | 每条硬约束下面加一句“为什么这样约定” |
| 控制长度 | ≤ 500 字(简单项目),≤ 2000 字(复杂项目),过长效果反而下降 |
| 代码复用策略必写 | 显式要求“生成新代码前先看是否可复用” |
| 专业术语 > 大白话 | 不清楚就多轮沟通让 AI 转译 |
模板 · 抄改即用
以下模板改自讲师直播实战产出的 AI 写作助手 Constitution V1.0,替换项目定位和技术栈即可复用。
# <项目名> Constitution V1.0
## 项目定位
- <一句话产品定位>
- <核心用户场景:用户输入 X → 系统做 Y → 返回 Z>
- 不是 <排除 A>、不是 <排除 B>、不处理 <排除 C>、不需要 <排除 D>
## 技术栈(硬约束,不可商量)
- <框架 A 版本号>
- <构建工具>
- <样式方案>
Why: <为什么选它,替代方案禁止的原因>
## 代码复用原则
- 同一 UI 模式禁止出现两次;若出现,必须抽象为组件
- 所有 API 走统一目录规范,禁止直接 fetch
- <领域特定的复用规则,如 prompt 模板统一放某目录>
## 项目结构
- 不引入 <某个不需要的框架>(项目体量不需要)
- <目录组织约定>
## 质量约束
- TypeScript strict 模式(或对应语言的严格模式)
- 一个组件一个文件
- <禁止的坏模式,如 if-else 分支替代 map 配置>
## AI 接口 / 外部依赖
- <模型 / 服务名 + 具体版本 ID>
- <环境处理:跨域 / proxy>
- <密钥管理:环境变量,禁止硬编码>
## 版本
- V1.0(<日期>)
- 描述语言:<中文 / 英文>
讲师直播实战版本(AI 写作助手)
保留讲师原始需求描述 + AI 生成的完整宪法,供对照参考:
讲师原始需求 prompt(06 直播约 31:00):
帮我先去写一份 constitution,这个项目就是我们的这个 AI 的写作助手。
先说清楚我们要做什么、不做什么。我们做的是一个纯前端的文本运算工具,
希望用户能够贴一段文字,选一个场景,然后我们使用这个 DeepSeek
可以去返回润色后的结果。只有这么一件事,它不是一个 CMS,也不是一个
协作的平台,不处理敏感数据,也不需要注册登录。
生成的完整宪法(编者根据讲师口头约束整合的 Markdown):
# AI Writer Constitution V1.0
## 项目定位
- 单页 SPA,纯前端文本润色工具
- 用户贴一段文字 → 选一个场景 → 用 DeepSeek 返回润色结果
- 不是 CMS、不是协作平台、不处理敏感数据、不需要注册登录
## 技术栈(硬约束,不可商量)
- React 19(不允许其他版本)
- Vite 构建
- 样式使用 Tailwind CSS V4
Why: Tailwind 原子类已覆盖所需样式,禁止引入其他 CSS 框架/CSS Modules
## 代码复用原则
- 同一 UI 模式禁止出现两次;若出现,必须抽象为组件
- 所有 API 走统一目录规范,禁止直接 fetch
- 场景 prompt 模板统一放在 src/prompts/scenarios.ts
## 项目结构
- 不引入 React Router(项目体量不需要)
- 场景 map 配置化,一个组件一个文件
## 质量约束
- TypeScript strict 模式
- 每个组件一个文件
- 场景配置走 map,禁止 if-else 分支
## AI 接口
- DeepSeek 固定模型(具体模型 ID 待补充)
- 开发环境需处理跨域(Vite proxy)
- API Key 放在 .env.local,禁止硬编码
## 版本
- V1.0(2026-07-01)
- 描述语言:中文
落地位置
- Spec-Kit:
.specify/memory/constitution.md(后续所有/specify//plan//tasks//implement命令自动注入) - OpenSpec:对标文件是
openspec.yaml(结构不同,但用途相同——每次请求都会被自动注入)
落地后立刻做的一件事
在 Claude Code / Cursor 里发一条:
请阅读 .specify/memory/constitution.md,
用你自己的话向我复述其中每一条硬约束及其 Why,
然后告诉我你打算怎么在接下来的开发中遵守它们。
目的:确认 AI 真的把宪法读懂了,而不是“读过就忘”。如果它复述不出来,说明宪法太长或太抽象——回去按五铁律精简重写。