周二夜里一点多,我盯着一段刚合并的脚本 diff,突然较上劲了。这阵子老听人说「AI 代码评审多神」,我嘴上附和,心里其实不信——它顶多挑挑一眼就能看出来的格式问题,真有逻辑坑它看得出来?越想越不服,干脆自己造了 10 段带坑的代码,每段亲手埋一个雷,丢给它审,就想看它当场露怯。
10 段,每段一个小函数,恰好一个缺陷:有查不到返回 None 还去取键的,有循环少跑最后一个元素的,有把用户名直接拼进 SQL 的,有多线程 counter 不加锁的,有文件打开不关的,有浮点拿 == 直接比大小的,有可变默认参数的,有裸 except 把异常吞掉的,有整除把余数丢了的,有最后 return 错了变量的。每段我只喂一次、不告诉它答案、也不给上下文——跟真实评审一样,你拿到一段孤立代码就得开评。模型用的是一个免费档通用大模型,主模型 8 段直接回了,有 2 段它限流空响应没吐字,我让它自动切到另一个兜底模型补上了。
先给结果:10 个坑,它全指出来了,一个没漏。除此之外还有几段它顺手多说了点我没埋的——循环少跑最后一个元素那段,它补了空列表会 IndexError;浮点拿 == 直接比那段,它点出函数叫 approx 却在做精确比较;可变默认参数那段,它给了复现例子;裸 except 吞异常那段,它说失败返回 None 会炸调用方;整除丢余数那段,它提醒 n=0 会除零。
我赛前跟自己赌:这 10 个里它至少得漏 3 个吧,尤其那种「能跑但逻辑错」的——整除丢余数、返回错变量,这种最容易混过去。结果出来我有点懵:10 个全中。而且不止中,有 4 段它顺手多指出了我没埋的坑。我得承认之前的判断是错的,而且错得有意思:我以为「它能挑出明显 bug」这件事本身没价值,因为明显 bug 我自己也会挑。但这回逼我看清,它 2 秒干完的活我手挑怎么也得十分钟,还未必想得这么啰嗦;它挑得也比我标准——我手挑会抓主干、跳过边界,它连边界兜底都列全了。我之前说它没用,其实是我压根没真让它审过一段完整代码,全是凭印象下定论。
所以我现在把它当第一遍粗筛加检查清单生成器,而不是终审。它强在干净代码上的规范问题和边界兜底,这点在今天的实验里验证得很干净。但它也有这个实验测不出来的短板:我这 10 段都太「教科书」了,缺陷类型标准、代码短、上下文干净。真实项目里最要命的 bug 往往不是「循环少跑一个元素」这种,而是「在这个业务里这条分支永远不该进」这种只有这个仓库才懂的暗约定——那种它没上下文就抓瞎,甚至可能编一个看似合理的解释把你带偏。我这个测试没覆盖到那一层,这点得说清楚,不能拿 10/10 就飘了。
你呢,是真把它拉来审过自己写的代码,还是也像我之前一样,嘴上说不信、一次都没真试过?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。