AI 编程工具已经足够强大,但"如何使用它们"却成了一个新问题。Vibe Coding、SDD(Specification-Driven Development)和 Harness Engineering 是 2025 年最活跃的三种 AI 编程模式。选错模式可能导致项目失控。
Vibe Coding:感觉驱动的快速原型
定义
由 Andrej Karpathy 提出——你描述"感受"而不是写具体指令。比如"让这个页面的配色更温暖一些"或"把这个按钮做得更有质感"。
适用场景
- MVP 快速原型(1-3 天出可演示版本)
- UI 探索(不确定最佳交互方式时)
- 个人项目(不需要严格规范的场景)
实战对比
// ✗ 不适合(太具体)
"创建一个 300px 宽的蓝色按钮,hover 时变暗 10%,圆角 8px"
// ✓ 适合(描述感觉)
"创建一个有科技感的主要操作按钮,点击时让人感到可靠和流畅"
// ✗ 不适合
"使用 MySQL 存储用户数据,字段包括 id、name、email..."
// ✓ 适合
"我需要一个可以直接跑起来的用户管理系统,界面简洁大方就好"风险
- 不可重复:同样描述可能生成不同代码
- 难以调试:不理解架构时 Bug 难定位
- 技术债务:快速迭代中 AI 可能不断打补丁
- 幻觉放大:AI 可能凭空引入依赖
SDD(Specification-Driven Development)
定义
核心理念:"先写规格说明,再让 AI 实现"。在写代码前,先用结构化文档定义清楚系统的每个细节——API 签名、数据模型、状态流转、错误处理。
适用场景
- 企业级项目(多人协作,需要一致性)
- 长期维护项目(技术债务必须可控)
- 与 AI 配合完成大型功能
Spec-Kit 驱动开发
// feature/user-auth.spec.md
# Feature: 用户认证
## API Design
### POST /api/auth/login
- Request: { username: string, password: string }
- Response: { token: string, user: { id, name, email } }
- Errors: 401 InvalidCredentials, 429 TooManyAttempts
## Data Model
- User(id: Long, username: String, email: String, passwordHash: String)
- RefreshToken(id: Long, userId: Long, token: String, expiresAt: DateTime)
## Business Rules
- 密码使用 BCrypt 加密,cost=12
- JWT Token 有效期 24h
- 连续 5 次登录失败锁定账户 15 分钟
## Tech Stack
- Spring Boot 3.2 + Spring Security + JWT
- MySQL 8.0 + Redis 7将 Spec 交给 Cursor/Claude Code,AI 生成与规格完全一致的代码。修改需求时,先改 Spec 再重新生成——确保文档和代码始终同步。
OpenSpec:让规范可执行
{
"x-openspec": {
"contracts": {
"UserRegistration": {
"given": ["未注册的用户名和邮箱"],
"when": ["调用 POST /api/auth/register"],
"then": [
"返回 200 和 userId",
"数据库中存在该用户记录",
"密码字段不是明文"
]
}
}
}
}
// openspec generate --format junit5 --output src/test/Spec-Kit vs OpenSpec:Spec-Kit 偏重文档即规格(Markdown,适合中小团队);OpenSpec 偏重可执行规格(自动生成测试,适合大团队)。
Harness Engineering:把 AI 当工程工具管理
定义
核心理念:"AI 是工具,人是驾驭者(Harnesser)"。像管理工程团队一样管理 AI——设定边界、制定规则、持续监控。
五大实践
1. AI 工作边界(Guardrails)
## 硬性约束(不可违反)
- 禁止引入项目未使用的新依赖
- 禁止修改数据库 schema 除非在 Spec 中定义
- 禁止生成超过 200 行的函数
- 所有数据库操作必须使用参数化查询2. 代码审查清单
[ ] 是否引入了新的依赖?(必须说明理由)
[ ] 是否有硬编码的密钥或配置?
[ ] 函数圈复杂度是否 < 10?
[ ] 是否覆盖了所有错误分支?
[ ] 是否有 SQL N+1 问题?3. 渐进式交付
不让 AI 一次生成 1000 行代码——第一步接口定义和数据模型 → 第二步 Service 层 → 第三步 Controller 和测试。
4. 上下文压缩
每次对话只加载 2-5 个相关文件;用 /clear 重置上下文;复杂任务拆分为独立微任务。
5. 可追溯性
feat: 实现用户认证模块 [AI-80%]
- 使用 Spec-Kit 生成基础代码结构
- 手动调整 JWT 过期策略
fix: 修复订单金额计算精度问题 [Manual]
- 使用 BigDecimal 替代 double三种模式对比
| 维度 | Vibe Coding | SDD | Harness Engineering |
|---|---|---|---|
| 核心驱动 | 感觉描述 | 规格文档 | 工程规则 |
| 上手难度 | 低 | 中 | 高 |
| 代码质量 | 不稳定 | 可控 | 最好 |
| 迭代速度 | 极快 | 中等 | 中等偏慢 |
| 可维护性 | 差 | 好 | 最好 |
| 适用阶段 | MVP/原型/PoC | 企业级功能开发 | 高质量长期维护 |
选型决策框架
需要快速原型?→ Vibe Coding
需要高质量交付?→ SDD
需要长期维护?→ Harness Engineering
最佳实践:三阶段混合
1. Vibe Coding 做原型(1-2天验证想法)
2. SDD 写核心功能(规格文档驱动实现)
3. Harness Engineering 做维护(规则约束持续迭代)总结
AI 编程模式的选择最终取决于项目阶段和团队成熟度。个人项目或快速原型用 Vibe Coding 可以获得极致速度;企业级项目用 SDD 可以保证代码质量和团队协作;长期负责的项目用 Harness Engineering 可以控制技术债务。最有经验的团队不会只选一种模式,而是根据项目阶段灵活切换。
评论 (0)