在这里插入图片描述

从6700%到「死刑」

2025年2月,Karpathy 在 X 上抛出一个词——Vibe Coding。

「完全沉浸开发氛围,拥抱 AI 效率,几乎忘悼代码本身。用自然语言描述需求,AI 生成代码,直接 Accept All,报错丢给 AI 修,只求能跑通。」

五个月后,这个词搜索量暴涨 6700%,被《柯林斯词典》评为 2025 年度词汇。Cursor、Claude Code 几乎所有 AI 编辑器都把 Vibe Coding 做成核心体验。

一年后的 2026 年 2 月 5 日,Karpathy 再次发声:

「Vibe Coding is dead. The future is Agentic Engineering.」

说这句话的人,正是当初创造它的人。

最近这段时间,我一直在琢磨一件事,就是怎么让AI写代码这件事,变得不那么玄学。

你肯定经历过那种循环,跟AI说帮我写个登录功能,它啪啪啪给你生成一大坨代码,你一看,方向偏了,推倒重来。再描述一遍需求,再生成,再偏,再来。来回折腾几轮,你自己都烦了,AI也懵了,最后还是自己上手写。

问题不在AI,问题在于,你把需求全装在脑子里,每次对话都在重新解释上下文。AI没有记忆,你也没有结构化的需求文档,两边都在凭感觉走。

然后GitHub开源了一个东西,叫Spec Kit。

106k Stars。。。

我研究了一下,觉得这玩意确实解决了一个很核心的问题,就是,把需求从你脑子里搬出来,写死成结构化的规格文件,然后让AI按规格生成代码。规格是第一等公民,代码只是规格的产出物。

说实话,写这种工具推荐的文章,我一直是有心理负担的。因为我自己也还在摸索,也还在踩坑,也不是说用了这玩意就从此走上人生巅峰了。但用了这段时间下来,确实感觉,跟以前那种「聊天写码」的模式比,效率和质量都稳了不少。

所以还是想聊聊。

不成熟的经验,但毫无保留了。

先说这玩意怎么装。

一行命令就行,前提是你有Python 3.11以上的环境,还有Git和uv(或者pipx)。

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

装完你就有了一个specify命令行工具。跑一下specify self check,确认装好了就行。

然后初始化项目,也是一行命令。

specify init my-project --integration copilot

那个–integration后面跟的是你用的AI编程工具。Spec Kit支持30多种,Copilot、Claude Code、Gemini、Codex、Kilo Code、Zed、Forge、Kiro都有。不在列表里也没事,有个generic兜底。

这条命令跑完,你的项目目录下会多出来一套脚手架。最关键的是两个东西,一个是.specify/memory/constitution.md,这是项目的「宪法」,后面所有规格、方案、任务都得遵守它。另一个是specs/目录,每个功能一个子目录,里面放spec.md、plan.md、tasks.md这些产物。

宪法这个概念,我觉得是Spec Kit最精妙的设计之一。

你想想看,以前你跟AI说帮我写个功能,它怎么知道你的项目要不要写测试?要不要用TDD?架构上有什么约束?它不知道,它就按自己的理解来了,写出来你再改。

宪法就是把这些约束提前写死。

在AI编程工具里跑/speckit.constitution这个斜杠命令,它会生成一份constitution.md,内容大概长这样。

# My Project Constitution

## Core Principles

### I. Library-First
Every feature starts as a standalone library.

### II. CLI Interface
Text in/out protocol: stdin/args → stdout, errors → stderr

### III. Test-First (NON-NEGOTIABLE)
Red-Green-Refactor cycle strictly enforced

### IV. Integration Testing
Contracts and communication paths tested end-to-end

### V. Simplicity
Start simple, YAGNI principles

## Governance
This constitution supersedes all other practices.

你看那个Test-First后面标了NON-NEGOTIABLE,这就是在告诉AI,不许跳过测试直接写实现,没得商量。

宪法里的原则会自动注入后续所有步骤。你写进去的约束越硬,AI的产出就越可控。

这个思路,其实跟软件工程里那个很经典的概念是通的,叫契约式设计(Design by Contract)。Bertrand Meyer在1980年代就提出来了,核心想法就是,组件之间的交互由前置条件、后置条件和不变式来约束,而不是靠运行时的善意。Spec Kit的宪法,就是把这种约束从运行时提到了开发流程的最前端。

宪法立好了,接下来就是写规格。

跑/speckit.specify,生成specs/001-feature-name/spec.md。

模板结构是固定的,我拿一个用户认证的例子给你看。

# Feature Specification

**Feature Branch**: 001-user-auth
**Created**: 2026-07-02
**Status**: Draft
**Input**: 用户需要邮箱密码登录

## User Scenarios & Testing *(mandatory)*

### Scenario 1: 正常登录
**Given** 用户已注册且密码正确
**When** 提交邮箱和密码
**Then** 返回认证token,跳转到首页

### Edge Cases
- 密码错误连续5次 → 锁定账号30分钟
- 邮箱未验证 → 提示验证

