Vibe Coding 实战手册

maniacta
Beijing, China
2 min read

Vibe Coding 实战手册

AI 编程的本质不是「让 AI 写代码」,而是「让 AI 理解你想要什么」。
你的需求描述能力,决定了 AI 的输出质量。


一、注意力机制与上下文工程

为什么要理解这个?

不理解 AI 的工作原理,你就永远在瞎试。

很多人用 AI 编程的体验是:有时候特别好用,有时候特别蠢。这是因为你不知道它的「注意力」是怎么分配的。

注意力机制的本质

大语言模型基于 Transformer 架构,核心是 注意力机制(Attention)

模型在生成每个字的时候,会「看」之前所有的内容,但不是平均地看,而是有重点地看

你给 AI 的输入(上下文):
┌─────────────────────────────────────────────────┐
│ 系统提示 │ 历史对话 │ 当前问题 │ 相关文件 │ ... │
└─────────────────────────────────────────────────┘
      ↓           ↓          ↓          ↓
   注意力权重分配(不均匀)

   AI 的回答

上下文越长,每个部分能分到的「注意力」就越少。

这就是为什么:

  • 对话太长,AI 会「忘记」前面说的
  • 一次塞太多需求,AI 会漏掉一些
  • 重要信息放在中间,容易被忽略

上下文腐烂(Context Rot)

Anthropic 的工程团队提出了 Context Rot(上下文腐烂) 概念:

随着上下文窗口中 token 数量增加,模型准确回忆信息的能力会下降。

这不是 bug,是架构的固有限制。n 个 token 会产生 n² 个注意力关系,上下文越长,关系越稀疏。

上下文工程策略

问题策略
上下文太长定期开新对话,保持上下文干净
重要信息被稀释把关键信息放在开头或结尾
AI「忘记」之前的约定用 CLAUDE.md 固化重要规则
一次性需求太多拆分成多个小任务

把 AI 的上下文窗口想象成一个容量有限的工作台。东西太多就会乱,要定期清理。


二、提示词工程

提示词的本质

提示词不是「咒语」,是沟通协议

你和 AI 之间的沟通,本质上和你跟一个新来的实习生沟通是一样的:

  • 说清楚要做什么
  • 说清楚怎么做
  • 说清楚做成什么样

提示词的三层结构

┌─────────────────────────────────────────┐
│  第一层:角色设定(你是谁)              │
│  「你是一个资深的 React 开发者...」      │
├─────────────────────────────────────────┤
│  第二层:任务描述(做什么)              │
│  「实现一个用户登录功能...」             │
├─────────────────────────────────────────┤
│  第三层:约束条件(怎么做)              │
│  「使用 TypeScript,遵循项目现有风格...」│
└─────────────────────────────────────────┘

Claude code已经内置了一份系统提示词,所以当我们使用的时候只需要输入 第二层 + 第三层即可

CLAUDE.md:一劳永逸的提示词

Claude Code 有一个特殊文件叫 CLAUDE.md,启动时自动加载到上下文。

这相当于一次性把「角色设定」和「约束条件」固化下来,每次对话不用重复说。

CLAUDE.md 模板

# 项目:[项目名称]

## 技术栈
- 前端:React 18 + TypeScript + Tailwind CSS
- 后端:Node.js + Express + Prisma
- 数据库:PostgreSQL

## 代码规范
- 组件使用函数式写法,不用 class
- 异步操作用 async/await
- 错误处理用 try-catch,不要静默失败
- 变量命名:camelCase,组件命名:PascalCase

## 项目结构
- /src/components - 可复用组件
- /src/pages - 页面组件
- /src/hooks - 自定义 hooks
- /src/utils - 工具函数
- /src/api - API 调用

## 重要约定
- 所有 API 响应统一格式:{ success, data, error }
- 表单验证使用 zod
- 状态管理使用 zustand
- 不要安装新依赖,除非我明确要求

思考模式关键词

Claude Code 支持不同级别的思考深度,通过关键词触发:

关键词思考深度适用场景建议使用频率
(不加)快速响应简单修改20%
think基础思考常规功能30%
think hard深度思考需要设计的功能35%
think harder更深思考复杂逻辑10%
ultrathink最深思考架构决策5%

宁可多花 30 秒让它想清楚,也不要花 30 分钟改它的烂代码。


三、无歧义需求描述

歧义是效率杀手

最常见的问题就是:需求描述有歧义

你说「做个登录功能」,AI 可能给你:

  • 只有用户名密码的简单登录
  • 带手机验证码的登录
  • 带第三方 OAuth 的登录
  • 以上全部

然后你说「不对」,它改一版,还是不对,再改,还是不对……时间就这么浪费了。

SMART-C 框架

要素含义示例
Specific具体不说「登录」,说「邮箱+密码登录」
Measurable可衡量「密码至少8位,包含大小写和数字」
Actionable可执行「使用 bcrypt 加密,JWT 生成 token」
Restricted有约束「不要用第三方登录库」
Testable可测试「登录成功跳转 /dashboard,失败显示错误」
Context有上下文「参考现有的 /api/register 接口风格」

实战对比

