在AI编程助手日益普及的今天,你是否还在经历这样的困扰:向AI描述了需求,得到的代码却总是“看起来对,实际不能用”?这就是所谓的 “氛围编码”(Vibe Coding) 问题。

GitHub开源的Spec Kit框架正是为了解决这一痛点而生,它引入了一种全新的软件开发范式——规格驱动开发(Spec-Driven Development,SDD),从根本上改变了我们与AI协作编写代码的方式。

什么是SDD?AI时代的方法论革新

规格驱动开发(SDD)是一种以“规范文档”为核心的工程方法论。与传统的“代码优先”开发模式不同,SDD要求开发流程的每一步都必须以明确的规格(specifications)为依据。

SDD的核心理念可以概括为:

  • 规范第一,代码第二:规范不再是代码的附属文档,而是开发的起点和核心

  • 意图驱动:开发活动应以“业务目标和用户需求”为基础

  • 可执行规格:规格文档可以自动生成代码、API合约和测试用例

  • 持续精炼:规格文档在整个生命周期中不断完善

与传统开发相比,SDD实现了真正的权力反转:过去是“代码为王”,现在是“代码服务规格”。当规格足够精确时,它可以直接生成计划与实现,减少意图与落地之间的鸿沟。

Spec Kit框架:SDD的实践工具

Spec Kit是GitHub官方开源的工具包,旨在通过规格驱动开发帮助开发者构建更高质量的软件。它提供了一套结构化的工作流程,让AI辅助编程变得更加可控、高效和规范。

github地址:https://github.com/github/spec-kit/tree/main

核心组件与工作原理

Spec Kit通过以下方式实现其功能:

  • CLI与AI工具链集成:与Copilot、Claude、Gemini等主流AI编程代理集成

  • 三层解析机制:将自然语言需求解析为结构化的规格文档,再生成技术方案和实现计划

  • 宪法式架构原则:内置九条架构原则,指导开发流程

    SDD核心流程

环境安装与配置

使用Spec Kit需要满足以下基础条件:

  • Python 3.11+

  • Git

  • uv包管理器

安装命令简单直接:

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git

初始化项目同样简便:

specify init <project_name>

七步工作流:从需求到代码的完整链路

Spec Kit将开发过程高度结构化为七个主要步骤,确保从需求到实现的完整性和一致性。

1. 确立项目原则(/constitution)——全局性的原则和要求

使用/constitution命令创建项目治理原则和开发指南,这些将指导后续所有开发工作。 比如在实操中,我们通过以下命令建立项目准则(以照片管理作为示例):

/speckit.constitution 创建专注于代码质量、测试标准、用户体验一致性和性能要求的准则

这会生成constitution.md文件,包含代码质量、测试标准等核心原则(部分示例如下)。

# 项目章程

## 核心原则

### 代码质量

贡献到此代码库的所有代码必须满足以下不可协商的规则:

- 在每个PR上使用自动化代码检查器和格式化工具(项目配置的工具);合并前必须通过代码检查。

- 保持清晰、最小化的公共API,并将实现细节私有化。公共接口必须附带示例和预期输入/输出的文档。

- 在可行的情况下,代码必须是可静态分析的(在语言/工具支持的情况下启用类型检查)。

- 当复杂性或架构决策超出单个文件范围时,PR必须包含简短的设计说明;必须对复杂性进行合理性说明和审查。

- 依赖项必须被记录,在适用情况下固定版本,并通过包含风险评估和测试结果的文档化升级PR进行更新。

理由:高代码质量可减少缺陷、加速审查,并使长期维护变得可行。

### 测试标准

测试是强制性的,并遵循以下标准:

- 测试应在非平凡实现之前或同时编写(鼓励测试优先)。至少,每个新功能必须包含单元测试和针对跨组件行为的集成测试。

- CI门控必须运行单元测试、集成测试和冒烟测试。如果CI测试失败,则不得合并任何PR。

