← 最新论文
💻 computer science

A Multi-Language Perspective on the Robustness of LLM Code Generation

该论文通过构建涵盖四种提示扰动类型(文档字符串、函数名、语法和格式)的新数据集,对多语言环境下大语言模型代码生成的鲁棒性进行了全面评估,发现模型性能在所有语言中均因扰动而下降,且模型规模并非鲁棒性的可靠指标,语义扰动的影响尤为显著,而基于大语言模型的文档字符串修复仅能带来边际收益甚至可能降低性能。

原作者: Fazle Rabbi, Zishuo Ding, Jinqiu Yang

发布于 2026-04-07
📖 1 分钟阅读☕ 轻松阅读

原作者: Fazle Rabbi, Zishuo Ding, Jinqiu Yang

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文就像是在给现在的"AI 程序员”(大语言模型)做一场全方位的“抗压体检”

以前,大家只测试这些 AI 写 Python 代码(一种很流行的编程语言)时够不够稳。但这篇论文说:“等等,世界上的编程语言可不止 Python 一种!Java、C++、JavaScript 也很常用,AI 在这些语言面前表现怎么样?如果用户不小心把提示词(Prompt)写错了一点,AI 会不会就彻底‘翻车’?”

为了回答这些问题,作者们给 AI 们设计了一套**“找茬游戏”**,并得出了几个非常有趣的结论。

🎮 核心实验:给 AI 出“找茬题”

想象一下,你让一个 AI 写一个“计算最大公约数”的函数。

  • 正常情况:你给它正确的描述,它写出了完美的代码。
  • 找茬情况(扰动):作者们故意在描述里做手脚,比如:
    • 改名字:把函数名 greatestCommonDivisor 改成 grewtestCommonDivisor(多打了个错别字)。
    • 改描述:把“返回两个整数的最大公约数”改成“返回两个整数的最大公约数(用过去时态)”。
    • 改格式:把代码里的空格变成 Tab 键,或者把注释的位置挪一下。
    • 改语法:把 for 循环改成 while 循环(虽然逻辑一样,但写法变了)。

然后,他们看 AI 在这些“带刺”的提示下,还能不能写出能运行的代码。

🔍 实验对象与工具

  • 选手:6 个不同的 AI 模型(有的像小学生,有的像博士,有的专门学了很多代码)。
  • 考场:不仅仅是 Python,还扩展到了 Java、C++ 和 JavaScript 三种语言。
  • 考官:以前用的考题(HumanEval)太简单了,就像只考了“加减法”。这次他们升级了考题(EvalPlus),加入了更多“陷阱题”和“边界情况”,就像突然从“加减法”变成了“微积分”,更能测出真本事。

💡 主要发现(用大白话解释)

1. 越“聪明”的模型,不一定越“抗揍”

比喻:就像有些学霸,平时考满分(正常提示下表现好),但一旦题目里有个错别字,或者换个问法,他可能就懵了,甚至不如那些基础扎实但没那么“卷”的普通学生。
结论:模型越大(参数越多),并不代表它在面对错误提示时更稳健。有时候,大模型反而更脆弱,更容易因为一点小改动就写出错误的代码。

2. 不同语言的“脾气”不一样

比喻

  • Java:像个严谨的公务员。虽然平时工作很稳,但如果你把它的文件命名改错了一个字母,或者描述稍微有点歧义,它可能直接“罢工”(报错),因为它对规则要求太严格了。
  • C++:像个脾气暴躁的机械师。它最容易“翻车”,稍微一点格式不对或者逻辑微调,它就彻底崩溃,很难写出正确的代码。
  • JavaScript:像个灵活的自由职业者。它比较随性,对格式和小错误的容忍度最高。即使提示词有点乱,它也能勉强猜出你想干嘛,把代码写出来。

3. “语义”错误比“语法”错误更致命

比喻

  • 语法错误(比如少个分号):就像你说话时少说了个“的”,AI 还能猜出来。
  • 语义错误(比如把“苹果”说成“香蕉”,或者把时态改了):就像你让 AI“画一只猫”,结果你描述成“画一只会飞的狗”。这种意思上的偏差,对 AI 的打击最大,它完全不知道该怎么写代码了。
    结论:以前大家觉得改改格式没事,现在发现,改意思(哪怕只是换个同义词)比改格式更危险

4. 让 AI 自己“修”提示词,效果很有限

比喻:这就好比你让 AI 先帮自己把写错的题目改对,然后再做题。
结论:对于简单的错别字(比如把 filher 改成 filter),AI 能修好,成绩稍微回升一点。但对于那些意思已经变了的题目(比如把描述翻译成另一种语言再翻回来,意思虽然通顺但微妙地变了),AI 自己修反而可能越修越错,或者根本修不好。这说明,光靠“提示词修复”是不够的,AI 的“抗干扰能力”还得从根上练。

🚀 这篇论文告诉我们什么?

  1. 别太迷信 AI 的准确率:即使 AI 在正常测试里得分很高,也不代表它真的可靠。只要用户稍微说错一点话,它可能就会生成一堆垃圾代码。
  2. 语言很重要:如果你用 AI 写 Java 或 C++,要比写 Python 更小心,因为这两种语言对提示词的“容错率”更低。
  3. 测试要全面:以后测试 AI 写代码,不能只测 Python,也不能只测“完美提示词”。必须要在各种语言、各种“带刺”的提示词下都测一测,才能知道它到底靠不靠谱。

一句话总结
现在的 AI 程序员虽然很厉害,但它们很“娇气”。如果你稍微改改它的“指令”,或者换个编程语言,它就可能从“天才”变成“笨蛋”。所以,在使用它们时,我们要格外小心,不能盲目信任。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →