你给的 prompt 正在互相打架?LLM 偷偷选了一个,这篇论文测出了排序

我试过好几次:写了一大段自然语言描述,又贴了几个 I/O 例子,再补一段伪代码约束——结果 LLM 干出来的事跟预期完全不是一回事。以前总怀疑是模型没听懂,后来被坑多了才发现,那几段信息本身就在打架,模型自己悄悄选了一个站。

这就是今天挂在 arXiv 上的这篇论文(2607.28384,已投 AAAI 2027)想系统回答的事。Tairan Wang 等四位作者搭了一个对称性控制框架,专门用来测 LLM 对不同类型规格指令的偏好。

做法不复杂:对同一个任务故意给出互相矛盾的限制条件,然后看模型更倾向遵守哪一种。比如自然语言说「只返回数字」,但输入输出示例里却混进了字母——模型听谁的?数据规模不小,550 个冲突实例,覆盖 11 种函数族,比较了四种规格表达方式:纯自然语言、形式语言(数学符号和逻辑表达式)、自然化形式语言(把形式语言用自然语言重说一遍)、以及 I/O 示例。

实验结果给出了一个稳定排序:形式语言 ≈ 自然化形式语言 > 纯自然语言 > 输入输出示例。翻译一下就是:当用多种方式描述同一个需求,而且描述之间有冲突时,LLM 最优先采信形式化描述(伪代码、数学约束),自然语言次之,最后才是示例——「多给几个例子让模型理解」可能只是自我感动。这个模式在布尔代数、代码生成和临床诊断三个领域都复现了,说明跨任务有通用性,不是碰巧。

这可能看着像一篇学术论文,跟日常工作关系不大。但每天写 prompt、搭 Agent、调工作流的人应该能从这个结果里品出点东西:习惯「多管齐下」写指令——说明来一段、例子给几个、约束再加一条——以为是冗余备份,但模型其实在内部做了优先级排序。它可能只认真处理了其中一种信号,其余信息并没有被真正吸收。

这个框架真正有用的地方在于,它给了我们一个可测量的工具去追问:给的规范在打架时,模型到底站哪边。以前只能玄学试 prompt,换顺序、改措辞,全凭手感。现在至少有一个方向了——想确保某条约束被重视,别只用示例来表达,换成形式化语言效果更稳。

当然,论文目前还是 arXiv 版本,实验集中在数学函数任务上。虽然拓展到了代码和临床,但离真实世界里「几百页需求文档互相覆盖又互相矛盾」的复杂度还有距离。它没有解释模型为什么会这样排序,只是确认了排序的存在。

但这已经够了。下次再碰到 Agent 干出莫名其妙的事,可以先回头看一眼 prompt:是不是自然语言说「A」,而示例里其实暗示了「B」?


相关链接

  • 论文页面:https://arxiv.org/abs/2607.28384
  • PDF 全文:https://arxiv.org/pdf/2607.28384