零基础 Vibe Coding 迷你课 (四): 当 AI 犯错时怎么办?
如果你曾使用 AI 写过代码,你的第一感受可能是 AI 实在太强大了。但很快,你可能也会发现,AI 实在是太容易犯错了。
如果你曾使用 AI 写过代码,你的第一感受可能是 AI 实在太强大了。但很快,你可能也会发现,AI 实在是太容易犯错了。
项目刚开始时,AI 往往能推进得飞快;但随着项目变得复杂,它似乎会越写越糟糕,问题越来越多,直到最后出现一个尴尬的局面:你和 AI 都不知道这个项目该如何继续维护下去了。
这期内容,作为我们“零基础 Vibe Coding 迷你课”的最后一期,我们就来深入探讨一下,如何解决 AI 犯错的问题。
📺 视频版:AI编程的3个必修课,让你的代码不翻车
不想看文字?视频版在这里
从根源出发:AI 究竟为什么会犯错?
要解决问题,首先要理解问题。从第一性原理出发,AI 犯错只有两种可能的原因:
- 模型自身的能力问题: 底层模型不够好。
- 你给模型的输入问题: 也就是上下文 (Context) 不足或不当。
有句老话叫:“Garbage in, garbage out”(垃圾进,垃圾出)。Langchain 官网的一篇博客也表达了类似的观点:AI 在复杂编程任务上的失败,往往并非模型能力不足,而是缺乏必要的上下文。

