LLMs 如何处理相互矛盾的指令?指令遵循优先级实验
LLMs 如何处理相互矛盾的指令?指令遵循优先级实验
编者按:想象一下,你正在开发一个 AI 助手,突然发现 system message 和用户提示词存在冲突,这时 AI 会听谁的?这种情况不仅困扰着开发者,还可能导致 AI 系统的不稳定和不可预测,影响用户体验和系统可靠性。本文作者通过一系列精心设计的实验,深入探讨了 GPT-4o 和 Claude-3.5 等顶尖大语言模型在面对 system message、prompt 和 few-shot examples 相互矛盾时的行为模式。研究结果揭示了一个令人惊讶的事实:即使是最先进的 AI 系统,在处理矛盾指令时也表现出了不一致性,其行为难以准确预测。
想象一下,你正在开发一个 AI 助手,突然发现 system message 和用户提示词存在冲突,这时 AI 会听谁的?这种情况不仅困扰着开发者,还可能导致 AI 系统的不稳定和不可预测,影响用户体验和系统可靠性。本文作者通过一系列精心设计的实验,深入探讨了 GPT-4o 和 Claude-3.5 等顶尖大语言模型在面对 system message、prompt 和 few-shot examples 相互矛盾时的行为模式。研究结果揭示了一个令人惊讶的事实:即使是最先进的 AI 系统,在处理矛盾指令时也表现出了不一致性,其行为难以准确预测。
实验设计与方法
用户可以通过以下三种方式指导 LLMs 执行任务:
- 在 system message 中明确指出任务内容
- 在常规提示词(prompt)中直接描述任务要求
- 提供几个展示“正确行为”的示例
基于上述定义,作者想要探讨以下问题:
- few-shot examples 真的那么重要吗?如果在提示词中给出了相互矛盾的指令,LLMs 会更倾向于遵循示例(examples)还是指令(instructions)呢?
- system message 的影响力有多大?如果在 system message 中给出一条指令(instruction),而在常规提示词中给出另一条指令,LLMs会更倾向于遵从哪一条?
为了解答这些问题,作者制作了一个小型数据集(可在此链接查看),里面包含了一些带有矛盾指令(instructions)和 few-shot examples 的简单任务。在文章的后续部分,作者将展示一个将英语翻译成各种语言的实例。
实验结果
实验1:提示词指令与 few-shot examples 之间的冲突
实验 1 的一个示例,其中的提示词指令与所提供的 few-shot examples 发生了冲突。此部分内容由原文作者设计
研究发现,面对这种矛盾,模型并没有表现出明显的倾向性,既不偏好遵循提示词指令,也不偏好 few-shot examples。在 GPT-4o 模型中,更常见的情况是它会忽略提示词指令,转而遵循 few-shot examples(或者在个别情况下,模型会因为无法正确回应任何一条相互矛盾的指令而出错)。而 Claude-3.5 模型则是几乎随机地选择遵循提示词指令或是 few-shot examples。
实验2:system message 与 few-shot examples 之间的冲突
本实验与前一个实验非常接近,区别仅在于指令(例如“将英语内容翻译成德语”)被放置在了 system message 中,而非提示词里。
在大多数任务中,GPT-4o 更倾向于遵从 system message 中的指令。这与它在第一个实验中的表现不同,在那个实验中,相同的指令位于常规提示词中,模型更倾向于遵从 few-shot examples。而 Claude-3.5 的表现则与第一个实验如出一辙(它几乎是以随机的方式决定是遵从 system message 还是 few-shot examples)。
实验3:system message 与提示词指令的冲突
在这个实验中,我们去掉了 few-shot experiments 的环节。system message 和提示词(prompt)中的指令相互对立。在这种情况下,两个模型几乎都选择了忽略 system message 中的指令,而遵循提示词(prompt)中的指令。
实验4:system message、提示词和 few-shot examples 全面冲突
在这个实验中,我们故意制造了一些混乱,以进一步测试模型的应对能力。实验中,system message 中的指令、提示词的指令和 few-shot examples 完全相互矛盾。
面对这些矛盾,GPT-4o 更倾向于遵从 system message 中的指令,而 Claude-3.5 则更倾向于按照 prompt 中的指令行事。
结论与讨论
在本文中,作者探索了在 system message 、prompt 以及 few-shot examples 中向语言模型提供相互矛盾指令的实验。实验得出了一些相互矛盾的结果 —— 有时候模型更倾向于遵循 system message 中的指令,而在稍有不同的实验设置下,模型的行为模式则会发生变化。system message 似乎对 GPT-4o 的输出影响更为显著,而对 Claude-3.5 的影响则相对较小。
few-shot examples 在引导模型进行决策时同样扮演了关键角色(尽管并非在所有情况下都有效)。语言模型通过 few-shot examples 进行“即时学习”的能力(即所谓的“上下文学习”),在面对相互矛盾的指令时尤为凸显。这让我们想起了 Anthropic 最近提出的“Many-shot jailbreaking”技术,该技术表明,即使语言模型在训练时被教导避免产生有害内容,通过提供足够多的有害行为示例,仍然有可能改变其行为,使其产生不期望的输出。
对于语言模型如何处理相互矛盾或冲突的指令,以及它们如何在不同情境下作出反应,我们还有很多未知之处,但深入研究和了解更多这方面的信息是非常重要的。
本文原文来自CSDN