- 为每个组件定义可衡量的测试覆盖率目标(例如,维持项目范围内的最低标准,团队可以合理解释偏差)。覆盖率不能替代有意义的测试。

- 不稳定的测试必须立即处理:标记、隔离和修复;不得永久忽略不稳定的测试。

- 测试数据必须是确定性的,并与外部系统隔离(使用固定装置、模拟或测试容器);测试所需的任何外部依赖都必须有文档记录并在CI中可用。

理由:可靠的自动化测试保护正确性、加快反馈速度并支持安全重构

2. 创建规范(/specify)——输入需求规格化

使用/specify命令描述你想要构建的内容,专注于“什么”和“为什么”,而非技术细节。 然后本命令将原始需求转换为规格化的高质量的需求

实践案例:构建照片整理应用

/speckit.specify 构建一个能够帮助我将照片整理到独立相册中的应用程序。相册按日期分组,并且可以通过在主页面上的拖放操作重新组织。相册不会嵌套在其他相册中。在每个相册内,照片以平铺式界面预览。

此命令会生成结构化的spec.md文件,包含用户故事、功能列表和验收条件。 生成部分内容示例:

功能规格:将照片整理到相册

**功能分支**:`1-organize-photos`

**创建日期**:2025-11-08

**状态**:草案

**输入**:用户描述:"构建一个能够帮助我将照片整理到独立相册中的应用程序。相册按日期分组,并且可以通过在主页面上的拖放操作重新组织。相册不会嵌套在其他相册中。在每个相册内,照片以平铺式界面预览。"

## 用户场景与测试 *(必填)*

### 用户故事 1 - 按日期创建和查看相册 (优先级:P1)

作为一名用户,我希望我的照片能自动按日期分组到不同的相册中,以便我能按拍摄的日/月来浏览我的照片集。

**此优先级的原因**:按日期分组是主要的组织方式,也是其他操作的基础。

**独立测试**:给定一组带时间戳的照片,应用程序应为每个日期分组显示一个相册,并且照片应出现在对应的相册中。

**验收场景**:

1. 给定时间戳为 2025-11-06 和 2025-11-07 的照片,当我打开应用时,应看到两个标有这些日期的相册,并且每个相册包含该日期的照片。

2. 给定没有时间戳的照片,当系统无法确定日期时,照片应被放置在一个"未知日期"的相册中,并且用户能够手动指定日期。

---

### 用户故事 2 - 通过主页面拖放重新排序相册 (优先级:P1)

作为一名用户,我希望通过拖拽主页面上的相册来重新排序,以便我能优先处理某些日期的相册以快速访问。

3. 需求澄清(/clarify)——需求验证和测试

使用/clarify命令自动追问关键不确定性并入档,把“返工”前置为“提问”,减少后期猜测。

4. 技术规划(/plan)——详细设计

使用/plan命令基于规格生成技术方案,包括技术选型、架构设计等。

实践案例:明确技术栈

/speckit.plan 该应用程序使用Vite构建,并尽可能减少库的依赖。大部分功能采用原生HTML、CSS和JavaScript实现。图片不会上传至任何地方,元数据均存储在本地SQLite数据库中。

生成的plan.md包含项目结构、技术决策和实施计划,同时还会创建data-model.md(数据模型)、api.md(API合约)等重要文档。 plan的核心内容包括:

项目结构

```

specs/1-organize-photos/

├── plan.md

├── research.md

├── spec.md

├── data-model.md

├── quickstart.md

├── contracts/

│   └── api.md

└── tasks.md (将由 /speckit.tasks 生成)

```

## Phase 0:研究(已完成)

-   完成 research.md:选择了运行时和数据库方案(sql.js + Electron 同步)。

-   创建 PoC 任务以验证 sql.js 持久化策略和图块网格虚拟化方法。

## Phase 1:设计与合约

-   交付成果:`data-model.md`, `/contracts/api.md`, `quickstart.md`, 原型 PoC。

-   关键设计决策包括:数据库模式、缩略图缓存策略、增量加载策略、拖放行为及键盘备用方案。

