Vibe Coding(三):AI 生成的代码,先怀疑再信任

1、一个好用的司机,不等于一个靠谱的司机

想象你坐在出租车上。司机开得又快又稳,你一路上看手机,完全没注意路。到了目的地你下车,司机走了。

然后你发现:这里是哪里?这不是我要去的地方。

上车时你说的是“去人民公园”,但没说清楚是哪个区的人民公园。司机导航去了最近的那个——但不是你心里的那个。车开得再好,方向错了。

AI 写的代码就像这个司机。语法完美,格式工整,逻辑看起来很通顺。但它可能在你不注意的地方,悄悄走偏了方向。

2、AI 的三大“坏习惯”

根据大量开发者的实际经验,AI 写的代码有三个高频问题。了解它们,你在审查时就有的放矢。

坏习惯一:幻觉——用了不存在的 API

这是最常见的问题。AI 会“发明”一个看起来很合理、但实际上不存在的函数或库。

# AI 写出来的代码
from datetime import parse_date_string  # 这个函数根本不存在!

result = parse_date_string("2026-01-15")

它为什么不写正确的 datetime.strptime("2026-01-15", "%Y-%m-%d")?因为在 AI 的训练数据里,“parse_date_string” 这个词组在类似上下文中出现过,它觉得“这个组合应该能行”。

记住:AI 是在做概率预测,不是在查文档。它“觉得”某个 API 应该存在,不代表真的存在。

坏习惯二:路径只走了一半

AI 能写好“正常路径”的代码,但在异常路径上经常掉链子。

// AI 写的代码——正常路径没问题
async function fetchUserData(userId) {
  const response = await fetch(`/api/users/${userId}`);
  const data = await response.json();
  return data;
}

看起来很干净,对吧?但仔细想想:

  • 如果网络断了呢?(fetch 会抛异常,没处理)
  • 如果返回 404 呢?(response.json() 会尝试解析错误页面,一定报错)
  • 如果返回的不是 JSON 呢?
  • 如果 userIdundefined 呢?

AI 写出这段代码的时候,它的“注意力”集中在“如何获取数据并返回”这个主路径上。至于主路径以外的分岔路,它没细想。

你要替它想。

坏习惯三:安全盲区——默认相信所有人

AI 写安全相关代码时,容易假设“输入都是合法的”。

# AI 写的查询
def get_user_by_name(name):
    query = f"SELECT * FROM users WHERE name = '{name}'"
    return database.execute(query)

SQL 注入的标准教科书案例。AI 当然“知道”参数化查询更好,但在快速生成代码的时候,它可能“忘了”。

这不是 AI 的疏忽——是它的训练数据里,简单示例代码远多于生产级别的安全代码。它的概率模型倾向于给出“最常见”的写法,而最常见的写法往往不够安全。

3、你不需要成为安全专家,但要有“雷达”

不需要背 OWASP Top 10,不需要考安全证书。只需要养成几个简单的审查习惯:

每次看到 AI 写的代码,心里问自己三句话

  1. 每个外部输入都校验了吗? —— 用户输入、API 参数、文件内容……这些都应该先检查再使用。
  2. 错误情况都处理了吗? —— 网络挂了、文件不存在、数据格式不对……每种可能出错的情况,有没有对应的处理?
  3. 外部库的调用方式对吗? —— 不熟悉的 API 调用,花 10 秒去查一下文档,比花 10 分钟 debug 划算得多。

这三句话看起来简单,但每次坚持问自己一遍,能拦住 AI 产生的绝大部分问题。

4、写测试:Vibe Coding 的安全气囊

如果你用 Vibe Coding 写了 100 行代码,花 5 分钟写几个测试——你得到的安心感远超这 5 分钟的成本。

好消息是:你也可以让 AI 帮你写测试。 而且测试是 AI 特别擅长的领域——输入输出明确、逻辑简单、模式固定。

"帮我为刚才写的 fetchUserData 函数写测试,覆盖几种情况:
1. 正常返回用户数据
2. API 返回 404
3. 网络请求失败
用 jest,放在 __tests__/user.test.js 里。"

几分钟后你就有了一套测试。跑一遍,红的修绿的过。这个流程比手工测试快一个数量级,质量还更好。

Vibe Coding 的黄金法则:AI 写代码,AI 写测试,你读代码,你跑测试。人和 AI 各司其职。

5、“看起来能跑”≠ 代码没问题

最后说一个心态问题。

AI 生成的代码往往第一眼看起来非常漂亮——缩进整齐,变量命名规范,注释清晰。这会产生一种“看起来很专业,应该没问题”的错觉

这种错觉很危险。

一个真实的例子:有人用 AI 写了一个文件上传功能。代码很漂亮,功能也能跑。上线一个月后发现:任何人都可以上传任意大小的文件,服务器快被塞爆了。AI 没有自动加上文件大小限制——因为在简单的示例代码里,没有人写这个。

越漂亮的代码,越容易让人放松警惕。 记住:AI 生成的代码和你自己写的第一版草稿一样,都需要被审查、被测试、被质疑。


下一篇文章是系列的最后一篇,我们聊聊如何让 AI 真正理解你的项目——上下文管理的艺术

每天前进一小步,就是一个新的高度!