Vibe Coding

Vibe Coding 不是“把代码交给 AI 自动完成”,而是把开发变成以目标、上下文、约束和验证为中心的人机协作流程。

1. 什么是 Vibe Coding

Vibe Coding 可以理解为一种目标驱动的人机协作开发方式。

它强调:

  • 人负责定义目标、约束、验收标准和优先级
  • AI 负责生成草案、补全实现、执行重复劳动、给出备选方案
  • 人继续审查、修正、验证和决策

所以它更像“高带宽协作开发”,而不是“完全自动编程”。

2. 为什么重要

在 AI 辅助开发里,真正稀缺的往往不是敲代码速度,而是:

  • 问题定义能力
  • 约束表达能力
  • 上下文组织能力
  • 方案判断能力
  • 验证结果能力

Vibe Coding 把工程师的重心从“逐行实现”前移到“定义问题和控制结果”。

3. 适合与不适合的场景

适合:

  • 原型验证
  • 小功能迭代
  • 重复性样板代码
  • 文档、测试、脚手架生成
  • 已有代码库里的定向修改

不适合直接无护栏使用:

  • 高风险核心交易逻辑
  • 安全敏感模块
  • 缺少测试和验收标准的复杂系统
  • 完全陌生、上下文极不足的老项目

4. 核心心智模型

不要把 AI 当“全自动程序员”,更合理的理解是:它是一个速度很快、上下文依赖很强、需要验收护栏的协作者。

AI 擅长:

  • 快速起草
  • 模式归纳
  • 代码补全
  • 文档整理
  • 多方案发散

AI 不擅长:

  • 自动理解隐藏约束
  • 稳定处理模糊需求
  • 对长期架构后果负责
  • 默认保证正确性

5. 基本流程

目标描述
  -> 补充上下文与约束
  -> 让 AI 生成方案 / 代码
  -> 人审查结果
  -> 用测试、运行结果或规格验证
  -> 继续修正 prompt / 规格 / 实现

核心不是“一次生成”,而是“快速迭代 + 持续验证”。

6. 高质量上下文

高质量输入通常包括:

  • 当前任务目标
  • 所在项目技术栈
  • 相关文件或模块
  • 约束条件
  • 验收标准
  • 输出格式要求

差输入:

帮我写个评论功能

好输入:

在 React + TypeScript 项目中新增评论组件。
要求支持已登录用户发表评论,长度 1-500 字;
未登录时显示登录提示;
提交成功后刷新列表;
网络失败时保留输入内容并显示错误提示。
请给出组件实现和状态处理逻辑。

7. 提示词工程在 Vibe Coding 里的位置

提示词工程不是“写魔法咒语”,而是系统地设计输入,让模型更稳定地产生可用输出。

它关心:

  • 任务有没有讲清楚
  • 约束有没有讲清楚
  • 上下文有没有给够
  • 输出格式是否可验证

一个最小通用模板:

背景:
目标:
约束:
输入材料:
输出要求:

工程任务更推荐:

Context:
Objective:
Constraints:
Input:
Output:
Validation:

字段含义:

  • Context:项目背景、技术栈、相关模块、已有规则
  • Objective:这次到底要完成什么
  • Constraints:不能做什么,必须满足什么
  • Input:任务材料、代码片段、数据、文档
  • Output:结果格式
  • Validation:怎么判断结果是对的

8. 常见有效技巧

8.1 结构化优于散文化

建议显式分块:

  • 背景
  • 目标
  • 约束
  • 输入材料
  • 输出格式
  • 验收标准

8.2 可验证优于“看起来不错”

好的提示词会要求:

  • 固定输出格式
  • 列出假设
  • 标明不确定点
  • 给出验证方式

8.3 显式写出边界条件

例如:

  • 空输入怎么处理
  • 失败时返回什么
  • 不要改哪些文件
  • 不要引入哪些依赖

8.4 先拆问题,再求结果

对复杂任务,常见写法是:

先列出假设,再给方案;
先分析根因,再给修复;
先给计划,再开始实现。

这能减少模型直接冲向错误答案。

9. 适合不同任务的提示框架

小任务

背景:
目标:
约束:
输出格式:

编码助手任务

Context:
- React 18 + TypeScript
- 已存在 CommentList 和 api client
 
Objective:
- 新增评论输入组件,并接入提交逻辑
 
Constraints:
- 保持现有代码风格
- 不引入新依赖
- 失败时保留用户输入
 
Output:
- 给出需要修改的文件
- 提供关键实现代码
- 补充测试建议
 
Validation:
- 已登录用户可提交
- 未登录用户看到提示
- 提交失败时显示错误信息

分析类任务

背景:
任务:
分析维度:
证据来源:
输出结构:
不确定项处理:

Agent 任务

任务目标:
可用工具:
禁止操作:
完成条件:
失败处理:
输出要求:

Agent 任务里,工具边界和终止条件非常关键。

10. 什么时候提示词不够用

如果总是出现这些问题:

  • 模型老是缺上下文
  • 输出不稳定
  • 事实不可靠
  • 任务需要访问外部系统

那问题往往已经不只是 prompt,而是需要进入:

也就是说,提示词工程只是 AI Engineering 的一部分。

11. 常见误区

11.1 AI 会自动理解真实意图

不会。它只能根据你给出的信息推断。

11.2 生成出来能跑就算完成

不够。还需要确认:

  • 是否符合需求
  • 是否符合代码库风格
  • 是否覆盖异常分支
  • 是否可维护

11.3 存在一条万能最佳提示词

不存在。提示词高度依赖:

  • 模型
  • 任务
  • 上下文
  • 评测标准

11.4 AI 能替代工程判断

不能。AI 可以加速实现,但不能替你承担架构责任和业务责任。

12. 实践建议

从小任务开始

例如:

  • 补一个 API
  • 写一个组件
  • 加一个测试
  • 重构一个小函数

每次只解决一个主问题

不要在一个 prompt 里同时要求:

  • 改架构
  • 修 bug
  • 写测试
  • 优化 UI
  • 补文档

始终要求可验证结果

例如:

  • 给出变更文件
  • 给出测试方式
  • 给出边界处理
  • 给出失败场景

13. 与 SDD 的关系

Vibe Coding 偏协作方式,SDD 偏需求和规格治理。

可以理解为:

  • Vibe Coding 解决“人和 AI 如何协作”
  • SDD 解决“任务如何先被定义清楚”
  • Harness Engineering 解决“AI 如何在稳定环境里工作”

复杂任务不要只靠一条长 prompt,应该先写规格,再让 AI 基于规格实现和验证。

14. 一句话总结

Vibe Coding 的本质不是“把代码交给 AI”,而是“把开发协作升级为以目标、上下文、约束和验证为中心的工作流”。