## Requirements *(mandatory)*

- FR-001: 系统MUST支持邮箱+密码认证
- FR-002: 系统MUST在密码错误5次后锁定账号
- FR-003: 系统MUST使用bcrypt哈希存储密码

## Success Criteria *(mandatory)*

- SC-001: 登录响应时间 < 200ms(P95)
- SC-002: 密码哈希验证通过率 100%

## Assumptions
- 用户已有邮箱
- 不支持第三方OAuth(V1)

几个硬约束你得注意。

User Scenarios是必填的,而且必须用Given/When/Then格式写,这就是你的验收标准,没得商量。

Requirements用FR-XXX编号,后面追溯全靠这个。

Success Criteria必须可量化。「体验好」不算,「< 200ms」算。

还有个细节我觉得挺用心的,就是不确定的地方用[NEEDS CLARIFICATION]标记。模板会阻止你在规格里写技术实现细节,写了就会被挡回来,逼你把「要什么」和「怎么做」分开。

规格写完之后,我强烈建议你跑一下/speckit.clarify。

这一步是可选的,但真的别跳过。

规格里标了[NEEDS CLARIFICATION]的地方,AI会主动追问你。这一步把模糊需求消解掉,而不是带着ambiguity往下走。模糊需求是bug的温床,多花5分钟澄清,能省5小时返工,这话我说了不下八百遍了。

还可以用/speckit.analyze做跨产物一致性检查,看看spec和plan之间有没有矛盾。

规格定好了,需求澄清了,接下来就是出技术方案。

跑/speckit.plan,生成plan.md。

# Implementation Plan

**Branch**: 001-user-auth
**Spec**: specs/001-user-auth/spec.md

## Summary
邮箱密码认证,bcrypt哈希,JWT token签发

## Technical Context
- Language: Python 3.11
- Primary Dependencies: FastAPI, SQLAlchemy, bcrypt
- Storage: PostgreSQL
- Testing: pytest
- Performance Goals: P95 < 200ms

## Constitution Check
GATE: Must pass before Phase 0 research

## Project Structure
src/
├── auth/
│   ├── library.py
│   └── cli.py
tests/
└── test_auth.py

## Complexity Tracking
| Violation | Why Needed | Simpler Alternative Rejected Because |
|-----------|-----------|-------------------------------------|

你看那个Constitution Check,这是个门控。如果方案违反了宪法,比如没写测试,这一步就过不去。它不是软提醒,是硬拦截。

plan还会顺带产出research.md(技术调研)、data-model.md(数据模型)、contracts/(API契约)这些文件。每一步的产出都是下一步的输入,结构化文档在流转,不是口头描述在衰减。

方案过了宪法检查,接下来拆任务。

任务

跑/speckit.tasks,生成tasks.md。

# Task List

## Phase 1: Setup
- [ ] T001 初始化项目结构和依赖
- [ ] T002 配置数据库迁移

## Phase 2: Foundational
- [ ] T003 实现密码哈希库(Library-First)
- [ ] T004 实现JWT token签发库

## Phase 3: User Story 1 — 正常登录
- [ ] T005 [P] 实现 POST /auth/login 端点
- [ ] T006 [P] 编写登录集成测试

## Phase 4: User Story 2 — 错误锁定
- [ ] T007 实现密码错误计数
- [ ] T008 实现账号锁定逻辑

## Polish & Cross-Cutting Concerns
- [ ] T009 错误处理统一
- [ ] T010 日志和监控接入

这里有几个规则你得知道。

[P]标记表示这个任务可以并行执行,前提是不同文件、无依赖。AI会真的并行跑这些任务,不是装饰。

Foundational Phase不完成,User Story不能开工。这是强制顺序约束。

两种策略可以选,MVP First,只做User Story 1就验证方向,或者Parallel Team,Foundational完成后多个Story并行推。我自己比较倾向MVP First,先验证方向对了再铺开,Parallel Team看着快,但方向错了就是并行返工。

任务拆好了,最后就是实现。

实现

跑/speckit.implement,AI按tasks.md逐条执行,遵守宪法里的TDD约束,先写测试,再写实现,最后重构。

实现完之后,记得跑一下/speckit.converge。这个命令检查代码库是否和规格一致。规格是源,代码是派生物,converge确认两者没漂移。代码和规格的漂移是渐进的,每次实现完都跑一次,别攒到最后。

好,整个流程走完了。Spec → Plan → Tasks → Implement,五步从想法到代码。

但我得坦诚说一下,一开始用这套流程,你可能会觉得,这也太慢了吧。。。

以前我直接跟AI说一句话就开始写代码了,现在要先立宪法、写规格、澄清需求、出方案、拆任务,光这些前置步骤就花了不少时间。花的时间可能比直接上手写还长。

但坚持几周之后,你会发现,返工的次数断崖式下降。因为方向在规格阶段就定准了,不是在代码阶段反复试错。而且规格文件就在那,下次改需求,改规格重新生成就行,不用从头解释。