## Phase 2:实施计划

### Phase 2.1:设置

-   [ ] T001 初始化 Electron + Vite 骨架;最小化依赖。

-   [ ] T002 添加 ESLint/Prettier 配置和 CI lint 任务。[代码质量]

-   [ ] T003 添加 vitest 配置和初始测试工具。[测试]

### Phase 2.2:基础

-   [ ] T004 使用 sql.js 实现数据库层,并创建一个调用 Electron 主进程进行保存/加载的简单文件持久化垫片。[性能]

-   [ ] T005 实现照片导入(扫描文件夹,提取元数据)和缩略图生成 Worker(canvas)。[性能]

-   [ ] T006 实现相册分组逻辑和按用户的相册顺序持久化。[测试]

### Phase 2.3:用户故事 (P1)

-   [ ] T010 实现主相册视图,支持拖放重新排序和键盘备用方案。[用户体验] [测试]

-   [ ] T011 实现相册视图,包含平铺网格、虚拟化和增量加载。[性能] [测试]

-   [ ] T012 为时间戳缺失的照片实现手动分配 UI。[用户体验] [测试]

### Phase 2.4:优化

-   [ ] T020 可访问性审查与修复(键盘、ARIA)。[用户体验]

-   [ ] T021 向 CI 添加性能冒烟测试(渲染时间测量)。[性能]

-   [ ] T022 文档:快速入门、关于数据库和备份/恢复的开发人员说明。
api定义api接口,内容示例:
    # contracts/api.md — Local API contract (renderer ↔ main)

    This document defines the IPC/function contracts used by the renderer and the Electron main process. There is no remote server — contracts represent local boundaries (renderer calls main for filesystem/DB persistence).

    ## getAlbums()

    - Description: Return the list of albums for the current user, ordered by persisted index.

    - Input: none

    - Output: [{ id, label, date_key, photo_count, ordered_index }]

    - Errors: filesystem/db read errors

    ## reorderAlbums(newOrder: [albumId])

    - Description: Persist the new album ordering for the user.

    - Input: array of album ids in desired order

    - Output: { success: true }

    - Errors: db write error
数据模型定义:数据结构,示例:
    # data-model.md — Organize Photos into Albums

    ## Entities

    ### Photo

    - id: string (UUID)

    - source_path: string (absolute or app-relative path to original image file)

    - timestamp: ISO 8601 datetime or NULL

    - thumbnail_path: string (path to cached thumbnail)

    - width: integer

    - height: integer

    - orientation: integer (EXIF orientation)

    - checksum: string (e.g., SHA-1 or SHA-256)

    - imported_at: ISO 8601 datetime

    - metadata: JSON (camera make/model, lens, etc.)

    - user_id: string (owner id; single-user default)

    Indexes/Constraints:

    - Index on (timestamp)

    - Unique constraint on (checksum, user_id) to detect duplicates

    Validation:

    - source_path MUST exist on disk when referenced; import will verify and set status if not found.

5. 任务分解(/tasks)——将任务分解为一个个独立的有互相依赖,前后顺序的任务

使用/tasks命令将规格和计划分解为可执行的任务列表。

/speckit.tasks

这会生成tasks.md文件,将工作分解为设置、基础、用户故事、优化等阶段,每个任务都有明确的标识和依赖关系。 

tasks.md内容示例:

任务清单:整理照片到相册

**输入**:来自 `/specs/1-organize-photos/` 的设计文档

**前提条件**:plan.md, spec.md, data-model.md, contracts/, research.md

## 阶段 1:设置(共享基础设施)

- [X] T001 初始化项目骨架:在仓库根目录创建 `package.json`、Vite 配置、Electron 入口文件 `src/main/index.js` 和 `src/renderer/main.js`,以及 npm 脚本

- [X] T002 创建开发脚本和 CI 骨架:添加 `npm run start:dev`、`npm run build`、`npm test` 命令,并在 GitHub Actions 工作流 `.github/workflows/ci.yml` 中添加 lint/test 步骤 [代码质量]

