Code Roulette: How Prompt Variability Affects LLM Code Generation

该论文提出了一种与具体编程任务和模型无关的评估流程,旨在量化大语言模型在代码生成中对提示词变异的敏感性,并通过实验验证了该方法的有效性。

Andrei Paleyes, Radzim Sendyka, Diana Robinson, Christian Cabrera, Neil D. Lawrence

发布于 2026-03-19
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文就像是在给大语言模型(LLM)做一场"代码生成稳定性体检"。

想象一下,你有一个非常聪明的“数字厨师”(大语言模型),你给它看一张菜谱(提示词/Prompt),它就能做出一道菜(代码)。这篇论文的核心问题就是:如果你稍微改动一下菜谱上的几个字,这道菜的味道(代码)会发生翻天覆地的变化吗

以下是用通俗易懂的比喻和语言对这篇论文的解读:

1. 核心问题:为什么“措辞”很重要?

在传统的软件开发中,人类工程师会把模糊的需求翻译成精确的规格说明书。但现在,普通人直接对着 AI 说话就能写代码。

  • 比喻:就像你点外卖。如果你说“我要一份微辣的宫保鸡丁”,厨师可能做得很完美。但如果你说“我要一份稍微有点辣味的鸡丁,带点花生”,或者不小心打错字成了“我要一份微辣的宫保丁”(把“鸡”打成了别的字),AI 厨师做出来的菜可能会完全不一样,甚至做出一盘“炒螺丝”。
  • 痛点:不同的人背景不同,表达习惯也不同。这篇论文想搞清楚:AI 是不是太“玻璃心”了?稍微换个说法,它生成的代码是不是就面目全非了?

2. 实验方法:给菜谱“加料”

研究人员设计了一套流程,专门测试 AI 对“菜谱改动”的敏感度。他们用了三种“捣乱”方法:

  1. 键盘手滑(Typos):故意把字打错(比如把 print 打成 prnt,或者把相邻的键按错)。
    • 比喻:就像你在写菜单时手抖,把“糖”写成了“盐”。
  2. 同义词替换(Synonyms):把词换成意思一样的词(比如把“计算”换成“算出”)。
    • 比喻:就像把“微辣”改成“有点辣”。
  3. 换种说法(Paraphrasing):用完全不同的句子结构表达同一个意思。
    • 比喻:就像把“我要一份宫保鸡丁”改成“请给我来一盘鸡肉配花生,稍微带点辣味”。

然后,他们让 AI 分别用这些“被捣乱过”的菜谱做菜,并比较做出来的菜(代码)和原版菜谱做出来的菜有多像。

3. 主要发现:AI 的“脾气”大不一样

研究团队测试了四个流行的 AI 模型(GPT-4o mini, Claude 3 Haiku, Gemini 2.0 Flash, Llama 3.3),发现了一些有趣的现象:

  • 对“手滑”最敏感
    如果提示词里出现错别字,AI 生成的代码会迅速变得“面目全非”。
    • 比喻:只要菜谱里有个错字,AI 厨师可能就直接开始做“黑暗料理”了,哪怕只错了一个字,菜的味道也全变了。
  • 对“换说法”比较淡定
    如果是同义词或者换种说法,AI 的表现就稳定多了,生成的代码依然很像原版。
    • 比喻:只要核心意思没变,不管你是说“微辣”还是“有点辣”,AI 厨师都能做出差不多的菜。
  • 谁是“最稳”的厨师
    Gemini 2.0 Flash 在应对“换说法”时表现最稳,不容易被带偏。
  • 老题 vs. 新题(数据污染问题):
    • 老题(LeetCode 旧题):AI 对这些题目太熟悉了,就像背过答案的学生。哪怕你把题目改得乱七八糟,它也能认出这是那道老题,所以生成的代码很稳定。
    • 新题(LeetCode 新题或自创题):AI 没背过答案。这时候,只要提示词稍微改一点,它生成的代码就会大相径庭。
    • 比喻:如果你考 AI 一道它做过的老题,它闭着眼都能写对;但如果你出一道它没见过的创新题,它稍微听错一点指令,解题思路就全歪了。

4. 为什么这很重要?

这篇论文告诉我们,不能盲目信任 AI 生成的代码

  • 信任危机:如果你和你的朋友分别用不同的话问 AI 同一个问题,你们拿到的代码可能完全不同。这会让代码维护变得很困难(就像两个人用不同的方言写同一份说明书)。
  • 建立标准:我们需要知道 AI 在什么情况下会“发疯”,什么情况下比较“听话”。这有助于开发者设计更好的工具,比如当 AI 输出不稳定时,自动提示用户“请重新描述一下需求”。

5. 总结

这篇论文就像给 AI 代码生成能力照了一面X 光片。它发现:

  1. AI 对错别字非常敏感,容易“翻车”。
  2. AI 对换种说法相对宽容。
  3. 如果 AI 背过题(数据污染),它就“装傻”;如果没背过题,它就“看人下菜碟”,稍微改改提示词,结果就大变样。

最终结论:在让 AI 写代码时,我们需要更小心地打磨我们的“提示词”,并且要意识到,即使是微小的输入变化,也可能导致完全不同的代码输出。未来的目标是让 AI 变得更“皮实”,不管你怎么问,它都能给出稳定、可靠的代码。