差的描述

帮我做个用户管理功能

好的描述

实现用户管理模块,包含以下功能:

**1. 用户列表页**

- 表格展示:ID、用户名、邮箱、角色、创建时间、状态
- 支持分页,每页 20 条
- 支持按用户名、邮箱搜索
- 支持按角色、状态筛选

**2. 用户详情/编辑**

- 点击用户名进入详情页
- 可编辑:用户名、邮箱、角色、状态
- 不可编辑:ID、创建时间
- 保存后返回列表页

**3. 技术要求**

- 使用现有的 /api/users 接口
- 表格用 shadcn/ui 的 Table 组件
- 表单验证用 react-hook-form + zod

**4. 参考**

- 样式参考现有的 /admin/products 页面
- API 调用方式参考 src/api/products.ts

需求描述模板

## 功能:[功能名称]

### 用户故事
作为 [角色],我希望 [做什么],以便 [达到什么目的]

### 功能点
1. [功能点1]
2. [功能点2]
3. ...

### 界面要求
- [布局要求]
- [交互要求]
- [样式参考]

### 技术要求
- [使用的技术/库]
- [接口规范]
- [性能要求]

### 边界情况
- [异常情况1如何处理]
- [异常情况2如何处理]

### 验收标准
- [ ] [标准1]
- [ ] [标准2]

四、验证效果

核心理念

你不需要理解代码,你只需要验证结果。

验证流程

AI 生成代码

能跑起来吗? ──否──→ 让 AI 修
    ↓是
功能对吗? ──否──→ 描述问题,让 AI 改
    ↓是
边界情况对吗? ──否──→ 补充边界情况,让 AI 处理
    ↓是
通过 ✓

快速验证清单

验证项怎么验证
能编译pnpm build 不报错
能运行页面能打开,不白屏
主流程通核心功能点一遍
边界情况空数据、错误输入、网络错误
响应式手机尺寸看一眼

整个过程不超过 5 分钟。

让 AI 自己写测试

让 AI 写完功能后,再让它写测试。

为刚才实现的用户登录功能编写单元测试,覆盖以下场景:
1. 正常登录成功
2. 密码错误
3. 用户不存在
4. 账户被锁定
5. 输入格式错误

然后跑测试,测试不过就让它改。这比你手动点点点高效多了。


五、代码审查

要不要看代码?

原则:平时不看,关键时刻看

场景要不要看
普通 CRUD不看
核心业务逻辑看关键部分
安全相关(认证、支付)仔细看
性能敏感看并优化
上线前让 AI 做一次全面审查

让 AI 审查代码

与其自己看,不如让 AI 审查:

审查 src/api/auth.ts 文件,检查以下方面:
1. 安全漏洞(SQL注入、XSS、CSRF)
2. 错误处理是否完善
3. 边界情况是否覆盖
4. 代码是否符合项目规范
5. 有没有性能问题

列出所有问题,并给出修复建议。

上线前安全审查

上线前必做

think hard 对整个项目做安全审查,重点检查:
1. 认证和授权逻辑
2. 敏感数据处理(密码、token)
3. API 接口安全
4. 前端 XSS 防护
5. 依赖包的已知漏洞

给我一份安全审查报告。

六、Bug 定位与修复

正确姿势

出 bug 了怎么办?不要自己去翻代码。

正确的做法是:把 bug 的所有信息喂给 AI,让它定位和修复。

Bug 报告模板

## Bug 描述
[一句话描述问题]

## 复现步骤
1. [步骤1]
2. [步骤2]
3. [步骤3]

## 期望行为
[应该发生什么]

## 实际行为
[实际发生了什么]

## 错误信息
[粘贴完整的错误日志/控制台输出]

## 环境信息
- 浏览器:Chrome 120
- 操作系统:macOS
- 相关文件:src/pages/Login.tsx

实战对比

差的 bug 报告

登录不好使了,帮我看看

好的 bug 报告

**Bug:登录时页面无响应**

**复现步骤**

1. 打开 /login 页面
2. 输入正确的邮箱和密码
3. 点击登录按钮

**期望行为**
跳转到 /dashboard

**实际行为**
按钮变成 loading 状态后一直转圈,没有跳转,也没有错误提示

**控制台错误**

‍```
POST http://localhost:3000/api/auth/login 500
Uncaught (in promise) Error: Request failed with status 500
‍```

**网络请求**
Response: {"error": "Cannot read property 'password' of undefined"}

复杂 Bug 的渐进式调试

第一轮:让 AI 分析可能的原因
> 分析这个 bug 可能的原因,列出 3-5 个最可能的原因,按可能性排序

第二轮:逐个排查
> 先检查第一个可能性:[xxx],在相关代码中加入日志,帮我定位

第三轮:确认并修复
> 确认是 [xxx] 的问题,修复它,并确保不影响其他功能

让 AI 解释代码

如果你实在需要理解某段代码:

解释 src/utils/auth.ts 中的 validateToken 函数:
1. 这个函数做了什么
2. 输入和输出是什么
3. 有哪些边界情况处理
4. 可能出问题的地方

比自己读代码快 10 倍。


