《香樟树旁的龙虾公司》深度.技术解读 之四

AI写的代码为什么会出bug?——深度剖析“全表扫描”事件

 📖 小说情节:一次差点搞垮公司的“AI代码”

又过了一周,系统终于出了问题。不是小周的那个模块,是另一个——但根源是一样的,都是AI生成的代码,看起来能用,但经不起高并发。

那天晚上,钱卫加班到凌晨两点。赵总亲自坐镇,运维、前端、测试,所有人都盯着屏幕。问题定位到凌晨一点,发现是一个核心查询跑成了全表扫描。翻代码发现,生成的那个create table语句里,索引那行被注释掉了——可能是AI参考的代码片段里本来就没建,或者生成的默认配置用了开发环境的标准。

钱卫花了两个小时,手动优化了那个查询,重建了索引,又测试了三遍,系统终于恢复正常。
赵总拍拍他的肩膀:“关键时刻,还是得靠你。”
钱卫笑了笑,没说话。

小说里,小周用AI生成的代码上线后,导致系统崩溃。钱卫深夜排查,发现罪魁祸首是一个“被注释掉的索引”。这听起来像是个小问题,却差点拖垮整个系统。

为什么一个不起眼的“注释”会引发这么大的灾难?AI写的代码到底有哪些“坑”?今天我们就来深度剖析这个“全表扫描”事件。

图片[1]-AI代码审核清单:如何避免“全表扫描”和“删库”级别的灾难?

🔬 研究速览:AI生成代码的“三座大山”

在深入技术细节之前,先看一组来自2026年3月arXiv论文(编号2603.28592)的最新研究数据:

发现数据
AI提交引入的问题总数484,606个
其中代码坏味(Code Smells)占比89.1%
每款AI助手引入至少一个问题的提交比例超过15%
未修复的遗留问题比例24.2%

2026年3月底,一篇发表在arXiv上的大规模实证研究给出了答案。研究人员分析了6,275个GitHub仓库中的304,362个AI提交,发现这些提交共引入了48万多个问题。其中,代码坏味(Code Smells)占了将近九成——也就是说,AI最常犯的错误不是“写不出来”,而是“写得不好”。更令人担忧的是,有超过24%的问题在仓库中一直没被修复,这意味着这些“小毛病”会长期潜伏,像慢性病一样增加后续维护的难度和成本。

基于这项研究以及后续的多方验证,我们可以总结出AI生成代码面临的三座大山

1. 功能漏洞:约62%的AI生成代码要么无法正常运行,要么存在安全风险。AI知道怎么“写”,但不知道怎么写“对”。
2. 性能陷阱:AI生成能跑的代码,但往往忽略性能考量,结果就是慢查询、数据库过载、云成本浪费。小说中的索引缺失就是典型。
3. 长期债务:大量AI引入的问题从未被修复,像滚雪球一样积累技术债务。

🔧 技术解码:索引、全表扫描、性能漏洞

1. 什么是“索引”?——图书馆的目录卡

要理解这个bug,我们先得明白什么是“索引”。

索引是数据库的“目录”。没有索引,你要在数据库里找一条数据,就得把整张表从头到尾翻一遍——这叫“全表扫描”。有索引的话,数据库直接查目录,几秒钟就能定位到数据。

举个例子
– 你有一个图书馆,里面有10万本书。
– 没有目录(索引):你要找一本《小龙虾养殖》,只能一排排书架挨个翻。运气好10分钟找到,运气不好翻到闭馆。
– 有目录(索引):你查目录卡,上面写着“农业区3排2层”,2分钟就能拿到书。

在数据库里
– 数据量小的时候(比如几百条),全表扫描也无所谓,反正翻得快。
– 数据量大的时候(比如上几百万上千万条),全表扫描就是灾难——一次查询可能要几十秒甚至几分钟。
– 更可怕的是,如果这个查询被高频调用(比如每秒钟有100个人同时查),数据库会被活活拖垮,整个系统都跟着崩溃。

