当前位置: 首页 > news >正文

AI 编程时代的规范驱动开发:OpenSpec 实践指南

AI 编程时代的规范驱动开发:OpenSpec 实践指南

当 AI 能写代码时,我们真正需要的是什么?不是更快的代码生成,而是更可靠的共识构建。

引言:一个熟悉的场景

你正在使用 AI 编程助手开发一个新功能。你描述了需求,AI 生成了代码,看起来一切正常。但是:

  • 当你稍后回来继续开发时,之前的对话上下文已经丢失
  • 需求只存在于聊天记录中,每次对话都可能产生不同的解读
  • 团队成员不知道这个功能的设计决策和背景
  • 代码实现了,但没有人知道"为什么这样做"

这不是 AI 的问题,而是我们与 AI 协作方式的问题。

今天,我想分享一个解决这个问题的开源工具 ——OpenSpec,它不是一个新概念,而是一个让规范驱动开发在 AI 时代真正落地的实践框架。

什么是规范驱动开发?

规范驱动开发(Spec-Driven Development)的核心思想很简单:在编写代码之前,先定义清楚系统应该做什么

这不是新概念 —— 从 BDD(行为驱动开发)到 ATDD(验收测试驱动开发),软件行业一直在尝试各种"先想清楚再动手"的方法。但在 AI 编程时代,这个理念有了新的意义:

传统开发:需求文档 → 开发者理解 → 编写代码 AI 时代:需求描述 → AI 理解 → 生成代码 → ???

问题是,AI 的"理解"是每次对话都重新构建的。如果需求只存在于聊天中,一致性就无从谈起。

OpenSpec 做的事情,就是在人类与 AI 之间建立一个持久化的共识层

OpenSpec 的核心设计

增量规范(Delta Specs)

传统规范系统的痛点在于:修改现有功能时,你需要阅读整个规范,然后搞清楚哪部分在变化。

OpenSpec 引入了"增量规范"的概念:

# Delta for Auth ## ADDED Requirements ### Requirement: Two-Factor Authentication The system MUST require a second factor during login. #### Scenario: OTP required - GIVEN a user with 2FA enabled - WHEN the user submits valid credentials - THEN an OTP challenge is presented ## MODIFIED Requirements ### Requirement: Session Timeout The system SHALL expire sessions after 30 minutes of inactivity. (Previously: 60 minutes) ## REMOVED Requirements ### Requirement: Remember Me (Deprecated in favor of 2FA)

这种格式的好处是:

  1. 清晰:一眼就能看出什么在变化
  2. 可合并:归档时自动合并到主规范
  3. 可追溯:历史变更保存在 archive 中

工件驱动的工作流

每个功能变更(Change)都是一个独立的文件夹,包含四种工件:

openspec/changes/add-dark-mode/ ├── proposal.md # 为什么做,做什么 ├── specs/ # 规范(增量格式) ├── design.md # 技术方案 └── tasks.md # 实施清单

工件之间的关系:

proposal ───► specs ───► design ───► tasks ───► implement │ │ │ │ why what how steps │ │ │ │ └───────────┴───────────┴───────────────────────┘ 随时可以回溯更新

关键洞察:这些工件不是阶段,而是维度。你可以随时回到任何工件进行更新,因为实施过程中的发现可能改变设计,设计发现可能改变规范。

流畅的工作流

OpenSpec 的核心理念是"流畅而非僵化":

默认快速路径: /opsx:propose ──► /opsx:apply ──► /opsx:archive 探索性路径: /opsx:explore ──► /opsx:new ──► /opsx:continue ──► ...

没有强制的阶段门控。你可以:

  • /opsx:propose一步创建完整的变更提案
  • /opsx:explore先探索问题空间
  • /opsx:continue逐步迭代每个工件
  • /opsx:verify在归档前验证实施与规范的一致性

实战示例:添加深色模式

让我们看一个实际的例子。假设我们要给应用添加深色模式支持。

第一步:创建提案

你: /opsx:propose add-dark-mode AI: 创建了 openspec/changes/add-dark-mode/ ✓ proposal.md — 我们为什么做这个,范围是什么 ✓ specs/ — 需求和场景 ✓ design.md — 技术方案 ✓ tasks.md — 实施清单 准备实施!

第二步:审查和调整

AI 生成的 proposal.md:

# Proposal: Add Dark Mode ## Intent 用户请求添加深色模式选项,以减少夜间使用时的眼睛疲劳。 ## Scope In scope: - 设置中的主题切换 - 系统偏好检测 - localStorage 持久化 Out of scope: - 自定义颜色主题(未来工作) - 每页主题覆盖 ## Approach 使用 CSS 自定义属性进行主题化,React Context 进行状态管理。

如果需要调整,直接编辑文件即可。这不是静态生成的文档,而是活的协作媒介。

第三步:实施

你: /opsx:apply AI: 正在执行任务... ✓ 1.1 创建 ThemeContext ✓ 1.2 添加 CSS 自定义属性 ✓ 1.3 实现 localStorage 持久化 ✓ 2.1 创建 ThemeToggle 组件 ✓ 2.2 添加到设置页面 所有任务完成!

