Vibe Coding 与 AI 辅助编程 · 问答整理
主题:AI 辅助编程的定位认知、Token 成本控制、线上问题处理与实战经验。
1. Vibe Coding 到底是什么?
Vibe Coding 与常规 AI 辅助编程的核心差异,在于人对代码的参与程度与责任归属:
| 维度 | Vibe Coding | AI 辅助编程 |
|---|---|---|
| 代码生成 | AI 生成 | AI 生成 |
| 代码审查 | 不看,直接 Accept | 逐行审查 |
| 报错处理 | 粘贴给 AI | 分析根因再决定 |
| 对代码负责 | 不负责 | 完全负责 |
一句话概括:Vibe Coding 是"只管氛围、不管代码",AI 辅助编程是"AI 写、人审、人负责"。
2. AI 越来越强,你的优势到底是什么?
AI 很强,但它需要精确的问题定义。我的优势在于:
- 把模糊需求拆解成技术规格。 边界条件、异常处理、业务规则,这些 AI 不会主动问你,但不说清楚代码一定写不对。
- 上下文构建能力。 同样用 Claude Code,不同人产出质量差很多,差别就在上下文构建——我给 AI 的 Prompt 包含完整的业务规则、相关代码片段和边界条件,而不是一句话就让它写。AI 的上限是由你的输入质量决定的。
- 业务语义验证。 AI 生成的代码我会重点验证业务语义,不是看能不能跑通,而是看行为是否符合业务意图。比如退款接口,我会验证退款金额、退款对象、幂等性,这些是测试覆盖不到的,必须人工理解。
- 选型决策权。 AI 能帮我分析方案,但最终的选型决策是我做的。因为决策要考虑的不只是技术因素,还有团队现状、业务阶段、历史教训——这些 AI 不知道,也不应该由 AI 决定。
- 成本控制能力。 知道什么时候用大模型、什么时候用小模型;知道怎么组织上下文才省 Token;知道怎么写 Prompt 才能减少来回次数;知道哪些任务让 AI 做更贵、自己做更便宜。
3. AI 编程工具的 Token 成本怎么控制?
- 做模型路由策略。 简单补全用小模型,复杂任务才用大模型。70% 的日常编码任务其实不需要最强模型,这样整体 Token 成本能降 60% 以上。
- 主动管理上下文。 只给 AI 相关的代码片段,而不是整个项目。修改用户模块就只给用户模块的代码和它依赖的接口定义。这样 Token 消耗能降 3–5 倍,而且 AI 生成质量反而更好——因为无关信息少了,模型不容易被干扰。
- 写好 Prompt:
- 说清楚目标:不是"写个接口",而是"写一个 REST 接口,接收退款请求,参数包括订单号和退款金额,需要幂等校验"。
- 说清楚约束:性能要求、安全要求、代码规范。
- 说清楚上下文:相关的数据库表结构、上下游接口。
- 给示例:一个具体的输入输出示例,比 100 字描述更有效。
- 维护一套代码模板。 AI 只需要根据具体需求填充差异部分,而不是每次从零生成。配合 Prompt Caching,相似任务的 Token 消耗能降低 50% 以上。
3.1 按任务类型选择模型级别
| 任务类型 | 推荐模型级别 | 原因 |
|---|---|---|
| 代码补全、简单修改 | 小模型 | 速度快、成本低、够用 |
| 函数实现、Bug 修复 | 中模型 | 平衡成本和质量 |
| 架构设计、复杂重构、代码审查 | 大模型 | 需要深度推理 |
| 代码解释、文档生成 | 小模型 | 不需要强推理 |
3.2 Token 成本控制总结
| 策略 | 核心思路 | 预期效果 |
|---|---|---|
| 模型路由 | 简单任务用小模型 | 成本降 60%+ |
| 上下文管理 | 只给相关代码 | 消耗降 3-5 倍 |
| Prompt 优化 | 一次说清楚 | 往返次数降 3-4 倍 |
| 缓存复用 | 不从零开始 | 消耗降 50%+ |
| 任务评估 | 不该用 AI 的就别用 | 视场景 |
4. AI 生成的代码出了线上 bug,你怎么处理?
三步走:先止血,再定因,最后补流程。
- 止血。 回滚或降级,先让线上恢复。不管是不是 AI 写的代码,处理方式一样。
- 定因。 看监控确认影响范围,看日志追踪调用链路,定位到具体的问题代码。如果是 AI 生成的代码,还要想清楚审查的时候为什么没拦住——是安全没审到,还是边界条件没覆盖,还是业务语义理解有偏差。
- 补流程。 补充测试用例、加强审查重点,甚至调整哪些场景允许 AI 生成。一个 bug 不可怕,同类 bug 再出一次才可怕。
5. .env 与 .env.example 有什么区别?
| 维度 | .env | .env.example |
|---|---|---|
| 作用 | 程序实际读取的配置 | 配置模板、文档 |
| 内容 | 真实值,可能含密钥 | 占位符、示例值、注释 |
| 是否提交 Git | 通常不提交,加入 .gitignore | 通常提交 |
| 是否被自动加载 | 是,很多框架会自动加载 | 否,需手动复制成 .env |
| 安全性 | 敏感,泄露风险高 | 安全,不应含真实密钥 |
| 环境差异 | 每个开发者/环境不同 | 通用,随代码仓库更新 |
| 团队协作 | 各自本地创建 | 新人克隆后复制使用 |
6. 你怎么用 Vibe Coding?踩过什么坑?
我刚开始用 Vibe Coding 时,发现最大的问题不是 AI 写不出来,而是恢复点不足。AI 一次改太多文件,如果没有 Git 小步提交,后面出问题很难回退。所以我现在会按模块拆任务,每个功能一个闭环:先让 AI 出计划,再限制改动范围,改完看 diff、验证、提交。
另一个坑是数据和代码的边界。小项目很容易把 SQLite、上传文件、配置文件放在项目目录,部署覆盖时可能误伤真实数据。所以我会把代码目录和数据目录隔离,仓库只放配置模板,真实数据库和上传文件单独存储。涉及数据库操作时,先备份,只让 AI 生成脚本,不直接执行生产动作。
还有一点:本地方案不能直接等价于线上方案。线上路径、运行用户、配置来源、数据库实例都可能不同,所以部署前我会先列出本地和线上环境差异,再让 AI 基于差异生成方案。
最后一个经验是文档先行。我现在开发新功能前,会先让 AI 生成技术文档,包括流程设计、表结构、接口定义、异常处理。我先审查文档,确认没问题再让 AI 写代码。功能完成后再让 AI 更新文档,记录实际实现。这样切换 AI 工具时,新工具直接读文档就能接手,不用每次都重新理解项目。
7. 为什么 Prompt 末尾的指令对生成结果影响最大?
Decoder-Only 模型的生成本质是"续写"——接着你最后一个 Token 往下写。末尾的指令直接决定了续写的方向。开头的内容通过注意力影响整个生成过程,但末尾的指令距离生成位置最近,注意力权重天然更高。所以 System Prompt 放开头定基调,关键指令放结尾定方向,上下文放中间。