这就是小说里“经不起高并发”的意思。

2. 索引为什么会被“注释掉”?

小说里说:“生成的那个create table语句里,索引那行被注释掉了。”

在SQL(数据库查询语言)里,`–` 是注释符号。被注释掉的代码不会执行。

正常的建表语句应该是这样的:

CREATE TABLE stock_data (
id INT PRIMARY KEY,
stock_code VARCHAR(10),
trade_date DATE,
close_price DECIMAL(10,2),
INDEX idx_stock_code (stock_code)     --这一行是关键!建了索引
);

但AI生成的代码可能是这样的:

CREATE TABLE stock_data (
id INT PRIMARY KEY,
stock_code VARCHAR(10),
trade_date DATE,
close_price DECIMAL(10,2),
-- INDEX idx_stock_code (stock_code) --被注释掉了 
);

结果就是:表建好了,但索引没建。所有按`stock_code`查询的操作,都会变成全表扫描。

3. 为什么AI会犯这种错?

AI生成代码时,可能参考了以下几种“坏榜样”:

开发环境模板:开发环境数据量小,开发人员经常为了省事不建索引。AI学到的模板里,索引那行就是注释掉的。
错误理解需求:AI可能误解了“创建表”的完整需求,认为索引是可选的。
代码片段拼接:AI从多个地方拼凑代码,其中一个片段里索引被注释了,它没注意到。
懒惰:某些AI模型为了“少写代码”,会省略自认为不重要的部分。

关键在于:AI不是人类程序员,它不会主动思考“这个表以后数据量大了怎么办”。它只负责生成看起来“能跑”的代码。

4. 钱卫怎么修的?

小说里只提了一句“手动优化了那个查询,重建了索引”,但实际上这是一个标准流程:

1. 定位慢查询
通过数据库的慢查询日志,找到那些执行时间超过阈值的SQL语句。小说里他们定位到凌晨一点,就是这一步。

2. 分析执行计划
用‘EXPLAIN’命令查看数据库是怎么执行这条SQL的。如果看到“全表扫描”(’type=ALL’),基本就确定问题了。

3. 检查表结构
查看表定义,发现应该有索引的字段,索引却不存在。

4. 重建索引
执行 ‘CREATE INDEX‘ 语句,把索引加上。

5. 测试验证
再跑一遍查询,确认执行时间从几十秒降到了毫秒级。小说里钱卫“测试了三遍”,就是这个意思。

📊 学术研究怎么说?48万问题的实证

2026年3月底,一篇发表在arXiv上的大规模实证研究(论文编号2603.28592)给出了AI代码质量的硬数据。研究人员扫描了6,275个GitHub仓库中的30多万个AI提交,发现了48万多个问题。