第四步:归档

你: /opsx:archive AI: 归档 add-dark-mode... ✓ 将增量规范合并到 openspec/specs/ui/spec.md ✓ 移动到 openspec/changes/archive/2025-01-24-add-dark-mode/ 完成!准备下一个功能。

归档后,变更记录被保存,规范被更新。下次有人问"为什么我们选择了这个方案?",答案就在 archive 里。

为什么选择 OpenSpec?

对比其他方案

vs. GitHub Spec Kit

Spec Kit 功能全面但重量级。严格的阶段门控、大量文档、Python 环境配置。适合严格的工程团队,但对于追求速度的项目来说负担过重。

vs. AWS Kiro

Kiro 功能强大,但你被锁定在他们的 IDE 和有限的模型选择中。OpenSpec 可以与你现有的工具链配合使用。

vs. 什么都不用

没有规范的 AI 编程意味着模糊的提示词和不可预测的结果。你可能今天得到一个好的实现,明天用同样的描述得到完全不同的代码。

核心优势

  1. 共识优先:人类和 AI 在编写代码前先就规范达成一致
  2. 组织有序:每个变更独立文件夹,完整的上下文
  3. 灵活迭代:随时更新任何工件,没有僵化的流程
  4. 工具无关:支持 20+ 种 AI 编程助手

技术实现亮点

架构设计

OpenSpec 采用分层架构:

┌─────────────────────────────────────────────────────────┐ │ CLI Layer │ │ openspec init | update | list | show | validate | view │ └─────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────┐ │ Core Layer │ │ Artifact Graph | Schema Resolution | Validation │ └─────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────┐ │ Tool Adapters Layer │ │ Claude Code | Cursor | Windsurf | Copilot | ... │ └─────────────────────────────────────────────────────────┘

工件依赖图

基于 Schema 定义工件间的依赖关系:

artifacts:-id:proposalrequires:[]# 无依赖,可以首先创建-id:specsrequires:[proposal]# 需要 proposal 先存在-id:designrequires:[proposal]# 可以与 specs 并行-id:tasksrequires:[specs,design]# 需要两者都存在

依赖是使能器,不是门控。它们告诉 AI 什么可以创建,而不是强制执行顺序。

动态指令生成

OpenSpec 的一个关键创新是从静态提示词转向动态指令:

传统方式:AI 每次收到相同的静态指令 OpenSpec 方式:指令动态组装自三层 ├── Context(项目背景:技术栈、约定) ├── Rules(工件约束:如"为未知项创建探索任务") └── Template(输出文件的实际结构)

AI 通过 CLI 查询实时状态:哪些工件存在、什么可以创建、依赖是否满足。

与团队协作

个人项目

即使是个人项目,OpenSpec 也有价值:

  • 隔周回来,看 proposal.md 就能回忆起当初的思考
  • 任务清单让你随时知道进度
  • archive 是活的决策日志

团队项目

对于团队,OpenSpec 提供:

  • 代码评审前先评审意图:变更提案可以在实施前讨论
  • 并行开发:多个变更可以同时进行而不冲突
  • 知识传承:新成员可以阅读 archive 了解历史决策

企业部署