这个感觉,就像以前你是口头点菜,每次服务员都得重新确认你要不要辣、要不要葱。现在你写了个固定菜单,照着做就行,不会出错。

开发模式

说到这,再聊聊Spec Kit的几种开发模式。

不是只有从零开始这一种玩法。

0-to-1模式,全新项目,从宪法开始完整走完五步,适合新项目启动。

Creative Exploration模式,技术选型阶段,同一份规格生成多个技术方案并行比较。比如你不确定用FastAPI还是Django,两份plan同时出,看完再选。

Iterative Enhancement模式,已有项目加功能。保持工具更新和功能开发分成两条线,别混在一起提交。

已有项目用这个模式的时候,有个建议,把工具链的更新和功能产物的演进分开。我之前就踩过坑,升级Spec Kit版本和开发新功能混在一个PR里,结果出了问题都不知道是哪个导致的。

顺着上面的再聊聊扩展体系。

Spec Kit有三层定制,优先级从高到低。

最上面是你项目本地的模板覆盖,放在.specify/templates/overrides/里,优先级最高。然后是Presets,用来修改模板,比如改成合规格式。再然后是Extensions,新增命令,比如Jira集成、代码审查。最底层是Core Templates,内置模板。

# 搜索和安装扩展
specify extension search jira
specify extension add jira

# 搜索和安装预设
specify preset search compliance
specify preset add compliance

# 安装角色套装
specify bundle install product-manager

社区已经有105个扩展,60多个作者贡献的,还有22个预设。企业可以部署私有扩展和预设目录。

有两个治理扩展我觉得挺实用的。

CI Guard,放在CI流水线里当门控,规格没过不让合并。Architecture Guard,检查架构约束,防止实现偏离方案。有合规要求的团队,这两个扩展把「人工review规格是否被遵守」变成了自动化检查,不是花架子。

回到最核心的那个点,换AI工具这件事。

今天用Copilot,明天想换Claude Code,怎么办???

一行命令。

specify init my-project --integration claude-code

规格、方案、任务都是纯Markdown,跟AI工具无关。换工具只换执行层,产物层完全复用。

这个设计真的挺好的。相当于你的需求资产是独立的,不绑定任何一家AI工具。今天用这个,明天换那个,零成本切换。你敢信???

我自己觉得,这可能是Spec Kit最被低估的一个特性。因为现在AI编程工具迭代太快了,三个月前的工具可能现在已经被替代了。如果你的需求、方案、任务都跟某个工具深度绑定,换工具就是全部重来。但如果都存在Markdown文件里,那就是你的资产,工具只是执行者。

总结

好,最后总结几条我自己用下来的实战建议。

1,宪法写狠一点。Test-First标成NON-NEGOTIABLE,AI就不会偷懒跳测试。原则越硬,产出越可控。你写得软绵绵的,AI就会钻空子。

2,规格里别写实现细节。spec.md是「要什么」,不是「怎么做」。技术方案留给plan.md。模板本身会阻止你越界,但你也要有这个意识,别硬往规格里塞技术选型。

3,clarify不要跳过。我知道你急着想看代码,但模糊需求是bug的温床。多花5分钟澄清,省5小时返工。这话我又说了一遍。

4,MVP First策略优先。先做User Story 1,验证方向对了再铺开。Parallel Team看着快,但方向错了就是并行返工,那才叫真的浪费时间。

5,converge要常跑。代码和规格漂移是渐进的,你今天偏一点,明天偏一点,攒到最后就是两个东西了。每次实现完都跑一次/speckit.converge,把漂移扼杀在摇篮里。

6,用[P]标记并行任务。tasks.md里的[P]不是装饰,AI会真的并行执行无依赖任务,显著缩短实现时间。但前提是你得标对,有依赖的别标[P],不然并行执行会出问题。

回到最开始那个循环。

描述需求,AI生成代码,方向不对,推倒重来。

这个循环的根本问题,不是AI不够聪明,是你没有把需求结构化。需求在你脑子里是模糊的,到AI那里就更模糊了,模糊的需求不可能产生精确的代码。

Spec Kit做的事情,就是把模糊变精确,把口头变书面,把一次性变可复用。

规格是起点,代码是终点。

不是反过来。

这个思路,其实不新鲜。建筑行业几百年前就这么干了,先出蓝图再施工,没人会边想边盖楼。软件工程自己也有几十年的需求规格传统,SRS、SDD这些文档规范早就有了。但以前写这些文档太重了,没人愿意写,最后都变成了「敏捷」名义下的口头沟通。

Spec Kit的聪明之处在于,它让规格变成了AI可执行的东西。你不是在写没人看的文档,你是在写AI会严格按照它来生成代码的规格。写规格的投入,直接转化为代码产出的质量。这才是规格驱动开发真正能跑起来的原因。

不是因为你更有纪律了,是因为AI让规格有了执行力。

这才是这件事真正有意思的地方。

谢谢你看我的文章,我们,下次再见。

更多推荐