AI 编程模式深度对比:Vibe Coding、SDD 与 Harness Engineering 的实践指南

AI 编程模式深度对比:Vibe Coding、SDD 与 Harness Engineering 的实践指南

Ethan
2025-12-05 发布 / 正在检测是否收录...

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..."

// ✓ 适合
"我需要一个可以直接跑起来的用户管理系统,界面简洁大方就好"

风险

  1. 不可重复:同样描述可能生成不同代码
  2. 难以调试:不理解架构时 Bug 难定位
  3. 技术债务:快速迭代中 AI 可能不断打补丁
  4. 幻觉放大: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 CodingSDDHarness Engineering
核心驱动感觉描述规格文档工程规则
上手难度
代码质量不稳定可控最好
迭代速度极快中等中等偏慢
可维护性最好
适用阶段MVP/原型/PoC企业级功能开发高质量长期维护

选型决策框架

需要快速原型?→ Vibe Coding
需要高质量交付?→ SDD
需要长期维护?→ Harness Engineering

最佳实践:三阶段混合
1. Vibe Coding 做原型(1-2天验证想法)
2. SDD 写核心功能(规格文档驱动实现)
3. Harness Engineering 做维护(规则约束持续迭代)

总结

AI 编程模式的选择最终取决于项目阶段和团队成熟度。个人项目或快速原型用 Vibe Coding 可以获得极致速度;企业级项目用 SDD 可以保证代码质量和团队协作;长期负责的项目用 Harness Engineering 可以控制技术债务。最有经验的团队不会只选一种模式,而是根据项目阶段灵活切换

© 版权声明
THE END
喜欢就支持一下吧
点赞 1 分享 收藏

评论 (0)

取消

Warning: file_put_contents(/var/www/html/usr/cache/pagecache/39/3906a8c6045ee88a377b4a5c318599d2.cache): failed to open stream: No such file or directory in /var/www/html/usr/plugins/PageCache/Plugin.php on line 188