随着 AI 模型本身越来越强大,绝大多数问题都源于第二点。AI 无法直接“记住”你的整个代码库,对最新的技术文档也常有盲区。因此,我们在 Vibe Coding 中的核心进阶技巧,就是学会如何高效地为 AI 准备它完成任务所需的上下文。这个过程,我们称之为**“上下文工程” (Context Engineering)**。
防患于未然:写代码前的“上下文准备”
最好的 Debug,就是不让 Bug 发生。在指挥 AI 开始编码前,做好充分的上下文准备,可以从源头上避免大量的错误。
技巧一:提供高质量的项目计划
这是最重要的一点。与其一句一句地和 AI 聊天,不如先花时间准备一份高质量的项目计划。这份计划应该详细描述你的功能需求、技术栈选择、工程设计等。
- 化整为零: 不要试图一次性规划整个庞大的项目。应该按功能模块(如“用户登录模块”、“支付模块”)来规划,为每个模块都生成独立的、详细的计划,并保存到相应的 Markdown 文件中(如
plan_authentication.md)。 - 指令清晰: 在让 AI 实现每一步时,都明确指示它读取相关的文件。
我保证,这样做一定远比和 AI 随意聊天的效果更好。我们在前几期课程中已经详细介绍过如何与 AI 协作生成这样的计划,如果你还不熟悉,可以回顾一下。
技巧二:提供外部知识
大语言模型都有一个预训练的知识截断时间点(比如 Gemini 2.5 Pro 是 2025 年 1 月)。这意味着,在这个时间点之后发布的新技术、新 API 版本,模型是不知道的。
当你需要使用这些新技术时,AI 可能会因为知识过时而出现“幻觉”,给出错误的方案。
解决方案: 主动把最新的官方文档链接、关键代码示例作为上下文提供给 AI,让它“学习”之后再开始工作。如果你自己搞不定,可以尝试使用像 Context7 这样的 MCP (Model Context Protocol)。你可以简单地把 MCP 理解为给 AI 提供的一种“工具”,而Context7这个工具,就可以让 AI 实时检索最新的技术文档。
以 Claude Code 为例,你可以通过运行以下命令,为它装备这个工具:
claude mcp add --transport http context7 https://mcp.context7.com/mcp
技巧三:设定全局规则
现在的 AI 编程助手大多都支持你创建全局规则文件,就像给 AI 建立起一个“长期记忆库”。
还是以 Claude Code 为例,你可以在命令行里输入 # 来给它添加一段记忆。
注意: Claude Code 新发布的 VS Code 插件目前还不支持这个
#命令,建议还是使用命令行版本。
例如,你可以输入:
# When doing research for a technical solution, you MUST use context7 to get the latest technical documentation.
回车后,Claude 会让你选择这段记忆的适用范围:User memory (所有情况下都生效) 或 Project memory (只对当前项目有效)。
完成后,你会发现 Claude 帮你创建了一个新文件,叫做 CLAUDE.md。之后,你可以直接在这个文件里不断添加新的规则,让 AI 在整个项目开发过程中都严格遵守。
主动出击:开发过程中的“质量保证”
除了事前准备,我们还可以在开发过程中引入一些软件工程的最佳实践,来主动预防 Bug。
技巧一:测试驱动开发 (TDD)
TDD (Test-Driven Development) 的核心思想是“先写测试,再写代码”。具体流程如下:
- 先针对一个新功能,编写一个测试用例。
- 运行这个测试,由于功能还没实现,测试理应会失败(显示为红色)。
- 然后,编写刚好能让这个测试通过的最小化功能代码。
- 再次运行测试,确保它通过(显示为绿色)。
- 最后,再对代码进行重构和优化。
你可以通过在 CLAUDE.md 文件中加入相应的指令,来要求 Claude 遵循 TDD 的开发模式。例如:
### Test-Driven Development (NON-NEGOTIABLE)
**Mandatory TDD discipline:**
- Tests MUST be written BEFORE implementation (no exceptions)
- Red-Green-Refactor cycle strictly enforced:
1. Write failing test
2. User approves test coverage
3. Verify test fails
4. Implement minimal code to pass
5. Refactor with tests passing
- Contract tests required for all APIs and module boundaries
- Integration tests required for all user-facing workflows
- Unit tests required for business logic and edge cases
- Test coverage MUST be ≥80% for all production code
- All tests MUST be deterministic (no flaky tests tolerated)
**Rationale:** TDD ensures requirements are testable, prevents regression,
documents intended behavior, and enables confident refactoring. The discipline
forces clear thinking about interfaces before implementation.
技巧二:引入代码审查 (Code Review) Sub-agent
在传统的软件工程中,代码审查是指一个工程师写完代码后,交给另一位同事来审阅,以发现潜在的问题。我们可以让 AI 来模拟这个过程。
这样做的好处是: 负责审查的 Sub-agent 会拥有一个全新的上下文窗口,不会被写代码的 Agent 的思路“污染”,能以一个全新的、更客观的视角来发现问题。
在 Claude Code 中,你可以通过 /agents 命令来创建一个新的 Sub-agent:
- 输入
/agents并选择“创建新的 Agent”。 - 选择“只对当前项目有效”。
- 让 Claude 帮你配置,并用自然语言描述它的任务:“Help me do high quality code reviews”。
- 关键一步: 在工具选择上,取消所有工具,只保留“读取文件”的权限。因为我们希望审查员只看不改。
- 为这个任务选择一个模型(如 Sonnet)。
创建完成后,Claude 会生成一个对应的 Markdown 配置文件。你可以在其中定制更详细的 Code Review 标准。最后,在你的主规则文件 CLAUDE.md 中,加入一条指令:“Invoke Code Review Sub-agent after every code change”,这样就可以实现自动化代码审查了。
如果你对这些配置不熟悉,不用担心。本期课程演示的配置文件可以直接下载使用。
Debug的艺术:当 Bug 还是不可避免的发生时
尽管我们做了万全准备,但 Bug 有时还是会不可避免地出现。这时,我们就需要掌握如何与 AI 一起高效 Debug 的技巧。
你需要掌握的最重要的技能,就是如何清晰、准确地向 AI 描述你遇到的 Bug。
Bug 描述的“五要素”
一个高质量的 Bug 报告,通常包含以下几点:
- 复现步骤: 如何一步一步地复现这个 Bug?(例如:在哪个页面,点击哪个按钮)
- 实际表现: Bug 出现时,App 的具体表现是什么?(例如:点击按钮后没有任何反应)
- 预期表现: 在没有 Bug 的情况下,它应该是什么反应?(例如:点击按钮后应该跳转到另一个页面)
- 错误信息: 有没有看到任何错误信息?对于 Web App,你通常可以在浏览器的“开发者工具”的 Console (控制台) 中找到它们。
- 环境信息: 你是在什么环境下复现这个 Bug 的?(例如:是在手机上,还是在哪个浏览器里)
把这些详细信息提供给 AI,一般它就可以锁定问题所在了。
增加详细的 Debug Logging
如果 AI 还是找不到问题,你可以让它在可能出错的代码区域,加上详细的 debug logging。然后,让 AI 自己去阅读它打印出来的日志。通过观察日志中显示的执行步骤和变量细节,AI 往往能更精准地定位到问题的根源。
避免代码质量下降
最后一点需要注意:如果 AI 一次修改不对,它反复修改往往会导致代码质量严重下降。
最佳实践是:
- 在 AI 最终修复完问题后,让它总结一下问题的根源以及最终的修复方法。
- 你把这个总结保存下来。
- 让 AI 回滚 (revert) 之前所有的修改,回到 Bug 出现前的干净状态。
- 开始一个新的对话,直接把问题,以及你刚才保存的“根源和解决方法”,一次性再交给 AI,让它一次性改对。
这样做,通常能获得质量更高的修复代码。
课程总结与毕业
我们这期课程涵盖了许多内容,从上下文工程,到主动测试、代码审阅,再到如何与 AI 高效地 Debug。这些都是驾驭 AI、进行高效软件开发的必修课。
到这里,我们“零基础 Vibe Coding 迷你课”的四期内容就全部结束了。恭喜你,顺利毕业!
未来,我还会推出更进阶的 AI Coding 课程,比如如何设计后端服务和数据库、如何开发跨平台的移动应用、如何实现用户系统和应用内购等等,我都会手把手教你。
感谢你的一路陪伴。