想象一下,你正在聘请一位才华横溢但略显字面思维的助手来为你编写计算机程序。你给它们一套指令(即“提示词”)。长期以来,专家们认为,你的指令越精确、越详细、越严格,助手的表现就越好。如果你遗漏了某个细节,助手就会感到困惑并失败。
本文挑战了这一旧有观念。研究人员发现,有时,给你的助手提供更少的细节,反而能帮助他们写出更好的代码。
以下是他们如何发现这一点的,通过简单的类比来解释:
1. 两种类型的“考试”
研究人员在两种不同类型的 AI 模型“考试”(基准测试)上测试了这一想法:
- “闪卡”考试(HumanEval): 这就像简短的单句闪卡。指令非常简短,没有任何额外背景。就像问:“写一个函数来排序这个列表。”
- “教科书”考试(LiveCodeBench): 这就像完整的教科书章节。它们包含长篇故事、规则列表、输入输出示例以及具体约束。就像说:“这里有一个关于排序姓名列表的故事。规则如下:名字不能超过 10 个字母,这里是输入示例……"
2. 实验:“破坏”指令
研究人员对这些指令进行了三种方式的有意“变异”,以观察会发生什么:
- 模糊性(LV): 他们将具体词汇替换为模糊词汇(例如,将“排序”改为“排列”)。
- 未充分指定(US): 他们删除了特定规则或约束(例如,移除关于数字大小的规则)。
- 格式混乱(SF): 他们添加了拼写错误或改变了间距。
3. 令人惊讶的结果
结果因 AI 参加的“考试”类型而异:
- 在“闪卡”考试中: 当研究人员移除细节或使词汇模糊时,AI 的表现崩溃了。就像学生在短测验中因老师移除提示而惊慌失措一样,AI 感到困惑并写出了错误的代码。
- 在“教科书”考试中: 当他们做同样的事情时,AI 的表现保持不变,或者令人惊讶地变得更好。
“净零”错觉:
起初,研究人员认为“教科书”考试中的 AI 根本不在乎这些变化。但仔细观察后,他们发现了一场拔河比赛。
- 某些变化导致 AI 失败(退化)。
- 但几乎同等数量的变化使 AI 在之前失败的地方取得了成功(改进)。
- 这两种力量相互抵消,使得看起来好像什么都没发生。
4. 为什么“少”有时意味着“多”?
论文发现了一个有趣的原因,解释为什么移除规则有时能修复代码。这关乎坏习惯和“线索”。
想象 AI 就像一个背熟了特定教科书答案的学生。
- 陷阱: 有时,提示词中的特定单词或特定数字就像一个“触发器”。它提醒 AI 想起一个看起来正确但实际上不适合该特定问题的记忆化解决方案。
- 论文中的例子: 一个问题提到了“货币”。这个词触发了 AI 思考金融汇率,导致它使用了一个向后思考的算法。
- 修复: 当研究人员移除“货币”这个词并用“资源”这样的模糊词替换时,AI 不再触发其“金融记忆”。相反,它被迫从头开始思考问题结构。这导致了正确的解决方案。
换句话说,提示词中的额外细节有时会无意中给 AI 一个“提示”,将其引向错误的道路。移除该提示迫使 AI 正确地完成任务。
5. 主要结论
论文得出结论,鲁棒性不在于 AI 的大小(无论它是小型还是巨型模型);而在于指令是如何构建的。
- 如果你给 AI 一个简短的单句提示,它非常脆弱。如果你搞错了措辞,它就会失败。
- 如果你给 AI 一个丰富、多层次的提示(包含示例、约束和格式),它的鲁棒性就强得多。如果指令的某一部分令人困惑,它有“备用信号”可以依赖。
- 关键的是: 有时,过于具体就是一个陷阱。特定的单词或数字可能会无意中“启动”AI 使用一个记忆化但错误的捷径。移除这些具体线索有时能迫使 AI 正确地解决问题。
简而言之: 不要假设完美、详细的提示词总是最好的。有时,稍微模糊一点的提示词会迫使 AI 独立思考,从而避免其自身记忆化习惯的陷阱。
以下是论文《提示词欠规范如何提升代码正确性:基于大语言模型的代码生成中提示词措辞与结构影响的探索性研究》的详细技术总结。
1. 问题陈述
尽管大语言模型(LLM)在代码生成中的应用日益广泛,但其输出结果的准确性对提示词措辞高度敏感。先前的研究已确立,欠规范(缺失或弱化的需求)以及微小的提示词扰动通常会降低性能。然而,这些发现主要源于最小规范基准(如 HumanEval、MBPP),这些基准仅包含简短的、单文档字符串的描述,缺乏结构冗余。
作者假设,这些基准夸大了大语言模型的脆弱性。在现实场景中,任务通常包含丰富的、多层级的规范(描述、约束、输入/输出格式、示例)。本文旨在探究:欠规范的负面影响是否在结构丰富的环境中依然存在?以及,反直觉地,移除特定的提示词元素是否可能通过破坏误导性的检索线索,从而提升代码的正确性。
2. 方法论
基准测试
本研究对比了两个具有不同结构特性的基准测试:
- HumanEval (HE): 164 个简单的 Python 问题,配有简短的文档字符串。缺乏独立的约束、结构化的输入/输出或示例。代表“最小规范”。
- LiveCodeBench (LCB): 1,055 个编程竞赛问题(来自 LeetCode、Codeforces、AtCoder),包含完整的散文式描述、明确的约束、多个示例输入/输出对以及格式规范。代表“丰富规范”。
模型
本研究评估了10 个大语言模型,涵盖三个类别:
- 小型开源模型(6–7B): CodeLlama-7B、DeepSeek-Coder-6.7B、Qwen2.5-Coder-7B。
- 大型开源模型(15–34B): StarCoder2-15B、Codestral-22B、CodeLlama-34B、DeepSeek-Coder-33B、Qwen2.5-Coder-32B。
- 专有/推理模型: GPT-5-mini、Claude Sonnet 4。
提示词变异
作者利用三种变换类型系统地生成了3,651 个变异提示词:
- 词汇模糊性 (LV): 用更宽泛的同义词替换精确的术语或标识符(例如,将"sort"替换为"arrange",将
delimiter 替换为 filler)。
- 欠规范 (US): 移除单个显式约束(例如,数值范围、排序规则、边界情况描述),同时保持提示词在语法上有效。
- 语法与格式 (SF): 引入表面层面的噪声(拼写错误、缩进错误、分隔符问题),而不改变语义。
评估指标
- Pass@1: 准确性的主要指标。
- 转换分析: 追踪Pass→Fail(退化)和Fail→Pass(提升)的转换,以区分均匀退化与相互抵消的力量。
- 注意力分析: 检查模型的注意力模式,以了解哪些提示词区域驱动了决策。
- 根本原因分析: 手动检查那些变异后提升正确性的案例,以识别语言机制。
3. 主要贡献与发现
发现 1:鲁棒性是结构性的,而非架构性的
- HumanEval: 所有类型的变异都导致了显著的性能下降(例如,US 变异导致平均**-11.8%**的下降)。
- LiveCodeBench: 同样的变异仅导致接近零的净影响(例如,US 变异仅造成**-0.9%**的下降)。
- 结论: 鲁棒性并非模型规模或架构的固有属性,而是由提示词结构决定的。丰富的规范提供了冗余(约束、示例、输入/输出),当提示词的部分内容受损时,这些冗余可作为备用信号。注意力图证实,LCB 上的模型严重依赖这些辅助组件,而 HE 上的模型则几乎完全依赖描述部分。
发现 2:欠规范可以提升正确性
与“规范越多越好”的假设相反,研究发现欠规范往往能提升LCB 上的代码正确性。
- 在 LCB 上,对于 LV 变异,Fail→Pass与Pass→Fail转换的比例接近1:1 (0.99),意味着提升抵消了退化。
- 在 HumanEval 上,退化占据主导地位(比例为0.40)。
- 一致的提升: 研究确定了47 个特定的 LCB 任务,在这些任务中,移除约束或模糊性在多个模型中一致地提高了通过率。
发现 3:提升机制(对检索线索的破坏)
手动分析显示,原始提示词通常包含将模型锚定在记忆化但错误解决方案上的“检索线索”。欠规范破坏了这些线索,迫使模型从问题结构出发进行推理。
- 词汇模糊性 (LV):
- 变量重命名: 打破过度拟合的关联(例如,将
s 重命名为 seq 可防止检索到特定的错误算法)。
- 术语泛化: 用通用术语替换特定领域名词(例如,将"currency"替换为"resource"),防止模型应用特定领域的启发式方法(如逆向金融扫描),并鼓励通用的算法推理(如正向动态规划)。
- 欠规范 (US):
- 约束移除: 特定约束(例如,Ci≤109)通常会诱导模型使用优化的捷径(例如,星形图直径公式),这些捷径在通用案例中会失效。移除约束迫使模型使用通用且正确的算法(例如,两次 BFS)。
- 输入/输出诱导: 约束有时会触发错误的输入解析模式(例如,LeetCode 风格的
input().split() 与编程竞赛的 stdin 格式)。移除它们可强制进行正确的解析。
4. 意义与启示
- 重新评估基准测试: 像 HumanEval 这样的最小规范基准可能高估了大语言模型的脆弱性,因为它们缺乏现实任务中存在的冗余。它们未能捕捉到“抵消效应”,即结构丰富性能够缓解提示词错误。
- 提示词工程: 本研究挑战了提示词必须尽可能精确的教条。在某些情况下,过度规范(特别是包含误导性约束或特定领域标识符)会无声地误导模型。从业者应意识到,移除某些线索有时能产生更好的结果。
- 模型开发: 对检索线索的敏感性表明存在泛化差距,仅靠模型规模无法解决这一问题。即使是最先进的推理模型(GPT-5、Claude)也会落入这些线索的陷阱,这表明需要优先训练结构推理而非模式匹配的策略。
- 未来研究: 论文呼吁建立反映现实世界开发结构丰富性的基准测试,并鼓励研究导致基于检索的失败的具体语言触发因素。
总结
这项探索性研究表明,提示词欠规范的影响并非均匀的。虽然它在最小规范基准上会降低性能,但现实任务中丰富的规范提供了冗余,中和了这些影响。令人惊讶的是,欠规范可以通过破坏导致模型依赖记忆化错误模式的误导性检索线索,从而提升代码正确性。作者得出结论:鲁棒性是提示词结构的函数,在精度会触发过拟合的特定语境下,“少即是多”。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。