Are Large Language Models Robust in Understanding Code Against Semantics-Preserving Mutations?
本文揭示,尽管最先进的语言模型在代码任务上实现了高预测准确率,但它们经常依赖有缺陷的推理并表现出显著的脆弱性,往往在面对保持语义的代码变异时改变其预测结果。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你有一位极具天赋的学生,他既能解决复杂的数学问题,又能写出听起来极其聪慧的文章。当你要求他解释如何解决某个问题时,他会给你一个完美、循序渐进的解答过程。你因此确信他真正理解了所学内容。
但如果你告诉这位学生:“好的,现在请解决完全相同的问题,但不要用‘苹果’这个词,改用‘水果’;不要说‘加’,改说‘求和’。”
如果这位学生突然感到困惑,改变了答案,或者给出了一个完全不同(且错误)的解释,你就会意识到,他实际上并没有理解数学的逻辑。他只是在死记硬背你之前使用的特定词汇和模式。
这正是牛津大学的研究人员在让大型语言模型(LLMs)理解计算机代码时所发现的情况。
“氛围编程”的陷阱
如今,许多人使用人工智能工具来编写代码,这种趋势被称为“氛围编程”(vibe coding)。我们信任这些 AI 模型来修复错误并编写程序。但研究人员提出了一个令人担忧的问题:这些 AI 模型是否真正理解代码的工作原理,还是仅仅非常擅长基于模式进行猜测?
为了找出答案,他们将 AI 视为参加考试的学生,但加入了一个转折。
“变形”测试
研究人员选取了一组计算机程序,并对它们实施了五种特定的“魔术”。这些“魔术”改变了代码的外观(语法),但完全保留了其含义和结果(语义)。这就像将句子“猫坐在垫子上”改写为“在垫子上,那只猫科动物休息了”。含义完全相同,但用词不同。
他们使用的五种“魔术”是:
- 重命名变量:将
my_list改为x9z2。 - 镜像比较:将
if x > 5改为if 5 < x。 - 交换逻辑:切换决策中的“如果”和“否则”部分。
- 循环转换:将“for"循环改为“while"循环。
- 循环展开:手动写出循环的最后几步,而不是让计算机重复执行。
结果:聪明的猜测者,而非真正的思考者
当研究人员在九种不同的 AI 模型(包括最著名的 GPT-5.2 和 Gemini-3)上运行这些测试时,他们发现了一些令人不安的模式:
- “推理缺陷”问题:即使 AI 给出了正确答案,它往往也是基于错误的原因。事实上,在 10% 到 50% 的情况下,AI 基于完全错误或荒谬的解释得出了正确答案。这就像学生在数学考试中猜对了答案,却编造了一个公式来为其辩护。
- “脆弱性”问题:当使用上述“魔术”对代码进行“变形”时,AI 的性能急剧下降。某些模型的准确率下降了高达 70%。
- 类比:想象一位厨师,如果你说“烹饪牛肉”,他能完美地煎好牛排。但如果你说“烹饪牛”,他就会惊慌失措,把厨房烧了。AI 模型就像这位厨师;即使“饭菜”(程序的结果)完全相同,他们也会因措辞的简单变化而感到困惑。
- “变量名”敏感性:模型对变量名表现出惊人的敏感性。将名称从
total改为sum_total通常会导致它们失败,尽管代码逻辑完全相同。有趣的是,人类也会因糟糕的命名而感到轻微困惑,但 AI 的反应要极端得多。
“优等生”也不完美
研究人员测试了免费的开源模型和昂贵的私有模型(如 GPT-5.2 和 Gemini-3)。
- 昂贵的模型在针对原始代码获得正确答案并提供良好解释方面表现最佳。
- 然而,当代码发生轻微变化时,即使是这些“优等生”也严重失足。它们的性能显著下降,这证明在标准测试上的高准确率并不意味着它们真正理解了底层逻辑。
核心结论
该论文得出结论:当前的 AI 模型是脆弱的。它们非常擅长识别模式并模仿人类推理,但缺乏对代码实际工作原理的“形式化”理解。
如果你以某种方式让它们解决问题,它们可能会做对。但如果你用略有不同的方式提出相同的问题(即使含义完全相同),它们可能会完全失败。这表明,就目前而言,我们不应盲目信任这些模型能深入理解代码;它们更像是非常先进的鹦鹉,能够复述正确的答案,但并不总是知道为什么这些答案是正确的。
研究人员建议,为了使 AI 在编程方面真正可靠,我们需要将它们的学习能力与严格的、形式化的规则相结合(就像数学老师检查解题过程,而不仅仅是答案),以确保它们不仅仅是在猜测。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。