速查卡 B · Spec-Kit Constitution 模板与五铁律

完整原理与实战详见:OpenSpec+SpecKit 完整整理版

核心认知:Constitution 是写给 AI 看的

不是给人看的产品文档——术语要精确、边界要清楚、大白话要转成专业用词。

写这四类内容:

  1. AI 行为边界(能做什么 / 不能做什么)
  2. 禁止项(把红线写死,避免 AI 发散)
  3. 纠偏落到技术细节(每一步可能踩的坑用技术语言标出来)
  4. 代码复用策略(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)
- 描述语言:中文

落地位置

落地后立刻做的一件事

在 Claude Code / Cursor 里发一条:

请阅读 .specify/memory/constitution.md,
用你自己的话向我复述其中每一条硬约束及其 Why,
然后告诉我你打算怎么在接下来的开发中遵守它们。

目的:确认 AI 真的把宪法读懂了,而不是“读过就忘”。如果它复述不出来,说明宪法太长或太抽象——回去按五铁律精简重写。


← 返回 AI 编程