AI-Generated Code Is Not Reproducible (Yet): An Empirical Study of Dependency Gaps in LLM-Based Coding Agents
该论文通过实证研究发现,当前主流大模型编程代理生成的代码在纯净环境中仅约 68.3% 可直接运行,且存在声明依赖与真实运行时依赖之间平均 13.5 倍的巨大差距,表明 AI 生成代码的可复现性仍面临严峻挑战。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
这篇论文就像是一份**"AI 代码体检报告”,它揭示了一个令人惊讶的真相:虽然现在的 AI 写代码看起来非常厉害,能生成完整的软件项目,但这些代码往往“跑不起来”**,或者需要人类开发者花大量时间去修修补补。
为了让你更容易理解,我们可以把这篇论文的研究过程想象成一次**“盲盒烹饪挑战”**。
1. 核心比喻:AI 是“只会写菜谱的厨师”
想象一下,你请了一位超级 AI 厨师(比如 Claude、Gemini 或 Codex),让他做一道复杂的菜(比如“意大利面”)。
- AI 的做法:它非常自信地给你一张菜谱(代码文件)和一份食材清单(依赖包列表,比如
requirements.txt)。清单上写着:“你需要番茄酱和意大利面”。 - 你的任务:你拿着这张清单,去厨房(干净的环境)里,只买清单上写的东西,然后试着做这道菜。
- 现实情况:当你开始做的时候,发现:
- 没有盐,菜没法吃(缺少依赖包)。
- 菜谱里写的步骤是“把锅放在火上”,但没写“先开火”,结果锅是冷的(代码逻辑错误)。
- 你以为只需要番茄酱,结果发现番茄酱里其实混合了 20 种其他调料,但你清单上没写(隐藏依赖)。
这篇论文就是去统计:在 300 次这样的“盲盒烹饪”中,有多少次你能直接照着清单把菜做出来,而不需要额外去问 AI 或者自己瞎猜?
2. 研究发现了什么?(三个关键发现)
发现一:只有约 2/3 的“菜”能直接吃
在 300 个由 AI 生成的项目中,只有 68.3% 的项目能直接运行成功。
- 这意味着:每 10 个 AI 生成的项目,就有 3 个是“半成品”或“废品”。开发者必须停下来,花大约 15 分钟 去修 bug、找漏掉的包。这就像你买了个组装家具,结果发现少了一颗螺丝,还得自己去找。
发现二:不同“菜系”难度不同
AI 在不同编程语言上的表现天差地别,就像不同菜系的复杂程度不同:
- Python(像家常菜):成功率最高(89.2%)。因为 Python 的依赖管理比较简单,就像做炒蛋,清单写清楚就行。
- JavaScript(像西餐):成功率中等(61.9%)。
- Java(像复杂的满汉全席):成功率最低(44.0%)。Java 的依赖关系像俄罗斯套娃,一个包里面藏着几十个包,AI 经常搞不清楚,导致清单漏写了一大堆。
发现三:清单上的“食材”和实际用的“食材”差距巨大
这是最惊人的发现。
- AI 的清单:通常只写 3 个包(比如“我要做数据分析,需要 A、B、C")。
- 实际运行:当你真正运行代码时,系统会自动下载 37 个 包!
- 比喻:这就好比你点了一份“汉堡套餐”,结果端上来的是汉堡、薯条、可乐、冰淇淋、沙拉、汤、面包、叉子、盘子、餐巾纸……整整一桌。AI 只告诉了你“汉堡”和“可乐”,却忘了告诉你为了吃汉堡,你其实还需要那一整套复杂的“后台支持系统”。
- 论文发现,实际需要的包数量是 AI 声称数量的 13.5 倍!这就是所谓的“依赖爆炸”。
3. 为什么 AI 会犯这些错?
论文指出,AI 犯错的类型主要有两种:
- 漏写食材(依赖缺失):只占 10.5%。AI 忘了写某个必须的包。
- 菜谱写错了(代码逻辑错误):占了 52.6%!这才是大头。
- 比如:AI 把文件路径写错了,或者把“异步操作”写乱了,或者把几个文件压缩成了一个。
- 比喻:AI 不仅忘了写“盐”,它还把“先放盐再放油”写成了“先放油再放盐,然后倒进冰箱”。这种错误比漏写食材更致命,因为即使你补全了所有食材,菜还是做不出来。
4. 不同 AI 厨师的“隐藏特长”
论文还发现,不同的 AI 模型并不是在所有领域都一样强,它们有“偏科”:
- Gemini:是Python 大神(100% 成功),但在 Java 上几乎“翻车”(只有 28% 成功)。它可能是在很多 Python 数据科学笔记上训练出来的。
- Claude:是Java 专家(80% 成功),在 Python 和 JavaScript 上表现也不错,比较均衡。
- Codex:在 Python 上很强,但在 Java 上表现最差(24%)。
启示:如果你要用 AI 写 Java 代码,选 Claude 可能更靠谱;如果是写 Python 数据分析,Gemini 可能是首选。不能盲目认为所有 AI 都一样。
5. 这对我们意味着什么?
- 对开发者:不要完全信任 AI 生成的代码。把它当作一个“草稿”,你还需要花时间去检查、调试和补全依赖。AI 目前更像是一个**“超级自动补全工具”,而不是一个“独立开发伙伴”**。
- 对科学界:如果科学家直接用 AI 生成实验代码,而代码跑不起来,那么整个研究结果就不可复现了。这会加剧科学界的“可复现性危机”。
- 对未来的希望:未来的 AI 需要学会“自我测试”。在把代码交给你之前,它应该自己在干净的电脑里跑一遍,发现缺了什么包、哪里写错了,自己先修好,再给你一份完美的“成品”。
总结
这篇论文告诉我们:AI 生成的代码目前还“不可靠”。
虽然它们能写出看起来很像样的代码,但往往缺少了让代码真正跑起来的“隐形胶水”(完整的依赖和正确的逻辑)。目前,AI 生成的代码就像是一个只有骨架没有血肉的机器人,虽然形状像人,但还动不起来。 我们需要人类开发者花时间去“注入灵魂”(调试和补全),才能让它们真正工作。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。