最惊人的发现:这48万个问题中,89.1%是“代码坏味”——也就是那些不直接导致程序崩溃、但会让代码难以维护和扩展的“慢性病”。比如:
– 重复代码(同一个逻辑抄了五遍)
– 过长的函数(一个函数几百行,没人看得懂)
– 命名混乱(变量叫abtmp1tmp2,或拼音与英文混用如user_shouji
– 深层嵌套(if里面套if里面再套if)

这些坏味在测试时不会报错,但会让后续修改变得极其痛苦。更糟的是,有24.2%的问题在仓库最新版本中依然存在,意味着它们被直接忽略了,像垃圾一样堆在角落。

这意味着什么? AI写的代码,从“能跑”到“好维护”之间,还有很长的路要走。

🏠 生活化类比:盖楼忘了画承重墙图纸

想象一下盖一栋楼:

正常流程:设计师画图纸(建表语句),包括承重墙位置(索引)。施工队按图纸施工(执行建表语句)。
AI写的代码:设计师画了图纸,但承重墙那一栏写着“暂不施工”(注释掉)。施工队照做,楼盖起来了。
平时:楼里人不多(数据量小),没问题。
地震/人流高峰(高并发):楼晃了,墙裂了,塌了。

钱卫做的:他连夜找出问题,重新画了承重墙图纸(重建索引),加固了楼(优化查询)。楼稳了,人也安全了。

关键教训:AI画的图纸,不能直接拿去施工。得有个“总工程师”(人类程序员)审核一遍,尤其是承重墙这种关键部分。

💡 实用建议:AI代码的“审核清单”与安全实践

如果你让AI帮你写代码(尤其是要上线的),建议用下面这份清单逐项检查。

1. 性能相关(对照“性能问题的系统分析”)

问题类型描述如何发现小说对应
索引缺失WHERE/JOIN/ORDER BY字段没有索引用EXPLAIN看执行计划 ✅ 直接对应
N+1查询循环里查数据库,比如先查10个用户,再循环查每个用户的订单开启SQL日志,看是否有大量重复查询虽然没有明写,但AI常犯
低效循环嵌套循环或O(n²)算法,数据量一大就慢代码审查,估算时间复杂度常见问题
无缓存策略频繁访问相同数据,每次都查数据库看是否有重复查询常见问题
同步阻塞操作把本应异步的操作写成同步,高并发时排队阻塞压测时观察响应时间常见问题

2. 边界条件

– [ ] 有没有处理空值、空列表、异常数据?
– [ ] 有没有处理网络超时、API限流?
– [ ] 有没有处理极端情况(比如数据量为0、数据量巨大)?

3. 安全漏洞

– [ ] 有没有SQL注入风险?(直接用拼接字符串?应该用参数化查询)
– [ ] 有没有硬编码密码、密钥?(应该用环境变量)
– [ ] 有没有暴露敏感信息?(错误日志里打印了密码?)

4. 可维护性

– [ ] 代码有注释吗?变量命名清晰吗?
– [ ] 有没有重复代码?(可以抽取成函数)
– [ ] 有没有写单元测试?

5. 使用AI辅助审查

Anthropic等公司已经推出了AI代码审查工具,可以帮助你自动检查逻辑一致性、安全漏洞和风格问题。但记住:AI的审查结果也不能100%相信。研究发现,LLM对代码漏洞的检测率和修复率在75-80%左右,而且有时会“自信地给出错误建议”。所以,最好的做法是:AI写初稿,AI辅助审查,人做最终决策

6. 如何正确地让AI写代码?(提示词技巧)

错误的提示:
> “写一个查询,按客户邮箱查订单。”

正确的提示:
> “写一个查询,按客户邮箱查订单。生产环境有1000万行数据,响应时间必须小于100毫秒。查询应该使用customer_email字段上的索引。请同时给出建索引的SQL语句。”

把性能要求明确写进提示词里,AI才会认真考虑索引、缓存等问题。

⚠️ 真实世界警示:AI代码事故案例

下面两个真实案例,告诉你AI代码出错的代价有多大。

案例1:AI删库事件(2026年3月,来源:Fortune)

工程师Alexey Grigorev在使用Claude Code更新网站时,由于新笔记本上的一个小配置错误,AI混淆了什么是“真实的”生产环境、什么是“可以安全删除的”副本。结果AI直接把承载着多年课程数据的生产数据库给删了。虽然最终通过AWS支持恢复了数据,但Grigorev自己总结道:“我过度依赖AI代理,让它端到端地做了所有更改,省掉了本应存在的安全检查。”

教训:永远不要让AI在生产环境里“全自动”执行关键操作。至少需要人工确认一步。

案例 2:4.7万美元失效支付事故(2026 年 3 月 4 日,来源:Medium  《AI Generated $47K in Failed Payments in 3 Days》)

一家 Series B 初创在生产环境部署的 AI 生成的异步支付微服务运行三天后出现错误处理全失效——catch 直接 return null,无日志、无告警,异常被静默吞掉,团队未能及时发现。与此同时,代码使用无限重试循环(类似 GitHub API 403 的无限重试),在支付渠道超时或报错时不断重试、缺乏退避或熔断,导致并发下产生重复扣款,累计4.7万美元交易失败,需要人工对账。

教训:即便 CI、单元测试和覆盖率看似完美,异常沉默无上限重试仍会在生产环境引发巨额财务损失。涉及支付、交易等关键业务的代码必须人工逐行审查,并配合日志、监控、限流/熔断、最大重试次数等防护措施。

🔧 OpenClaw近期更新:平台如何帮助我们减少AI代码风险

2026年3月底到4月初,OpenClaw平台进行了一系列重要更新,其中多项与AI代码质量直接相关:

更新作用
/tasks命令(v2026.4.1)直接在聊天界面查看后台任务的执行状态和记录,增强代码生成过程的可追溯性
GLM 5.1集成+防循环故障转移减少AI陷入死循环的概率,防止“卡住反复重试”
安全审批漏洞修复(连续两个版本)修正了“始终允许”配置实际只执行“一次允许”的问题,防止AI在未经二次确认的情况下执行危险命令
skill-vetter技能安全扫描器安装新技能包前自动扫描潜在安全风险

对普通用户的启示:及时更新你的OpenClaw到最新版本,可以获得这些安全增强。另外,善用`/tasks`命令,随时查看AI后台在做什么——透明化是安全的基础。

 

 📝 本章小结

概念通俗解释
索引数据库的“目录”,没有它就要翻遍整本书(全表扫描)
全表扫描没有目录,一本本翻书找数据
高并发很多人同时用系统,对数据库压力极大
性能漏洞代码能跑,但数据量一大就崩
代码坏味不直接崩溃,但让代码难以维护的“慢性病”
审核清单人类程序员检查AI代码的“安全手册”
提示词技巧把性能要求写进指令,让AI少犯错

AI写代码风险速查表

风险类型发生率(研究数据) 如何防范
引入至少一个问题超过15%的提交人工审核每段AI代码
代码坏味89.1%的问题使用静态分析工具 + 重构
功能/安全漏洞约62%的代码安全测试 + 边界用例覆盖
遗留问题不修复24.2%建立技术债务追踪清单

最后的忠告
> AI生成的代码可以当“初稿”,但不能当“终稿”。它可能通过所有自动化测试,却隐藏着毁灭性的逻辑缺陷。尤其是在涉及钱、数据删除、权限变更的关键路径上,必须由人逐行审核。

下一章预告:夏知晓“装了一堆据说能自动交易的技能包”出了事,钱卫则精选官方skill——Skill到底是啥?怎么选才能不“中毒”?我们下一章聊聊“AI的App Store”。

> *本文基于小说《香樟树旁的龙虾公司(钱卫篇)》第四章情节,结合2026年3-4月最新的AI技术动态与学术研究撰写。*

香樟树旁的龙虾公司(钱卫篇):一个35岁程序员在AI浪潮里的焦虑与岸
为什么卸载比装机贵?——部署与清理的真相
AI权限失控的代价:为什么不能给“全部权限”?附防范指南
token去哪了?从“哗哗流走”到“精打细算”全指南
AI写的代码为什么会出bug?——深度剖析“全表扫描”事件
夏知晓安装的“自动交易”技能,到底藏着什么毒?
一人公司的技术底座——多Agent协同与沙盒隔离
卸载AI不是删文件夹就完了:改密码、撤权限、清残留,三步扫尾指南
别让AI废了你的学习能力:从“复制粘贴”到“主动思考”的转型指南
一人多Agent公司——AI时代个人能力的放大器
普通用户AI权限分配指南:基于CNCERT建议,三步守住安全底线
AI模型涨价潮下,如何为你的OpenClaw选对“大脑”
一人量化投资公司进阶配置(上篇):从头部私募架构到多Agent系统蓝图
一人量化投资公司进阶配置(下篇):从9个Agent到完整量化投研系统
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容