如何通过 OpenSpec 框架在 AI 编程助手开始写代码前明确规范,从而避免生成不符合预期的代码?
OpenSpec 框架通过规范驱动开发(Specification-Driven Development) 的核心机制,在AI编程助手开始写代码前建立明确的规范约束,从而系统性地避免生成不符合预期的代码。其核心在于将传统的"先编码后验证"转变为"先规范后编码"的工作范式。
一、OpenSpec 如何确保规范先行
1. 结构化规范管理
OpenSpec 通过以下目录结构强制实施规范优先的原则:
openspec/
├── specs/ # 规范存储区("真理之源")
│ └── [feature-area]/ # 功能领域分类
│ └── spec.md # 当前生效的规范
└── changes/ # 变更提案区
└── [change-id]/ # 每个变更独立目录
├── proposal.md # 变更提案(为什么改、改什么)
├── tasks.md # 实施任务清单
├── design.md # 技术决策文档(可选)
└── specs/ # 规范增量
└── [feature-area]/
└── spec.md # 仅包含新增/修改的规范部分
这种结构确保了所有代码变更都必须先有对应的规范变更,AI助手在生成代码前必须先读取并理解相关规范 。
2. 四阶段工作流程
OpenSpec 定义了明确的四阶段工作流,确保规范在整个开发周期中的主导地位:
| 阶段 | 核心活动 | 产出物 | 防止AI偏离的关键机制 |
|---|---|---|---|
| 1. 提案创建 | 明确需求、定义规范变更 | proposal.md、规范增量文件 |
强制需求结构化描述,避免模糊指令 |
| 2. 规范协商 | 与AI助手讨论技术方案 | design.md(可选) |
在编码前澄清技术细节和约束条件 |
| 3. 规范驱动编码 | AI基于规范生成代码 | 实现代码、tasks.md更新 |
AI只能根据已批准的规范进行实现 |
| 4. 验证与归档 | 验证代码符合规范 | 归档记录、更新主规范 | 确保最终代码与规范完全一致 |
二、具体实施步骤与示例
步骤1:初始化规范环境
# 安装OpenSpec
npm install -g @fission-ai/openspec@latest
# 项目初始化
cd your-project
openspec init
# 选择集成的AI工具(如Claude Code、Cursor等)
# 系统将创建openspec/目录结构
步骤2:创建项目级基础规范
在 openspec/project.md 中定义项目级别的约束:
# 项目规范
## 技术栈约束
- 前端:React 18+,TypeScript 5.0+
- 后端:Node.js 18+,Express 4.x
- 数据库:PostgreSQL 15+
- 代码风格:ESLint Airbnb规范
## 架构原则
1. 所有API必须符合RESTful设计
2. 数据库操作必须使用ORM(Prisma)
3. 错误处理必须统一使用中间件
4. 测试覆盖率必须达到80%以上
## 禁止模式
- ❌ 禁止使用`any`类型(TypeScript)
- ❌ 禁止直接操作DOM(React项目)
- ❌ 禁止同步数据库操作
- ❌ 禁止硬编码配置值
步骤3:创建功能级变更提案
当需要添加新功能时,首先创建变更提案:
# 通过CLI创建提案
openspec propose "用户认证系统-添加双因素认证"
系统将引导您填写 changes/add-2fa/proposal.md:
# 提案:为认证系统添加双因素认证
## 业务需求
- 用户登录时可选启用2FA
- 支持TOTP(基于时间的一次性密码)
- 备份代码机制
## 技术规范
### 前端规范
- 使用`react-otp-input`组件
- 2FA设置页面路径:`/settings/security/2fa`
- 状态管理:Redux Toolkit
### 后端规范
- 端点:`POST /api/auth/2fa/enable`
- 数据存储:`User`表添加`totp_secret`字段
- 验证库:`speakeasy`或`otplib`
- 速率限制:每个用户每分钟最多5次尝试
### 安全要求
- TOTP密钥必须加密存储
- 备份代码必须哈希存储
- 会话管理需要更新以包含2FA状态
步骤4:与AI助手协同工作
将规范交给AI助手时,使用明确的指令:
请基于以下规范实现双因素认证功能:
1. 首先阅读并理解 `openspec/changes/add-2fa/` 中的所有规范文件
2. 按照 `tasks.md` 中的任务清单顺序实现
3. 所有代码必须严格遵守 `openspec/specs/auth/spec.md` 中的认证规范
4. 特别关注安全约束部分
5. 如有不确定的技术决策,请先更新 `design.md` 文档讨论
步骤5:规范验证与同步
# 验证生成的代码是否符合规范
openspec verify changes/add-2fa/
# 同步规范变更到主规范库
openspec sync changes/add-2fa/
# 归档已完成的变更
openspec archive changes/add-2fa/
三、关键机制解析
1. Delta规范机制
OpenSpec 使用增量规范(Delta Specs),而不是每次都提供完整规范。这意味着AI只需要关注本次变更涉及的部分,避免上下文过长导致的理解偏差 。
2. 规范版本控制
每次规范变更都会生成版本记录:
- 主规范(
specs/)始终反映当前"真理" - 变更提案(
changes/)记录拟议的修改 - 归档记录保留完整历史,便于追溯和审计
3. 多工具兼容性
OpenSpec 原生支持多种AI编程助手,并通过 AGENTS.md 规范确保不同工具间的一致性 :
| AI工具 | 集成方式 | 规范一致性保证 |
|---|---|---|
| Claude Code | 原生斜杠命令 | 直接读取openspec目录 |
| Cursor | 项目上下文加载 | 自动识别规范结构 |
| GitHub Copilot | 通过AGENTS.md | 统一的工作流指令 |
| 其他工具 | 标准Markdown接口 | 兼容性适配层 |
四、实战效果与最佳实践
避免AI偏离的实测案例
在 jimeng-free-api-all 项目升级实战中,OpenSpec 帮助团队 :
- 需求澄清阶段:通过
proposal.md强制需求方提供完整上下文 - 技术设计阶段:在
design.md中预先解决技术争议 - 实现阶段:AI严格按照
tasks.md的步骤生成代码 - 验证阶段:自动检查代码是否符合规范约束
中文开发者的优化实践
对于中文开发者,OpenSpec中文版提供了更好的支持 :
# 使用中文CLI
openspec-cn 初始化项目
openspec-cn 创建提案 "用户管理模块"
openspec-cn 验证变更
# 中文规范模板
在 `specs/用户认证/spec.md` 中使用中文术语:
- 用户实体(User Entity)
- 认证中间件(Authentication Middleware)
- 权限验证(Permission Verification)
团队协作规范
- 规范评审流程:所有
proposal.md必须经过团队评审 - 规范变更日志:每次规范更新必须记录原因和影响
- AI助手统一配置:团队使用相同的AI工具和提示词模板
- 定期规范审计:每月检查规范与代码的一致性
五、与传统开发方式的对比
| 对比维度 | 传统AI编码 | OpenSpec规范驱动 |
|---|---|---|
| 需求输入 | 自然语言描述,易模糊 | 结构化规范文档,强制明确 |
| 变更管理 | 代码直接修改,历史难追溯 | 规范先行,变更全程可审计 |
| AI上下文 | 每次完整对话,可能丢失历史 | 增量规范,只关注相关变更 |
| 团队协作 | 依赖个人习惯,一致性差 | 统一规范框架,标准一致 |
| 维护成本 | 代码与需求脱节,维护困难 | 规范即文档,长期可维护 |
通过上述机制,OpenSpec 在AI开始编写代码前就建立了完整的规范约束体系,确保AI的输出始终在可控范围内。这种"先规范后代码"的模式不仅减少了返工和调试时间,更重要的是建立了可重复、可审计、可协作的AI辅助开发流程,从根本上解决了AI生成代码不符合预期的问题 。
参考来源
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)