← 最新论文
💻 computer science

Assessing, Exploiting, and Mitigating Syntactic Robustness Failures in LLM-Based Code Generation

本文研究了基于大语言模型的代码生成在面对数学等价但句法各异的公式提示时缺乏句法鲁棒性的问题,展示了攻击策略如何加剧这一失效现象,并提出了一种公式简化预处理技术,将鲁棒性从 54.05% 显著提升至 74.42%。

原作者: Laboni Sarker, Mara Downing, Achintya Desai, Tevfik Bultan

发布于 2026-05-12
📖 1 分钟阅读☕ 轻松阅读

原作者: Laboni Sarker, Mara Downing, Achintya Desai, Tevfik Bultan

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

想象一下,你有一个非常聪明但略显死板的机器人助手(大型语言模型,或称 LLM),它的工作是根据你的指令编写计算机代码。你告诉它:“建造一台能将两个数相加的机器。”

如果你说“将 2 和 2 相加”,它会建造这台机器。
如果你说“将 4 和 0 相加”,它应该建造完全相同的机器,因为在数学上,2+22+24+04+0 是等同的。

这篇论文提出了一个简单却至关重要的问题:这个机器人是否明白,尽管文字和符号看起来不同,这两条指令其实是相同的?

作者将这一概念称为“句法鲁棒性”。这就像一个人无论听到笑话是用耳语、喊叫还是带着滑稽的口音讲述,都能理解其含义。如果机器人仅仅因为你改变了数学的风格(句法)而没有改变其含义(语义)就崩溃或感到困惑,那么它就缺乏鲁棒性。

以下是他们研究发现的分解,使用了日常类比:

1. 问题所在:机器人被“数学行话”搞糊涂了

研究人员通过将一个数学问题用 18 种不同的方式重写来进行测试,这些方式在数学上都是完全等价的。

  • 原始版本:“力为 F=9.8×a×bF = 9.8 \times a \times b。”
  • 改写版本:“力为 F=(9.8×a×b)+0F = (9.8 \times a \times b) + 0。”(在数学中,加零不改变任何结果。)
  • 改写版本:“力为 F=(9.8×a×b)×1F = (9.8 \times a \times b) \times 1。”(在数学中,乘一不改变任何结果。)

他们发现,这些机器人(LLM)并不具备鲁棒性。当数学表达式被重写时,机器人往往会编写出完全不同的、有时甚至是错误的代码。这就好比机器人心想:“哦,你加了一个零?那肯定意味着你想要一台不同的机器!”尽管结果本应相同。

2. 困惑的“距离”

研究人员测量了他们需要如何“扭曲”数学表达式才能搞垮机器人。

  • 距离 0:原始、干净的数学表达式。机器人表现尚可。
  • 距离 5:数学表达式被扭曲和变换了五次(例如,加零、乘一、交换顺序)。
  • 结果:随着“距离”的增加,机器人的性能急剧下降。这就像试图在迷宫中导航;你给路径添加的弯弯曲曲越多,机器人迷路的可能性就越大,即使目的地是相同的。

3. 两种类型的任务:“翻译”与“推理”

该论文发现,机器人处理两种不同类型的数学请求时表现不同:

  • 翻译提示:“这里有一个公式,只需编写计算它的代码。”(就像翻译员复制句子。)机器人在这方面表现尚可
  • 推理提示:“这里有一个物理问题;找出解决步骤并编写代码。”(就像学生解应用题。)当数学表达式被扭曲时,机器人在这方面表现极差。如果数学表达式看起来很奇怪,它们就无法“思考”出其中的逻辑。

4. 攻击:故意搞垮机器人

研究人员像黑客一样行动,以测试他们能多容易地搞垮机器人。他们使用了三种策略:

  • 随机扭曲:随机更改数学表达式。
  • 智能扭曲:利用“作弊小抄”找出最能混淆机器人的特定更改。
  • 结果:他们发现,只需进行几次巧妙的更改(例如添加不必要的零或交换项),就能让机器人几乎每次都失败。这就像在句子中找到一个特定的词,能让翻译员瞬间卡壳。

5. 解决方案:“预处理”(简化器)

既然机器人会被看起来复杂的数学表达式搞糊涂,研究人员提出了一种修复方案:不要直接把杂乱的数学表达式喂给机器人;先把它清理干净。

他们构建了一个位于你和机器人之间的“预处理器”(过滤器)。

  • :“计算 F=(9.8×a×b)+00F = (9.8 \times a \times b) + 0 - 0。”
  • 预处理器:“我看到你加了零又减了零。我会去掉那些。这是清理后的版本:F=9.8×a×bF = 9.8 \times a \times b。”
  • 机器人:接收清理后的数学表达式,并编写出正确的代码。

结果:在将数学表达式交给机器人之前进行这种简单的“清理”步骤,将其成功率从 54% 提升到了 74%。这就像在考试前给困惑的学生提供一份简化的学习指南;他们的表现会好得多。

总结

该论文得出结论,虽然 AI 代码生成器功能强大,但在处理数学方面却很脆弱。它们会被公式书写方式的简单、无害的更改所绊倒。然而,如果我们在 AI 看到数学表达式之前添加一个简单的“清理”步骤来简化它,我们就可以让它们变得更加可靠。

该论文并未声称:

  • 它并未声称这对所有类型的 AI 都有效(仅适用于涉及数学的代码生成)。
  • 它并未声称这能修复机器人学习新事物的能力(它只是一个预过滤器)。
  • 它并未声称这是解决所有 AI 弱点的永久方案,而只是针对数学句法这一特定问题的方案。

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

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

试用 Digest →