- [X] T003 添加 ESLint 和 Prettier 配置,并在 `.husky/` 或 GitHub Actions 中设置预提交钩子格式化;文件:`.eslintrc.cjs`, `.prettierrc` [代码质量]

- [X] T004 添加 Vitest 和 Playwright 配置文件:`vitest.config.ts`, `playwright.config.ts`,以及示例测试运行脚本 [测试]

- [X] T005 创建应用程序目录和样式设计令牌:`src/renderer/components/`, `src/renderer/styles/tokens.css`, `src/renderer/pages/`, `src/renderer/services/`(创建空的 index 文件)

- [X] T006 添加 sql.js 依赖项,并在 `src/renderer/services/db.js` 和 `src/main/fs-persist.js` 创建数据库持久化辅助工具占位符 [性能]

## 阶段 2:基础(阻塞性前提条件)

- [ ] T007 [P] 使用 sql.js 在 `src/renderer/services/db.js` 中实现数据库模式和迁移表,并提供 `initDb()` 函数(符合 `data-model.md` 中的模式)

6. 一致性分析(/analyze)

使用/analyze命令在实现前检查规格、计划、任务间的差异,发现冲突先改文档而不是先改代码。

7. 实现(/implement)

最后使用/implement命令执行所有任务,严格按照TDD节奏推进开发。

/speckit.implement

相关任务一一执行,生成代码

优势与价值:为什么SDD是未来

解决传统开发痛点

Spec Kit通过SDD方法解决了多个“老大难”问题:

  1. 减少“意图走样”:让规格可执行,由规格派生实现计划和测试

  2. 把“文档变废为宝”:规格直接生成代码,维护软件的主战场上移到迭代规格(SPEC)

  3. 降低“过度设计”:通过宪法原则和模板约束给LLM“上护栏”

工程实践创新

相比传统的AI编码,Spec Kit带来了多重优势:

  • 链路可追踪:每个技术选择都能追溯到规格里的具体需求

  • 团队协作友好:规格是团队共识对象,而不是提示词的“黑箱艺术”

  • 抗噪声:模板把LLM容易“过拟合到实现细节”的毛病卡住了

  • 强制TDD:测试先行防止AI产生幻觉,确保代码质量

开发者体验:更智能的编程方式

使用Spec Kit后,开发节奏变得清晰而高效:

  1. 先用/constitution定好工程底线

  2. /specify把用户价值、场景、边界写清

  3. /clarify生成结构化问题清单并入档

  4. /plan把技术栈、架构、合约都生成出来

  5. /tasks自动拆解任务

  6. /analyze在实现前检查一致性

  7. /implement严格按TDD顺序推进

这种结构化的方法,将AI从“聊天式编码工具”转变为“结构化软件开发伙伴”。

注: init后在chat框直接选择对应的命令

图片

结语

规格驱动开发不是简单的工具更新,而是软件开发范式的根本转变。它回应了AI时代软件开发的核心挑战:如何在利用AI能力的同时,保证软件质量、可维护性和团队协作效率。

随着AI编程工具的普及,SDD为我们提供了一条从“氛围编码”走向“规范编程”的路径。它让开发者能更多地关注设计、架构和用户体验,而将实现细节交给AI处理。

Spec Kit目前已经支持Claude Code、Cursor、GitHub Copilot等主流AI编程环境,无论是个人开发者还是团队,都可以轻松尝试这一新的开发范式,体验“规格驱动,代码自动”的高效开发流程。

AI时代已经到来,是时候探索AI时代的开发方法了!

最后的最后,SDD 是一个理论或模型(等价于瀑布和敏捷),Spec kit是一个框架,是一个探索,实际落地SDD应该还需要更多的有效实践和范式。 

上面探索我最后的运行结果是: 

(1) VSCode 免费额度不够(已经生成完整的框架代码);

image

(2) 运行产品界面如下:

image


Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