OpenSpec 支持:

  • 自定义 Schema(在openspec/schemas/中定义)
  • 项目级配置(openspec/config.yaml
  • 私有部署(纯 npm 包,无需外部服务)

最佳实践

保持变更聚焦

一个变更应该是一个逻辑工作单元。如果你在"添加功能 X 并且重构 Y",考虑分成两个变更。

为什么?

  • 更容易评审和理解
  • 更清晰的 archive 历史
  • 可以独立发布
  • 必要时更容易回滚

命名要清晰

好的命名: 避免: add-dark-mode feature-1 fix-login-redirect update optimize-product-query changes implement-2fa wip

好的命名让openspec list的输出真正有用。

渐进式严格性

不要过度工程化。使用能实现目标的最轻量级别:

轻量模式(大多数情况):

  • 简短的行为优先需求
  • 清晰的范围和非目标
  • 几个关键的验收场景

完整模式(高风险变更):

  • 跨团队或跨仓库
  • API/契约变更
  • 安全/隐私相关
  • 模糊会导致高昂返工成本

验证后再归档

你: /opsx:verify AI: 验证 add-auth... 完整性 ✓ tasks.md 中所有 12 个任务已完成 ✓ 规范中所有需求都有对应代码 ⚠ 场景"会话超时"缺少测试 正确性 ✓ 实施符合规范意图 ✓ 边界情况已处理 一致性 ✓ 设计决策体现在代码结构中 总结 ───────────────────── 关键问题:0 警告:1 可以归档:是(带警告)

验证不会阻止归档,但它会让你看到可能需要先处理的问题。

快速开始

安装

要求 Node.js 20.19.0 或更高版本。

npminstall-g@fission-ai/openspec@latest

初始化

cdyour-project openspec init

初始化过程会:

  1. 检测项目中已有的 AI 工具配置
  2. 让你选择要集成的工具
  3. 创建openspec/目录结构
  4. 生成斜杠命令

开始使用

告诉你的 AI:/opsx:propose <你想要构建的功能>

就这么简单!

命令速查

命令用途何时使用
/opsx:propose创建变更+规划工件快速默认路径
/opsx:explore探索想法需求不清晰时
/opsx:new创建变更框架扩展模式
/opsx:continue创建下一个工件逐步迭代
/opsx:ff快速创建所有规划工件范围清晰时
/opsx:apply实施任务准备写代码
/opsx:verify验证实施归档前
/opsx:archive归档变更所有工作完成

CLI 命令:

openspec list# 列出活动变更openspec show<name># 查看变更详情openspec validate# 验证规范格式openspec view# 交互式仪表板openspec update# 更新 AI 指令

结语:AI 编程的本质

AI 编程助手的能力在飞速提升,但我们与它们协作的方式却没有本质改变 —— 仍然是对话式的、临时的、难以追溯的。

OpenSpec 提供了一个不同的思路:不是让 AI 更聪明地理解我们的意图,而是让我们更清晰地表达意图,并让这个表达变得可追溯、可协作、可验证。

这不是回到重量级文档的时代。OpenSpec 的哲学是"轻量但足以实现目标"—— 流畅而非僵化,迭代而非瀑布式,简单而非复杂。

如果你正在寻找一种方式,让 AI 编程变得可预测、可追溯、可协作,不妨试试 OpenSpec。毕竟,在 AI 能写代码的时代,真正稀缺的不是代码生成能力,而是共识构建能力


资源链接

  • GitHub:https://github.com/Fission-AI/OpenSpec
  • npm:@fission-ai/openspec
  • Discord:加入社区讨论
  • Twitter:关注 @0xTab 获取更新

本文基于 OpenSpec v1.2.0 撰写。OpenSpec 是 MIT 许可的开源项目,欢迎贡献!

http://www.jsqmd.com/news/526266/

相关文章:

  • fn.py 性能优化技巧:如何避免常见陷阱并提升代码执行速度
  • Multisim13.0仿真二极管平衡混频器:从波形失真到参数调整的完整避坑指南
  • SiameseAOE模型赋能内容创作平台:自动生成评论摘要与标签
  • 使用ShardingSphere进行分库分表
  • 2026年热门的直线轴承公司推荐:PBC静音自润滑直线轴承/LIN-11R铝塑滑动直线轴承精选公司 - 品牌宣传支持者
  • Qwen3-ASR-0.6B多场景实战:播客转文字、庭审记录、远程医疗语音归档
  • DeepSeek-OCR-2开发指南:C++集成与性能优化
  • 锅炉安装企业资质增项咨询优质机构推荐:ISO 5001认证、企业做认证、特种设备充装许可证、特种设备制造许可证选择指南 - 优质品牌商家
  • SiameseAOE中文-base快速上手:Colab免费GPU环境一键运行ABSA WebUI
  • 避开LIN干扰测试的坑:CANoe中Test moudle_LIN Disturbance Block的5个关键配置细节
  • 鲲鹏920芯片+Redis7.0实战:Docker-Compose避坑指南(附配置文件模板)
  • TrafficMonitor插件系统完整配置指南:打造个性化Windows监控中心
  • LangChain 重写:大模型 Agent 开发告别“拼凑学”,小白也能轻松上手收藏!
  • ClawdBot创新应用:为视障用户定制语音输入→文字翻译→TTS播报闭环方案
  • Qwen3-4B Instruct-2507应用场景:心理咨询师对话脚本生成+共情表达训练
  • 2026年免费AIGC降重网站合集:轻松去重无忧,目前口碑好的AIGC降重机构WritePass专注行业多年经验,口碑良好
  • Win11Debloat终极指南:如何让Windows系统运行速度提升50%
  • ROS2自定义消息的跨功能包通信实践:从创建到部署全流程解析
  • PP-DocLayoutV3一文详解:文档结构化处理全流程(WebUI标注+API调用+JSON输出)
  • Qwen2-VL-2B-Instruct应用:为STM32嵌入式系统开发视觉辅助文档生成工具
  • 51单片机I/O口驱动能力解析:灌电流与拉电流的实战应用
  • GLM-4-9B-Chat-1M与Anaconda集成:快速搭建开发环境
  • 别再傻傻重启Docker了!手把手教你配置国内镜像源,解决拉取失败的终极方案
  • Qwen3-VL:30B部署教程:星图平台Qwen3-VL:30B API密钥配置+Clawdbot模型绑定
  • 一键切换绘画风格:Neeshck-Z-lmage_LYX_v2 LoRA动态管理实战
  • 春联生成模型作品集:传统与科技融合的AI书法展示
  • BGE Reranker-v2-m3部署教程:Mac M1/M2芯片通过Metal加速运行CPU版本优化方案
  • SecGPT-14B GPU算力适配:双卡4090下vLLM batch inference吞吐达28 tokens/sec
  • TradingAgents-CN终极指南:如何用AI智能体打造你的私人金融分析师团队?
  • Gemma-3-12B-IT参数详解教程:Temperature/Top P/Max Tokens调优实践