IEEE Spectrum 近期刊发的一篇文章《Newer models are more prone to silent but deadly failure modes》指出,过去一年中,多款大型语言模型在代码生成任务上的实际表现并未持续提升,部分情况下甚至出现质量下降。一些开发者发现,新一代模型生成的代码虽然“能跑”,但可靠性不如旧版本,修正成本反而上升。
![]()
文章提到,早期 AI 编程工具常见的问题是语法错误或明显逻辑错误,这类问题通常会直接触发报错,开发者可以快速定位并修复。但在更新的模型中,错误形态正在发生变化:模型更倾向于生成表面合理、可以执行,但在语义或逻辑层面存在问题的代码。这类“静默失败”不会引发异常,却可能在后续流程中造成更严重的隐患。
文章举例称,在处理数据分析任务时,新模型有时会在关键字段缺失的情况下,擅自改写逻辑以避免程序崩溃,导致结果看似正常,实则偏离原始需求。相比之下,一些旧模型反而更倾向于提示潜在问题或要求用户确认输入条件。
下面是一个简单的 Python 代码示例,作用是加载一个数据框,然后查找不存在的列。
df = pd.read_csv('data.csv')
df['new_column'] = df['index_value'] + 1 # ‘index_value’ 不存在
显然,这段代码永远无法成功运行。Python 会生成一条易于理解的错误信息,解释说找不到列“index_value”。任何看到这条信息的人都会检查数据框,并注意到缺少这一列。
文章作者将此错误信息发送给了九个不同版本的 ChatGPT,主要基于 GPT-4 的各种变体以及较新的 GPT-5。作者要求每个版本都修复此错误,并明确表示只需要完整的代码,不需要任何注释。
- GPT-4 / GPT-4.1 大多给出合适的提示,建议检查该列是否存在,如果不存在则进行修复。
- GPT-5 则倾向于偷偷改写程序,它直接取每一行的实际索引(而不是虚构的“index_value”),然后加 1 来创建新列 new_column。这是最糟糕的结果:代码执行成功,乍一看似乎是正确的,但结果值本质上是一个随机数。在实际应用中,这会在后续代码中造成更大的麻烦。
文章作者认为,这种退化趋势可能与模型训练目标和评估机制有关。当前训练过程往往更强调“输出可被接受、代码能够运行”,而非严格保证语义正确性和安全性。同时,越来越多由 AI 生成、但未经过充分审查的代码被纳入训练数据,也可能放大这一问题。
![]()
作者最后指出,AI 编程工具依然具备显著价值,但在实际工程中仍需开发者保持审慎,依赖完善的测试与人工审查来兜底。短期内,AI 更适合作为辅助工具,而非可以完全信任的自动化编程替代方案。