七、常用技巧

技巧一:分而治之

不要一次提一堆需求。

一次一个功能,做完一个再做下一个。原因前面讲过:上下文有限,塞太多会「注意力分散」。

推荐节奏:

  • 一个功能 = 一轮对话
  • 一轮对话 = 描述需求 → 生成 → 验证 → 微调
  • 大功能完成后,开新对话

技巧二:先让 AI 读文件

开新对话时,先让 AI 建立上下文:

阅读以下文件,理解项目结构和现有代码风格:
- src/App.tsx
- src/components/Layout.tsx
- src/api/index.ts
- src/types/index.ts

读完后告诉我你的理解。

这样后续的代码生成会更符合项目风格。

技巧三:用「参考」来约束风格

实现一个 ProductCard 组件,参考现有的 UserCard 组件的风格和结构

比你描述半天「要怎么怎么样」有效得多。

技巧四:让 AI 先出方案

复杂功能不要直接让 AI 写代码,先让它出方案:

think hard 关于如何实现订单系统,我需要:
- 订单创建、支付、发货、完成的完整流程
- 订单状态机
- 库存扣减逻辑

先给我一个设计方案,不要写代码。包括:
1. 数据库表设计
2. API 接口设计
3. 核心流程图
4. 需要注意的边界情况

方案确认后再让它实现,避免返工。

技巧五:保存好用的提示词

建立一个提示词库:

# 我的提示词库

## 代码审查
> 审查 [文件] 的代码质量,检查...

## Bug 修复
> 这个功能出现了问题...

## 重构
> 重构 [文件],目标是...

## 性能优化
> 分析 [功能] 的性能问题...

好用的提示词是可以复用的。


八、高级技巧

Plan 模式

当你面对复杂任务时,可以让 AI 先制定计划:

我需要实现一个完整的电商后台系统,包括:
- 商品管理
- 订单管理
- 用户管理
- 数据统计

think harder 制定一个详细的实施计划,包括:
1. 任务拆解(按优先级排序)
2. 每个任务的预估工作量
3. 任务之间的依赖关系
4. 建议的实施顺序

不要写代码,只要计划。

AI 会给你一份详细的项目计划。然后你可以:

好的,按照这个计划,我们先做第一个任务:[任务名]

这样大项目也能有条不紊地推进。

Claude code 使用 Shift+Tab 可切换模式 Edit \ Plan

多文件协同修改

当修改涉及多个文件时:

这个功能需要修改以下文件,请一起修改,确保一致性:
- src/types/user.ts(添加新字段)
- src/api/user.ts(更新接口)
- src/pages/UserProfile.tsx(更新界面)
- src/components/UserForm.tsx(更新表单)

修改内容:给用户添加「部门」字段

让 AI 模拟用户测试

假设你是一个普通用户,测试刚才实现的注册流程:
1. 列出你会尝试的所有操作(包括正常和异常)
2. 预测每个操作的结果
3. 找出可能的问题

这能帮你发现很多边界情况。

渐进式重构

老代码需要重构时:

我需要重构 src/utils/helpers.ts,这个文件太大了(500行)。

请:
1. 分析这个文件的功能分类
2. 建议如何拆分成多个小文件
3. 给出拆分后的文件结构
4. 一个一个地执行拆分,每次拆分后确保项目能正常运行

上下文恢复

对话太长需要开新会话时,如何恢复上下文:

我们之前在做 [项目名] 的 [功能名]。

当前进度:
- [x] 已完成:[列表]
- [ ] 进行中:[当前任务]
- [ ] 待完成:[列表]

请先阅读以下文件恢复上下文:
- [相关文件列表]

然后我们继续 [当前任务]。

让 AI 写文档

项目完成后:

为这个项目生成以下文档:

1. README.md
   - 项目介绍
   - 技术栈
   - 本地开发指南
   - 部署指南

2. API 文档
   - 所有接口的请求/响应格式
   - 认证方式
   - 错误码说明

3. 数据库文档
   - 表结构说明
   - 字段说明
   - 关系图

速查表

思考模式关键词

关键词场景
think常规功能
think hard需要设计的功能
think harder复杂逻辑
ultrathink架构决策

CLAUDE.md 必备内容

# 技术栈
# 代码规范
# 项目结构
# 重要约定
# 常用命令

如果是现存项目可使用 /init 生成

需求描述 SMART-C

  • Specific - 具体
  • Measurable - 可衡量
  • Actionable - 可执行
  • Restricted - 有约束
  • Testable - 可测试
  • Context - 有上下文

Bug 报告模板

## Bug 描述
## 复现步骤
## 期望行为
## 实际行为
## 错误信息
## 环境信息

FAQ

中文好用吗?
非常好用,全程用中文没问题。

团队怎么协作?
每个人独立使用,代码合并还是用 Git。可以共享 CLAUDE.md 保持风格统一。

会取代程序员吗?
不会。但会用 AI 的程序员会取代不会用的。

学习曲线陡吗?
不陡。会写需求文档,就会用 AI 编程。


这是一个沟通能力比编码能力更重要的时代。

Link copied to clipboard!