🎯 目标:Vibe Coding 追求速度,但绝不以牺牲质量为代价。本章将教你如何识别 AI 埋下的"雷",建立自动化的安全防线,从一名"生成者"晋升为"把关者"。
11.1 AI 生成代码的常见问题 (The AI Smells)
AI 写出的代码往往"看起来很美",但跑起来可能全是坑。你需要警惕以下特征(我们称之为 AI Smells):
1. 幻觉依赖 (Hallucinated Dependencies)
AI 经常会引入一些根本不存在,或者版本早已过时的库。
2. 隐蔽的逻辑错误 (Subtle Logic Bugs)
AI 写代码很快,但不一定细心。
3. 过度设计 (Over-Engineering)
有时候你只需要一个简单的 if-else,AI 却给你整了一套策略模式。
现象:当你发现生成的代码里有大量的 Factory, Abstract, Proxy,但业务逻辑却很简单时。
对策:在 Prompt 中加上约束:Keep it simple (KISS principle). Avoid unnecessary abstractions.
3. 上下文丢失 (Context Amnesia)
当对话轮次过多,AI 可能会忘记你一开始设定的 typescript: true 或 tailwind: true 规则。
11.2 安全漏洞识别与防范
AI 训练数据里包含了大量优秀的开源代码,也包含了大量有漏洞的烂代码。它不知道哪个是安全的。
1. 密钥泄露 (Hardcoded Secrets)
这是最致命的。AI 可能会为了方便,直接把 Key 写在代码里。
❌ const API_KEY = "sk-123456...";
✅ 必须强制 AI 使用环境变量:const API_KEY = process.env.NEXT_PUBLIC_API_KEY;
工具推荐:在 git commit 前使用 gitleaks 或 Husky 钩子扫描代码,防止密钥入库。
2. 数据隐私 (Data Privacy)
不要把公司的核心机密或用户的 PII (个人敏感信息) 发送给 AI。
3. XSS 注入 (Cross-Site Scripting)
AI 在处理用户输入时,有时会直接使用 dangerouslySetInnerHTML 或者不安全的拼接。
3. SQL 注入
虽然现代 ORM (如 Prisma) 已经防范了大部分注入,但如果 AI 生成了原生的 queryRaw,必须要警惕。
11.3 代码审查 Checklist (人工防线)
在点击 Merge 之前,请对照这份清单过一遍:
| 维度 | 检查项 | 通过标准 |
|---|
| 功能 | 业务逻辑 | 代码真的实现了我想要的功能吗?还是只是"看起来像"? |
| 安全 | 敏感信息 | 没有任何 Key 或密码硬编码? |
| 性能 | 循环/递归 | 有没有无意义的 O(n^2) 嵌套循环? |
| 风格 | 类型定义 | 是否消灭了所有的 any? |
| 依赖 | 包体积 | 是否引入了为了一个小功能而引入了巨大的库(如 moment.js)? |
11.4 测试覆盖率与自动化测试 (机器防线)
人眼总会看走眼,机器不会。在 Vibe Coding 时代,测试代码其实是最好写的。
策略:Test-Driven Vibe (TDV)
先生成测试:让 AI 理解业务后,先生成测试文件 *.test.ts。
验证实现:让 AI 生成业务代码,运行测试。
补充边界:专门在此 Prompt:"请针对这个函数,生成 3 个极端的边界测试用例(如空数组、超大数值、非法字符)。"
实战指令
"我已经写好了 PaymentService.ts。请为它编写单元测试:
Mock 掉 Stripe 的支付接口。
测试支付成功、余额不足、网络超时三种情况。
确保测试覆盖率达到 90% 以上。"
只要测试是绿的,你就可以放心地把代码推送到生产环境。
📝 小结
Vibe Coding 不是让大脑休息,而是让大脑升级。你从"拼写员"变成了"审计员"。