LLMs 如何处理相互矛盾的指令?指令遵循优先级实验
编者按:想象一下,你正在开发一个 AI 助手,突然发现 system message 和用户提示词存在冲突,这时 AI 会听谁的?这种情况不仅困扰着开发者,还可能导致 AI 系统的不稳定和不可预测,影响用户体验和系统可靠性。
本文作者通过一系列精心设计的实验,深入探讨了 GPT-4o 和 Claude-3.5 等顶尖大语言模型在面对 system message、prompt 和 few-shot examples 相互矛盾时的行为模式。研究结果揭示了一个令人惊讶的事实:即使是最先进的 AI 系统,在处理矛盾指令时也表现出了不一致性,其行为难以准确预测。
实验结果如下:
当 prompt 的指令与 few-shot examples 矛盾时,模型没有表现出明显的偏好。
当 system message 与 few-shot examples 矛盾时,GPT-4o 倾向于遵循 system message,而 Claude-3.5 表现出随机性。
当 system message 与 prompt 的指令矛盾时,两个模型都倾向于遵循 prompt 指令。
在三者都矛盾的情况下,GPT-4o 倾向于遵循 system message,而 Claude-3.5 倾向于遵循 prompt 的指令。
作者 | Yennie Jun
编译 | 岳扬
如果 system message、prompt 和 examples 中的指令相互矛盾,那么 LLMs 在回复时会遵循哪些指令?原图由原文作者制作
大语言模型面对提示词中的矛盾指令会如何应对?
“认知失调[1]”是一个心理学术语,描述的是当一个人同时持有多种相互矛盾的观点时内心的不适感。比如,在超市购物时,你看到结账通道上写着“限 10 件商品以下”,但这个通道排队的人每人手里都不止 10 件商品,这时你该怎么办?
在探讨人工智能时,我特别好奇大语言模型(LLMs)在面对类似认知失调的情况——比如指示模型将英语内容翻译成韩语,却提供了将英语内容翻译为法语的示例——会如何处理。
在本文中,我通过向 LLMs 提供相互矛盾的信息进行了一系列实验,以确定模型更倾向于遵循哪一方的信息。
用户可以通过以下三种方式指导 LLMs 执行任务:
在 system message 中明确指出任务内容
在常规提示词(prompt)中直接描述任务要求
提供几个展示“正确行为”的示例
向语言模型传达指令的不同方法,可以选择其中任一或多种方法。原图由原文作者制作
在这些方法中,system message 似乎最为神秘(至少我个人这么认为)。根据微软[2]的说法,“system message 用于在对话初始阶段向模型传递指令或提供必要的背景信息。 ”
目前,system message 对提示词(prompt)的影响力度(与直接在提示词中嵌入 system message 相比)尚不明确。至少,至今我未曾见到过针对这一点的深入分析。
提示词指令(prompt instruction)通常用来明确告诉模型该做什么,比如“将英语翻译成法语”、“校对文章,修正所有语法错误”或“编写代码解决以下问题”。
而 few-shot examples 则是一种可选的方式,向模型展示对于类似输入的正确输出应该是怎样的。
基于上述定义,我想要探讨以下问题:
few-shot examples 真的那么重要吗?如果在提示词中给出了相互矛盾的指令,LLMs 会更倾向于遵循示例(examples)还是指令(instructions)呢?
system message 的影响力有多大?如果在 system message 中给出一条指令(instruction),而在常规提示词中给出另一条指令,LLMs 会更倾向于遵从哪一条?
为了解答这些问题,我制作了一个小型数据集(可在此链接[3]查看),里面包含了一些带有矛盾指令(instructions)和 few-shot examples 的简单任务。在文章的后续部分,我将展示一个将英语翻译成各种语言的实例。
以下实验是在 OpenAI 的 GPT-4o 模型[4]和 Anthropic 最新推出的 Claude-3.5 模型[5]上进行的。
01 实验 1:提示词指令与 few-shot examples 之间的冲突
实验 1 的一个示例,其中的提示词指令与所提供的 few-shot examples 发生了冲突。此部分内容由原文作者设计
当大语言模型接收到与 few-shot examples 相冲突的提示词指令时,它的行为并不容易预测。 研究发现,面对这种矛盾,模型并没有表现出明显的倾向性,既不偏好遵循提示词指令,也不偏好 few-shot examples。
在 GPT-4o 模型中,更常见的情况是它会忽略提示词指令,转而遵循 few-shot examples(或者在个别情况下,模型会因为无法正确回应任何一条相互矛盾的指令而出错)。而 Claude-3.5 模型则是几乎随机地选择遵循提示词指令或是 few-shot examples。
在首个实验中,我们向模型提供了提示词指令以及与之相矛盾的一组 few-shot examples。实验结果表明,模型在遵循提示词指令与 few-shot examples 之间没有明确的偏好。此部分内容由原文作者设计
02 实验 2:system message 与 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)。
在第二个实验中,我们向模型提供了 system message 中的指令以及与之相矛盾的一组 few-shot examples。结果显示,GPT-4o 更倾向于遵从 system message 中的指令,而 Claude-3.5 则没有表现出明显的偏好。此部分内容由原文作者设计
这告诉我们什么?一种解释是,对于 GPT-4o 而言,system message 中的指令比提示词中的指令影响力更大(至少在这些示例中是这样)。而对于 Claude 来说,system message 的重要性似乎较低,其效果与直接将消息放入提示词中相似。
03 实验 3:system message 与提示词指令的冲突
实验 3 的一个示例,其中 system message 中的指令与提示词(prompt)中的指令发生了冲突。此部分内容由原文作者设计
在这个实验中,我们去掉了 few-shot experiments 的环节。system message 和提示词(prompt)中的指令相互对立。在这种情况下,两个模型几乎都选择了忽略 system message 中的指令,而遵循提示词(prompt)中的指令。
在实验 3 中,system message 中的指令和 prompt 中的指令相互矛盾。两种模型都更倾向于忽略 system message 中的指令,而遵循 prompt 中的指令。此部分内容由原文作者设计
04 实验 4:system message、提示词和 few-shot examples 全面冲突
实验 4 中的一个示例,其中 system message 中的指令、prompt 中的指令以及 few-shot examples 之间全面冲突。此部分内容由原文作者设计
在这个实验中,我们故意制造了一些混乱,以进一步测试模型的应对能力。实验中,system message 中的指令、提示词的指令和 few-shot examples 完全相互矛盾。
可想而知,模型的行为模式并不稳定。
面对这些矛盾,让我感到惊讶的是,GPT-4o 更倾向于遵从 system message 中的指令,而 Claude-3.5 则更倾向于按照 prompt 中的指令行事。
在实验 4 中,我们向模型提供的 system message、prompt 和 few-shot examples 中存在相互矛盾的内容。结果显示,GPT-4o 更倾向于遵照 system message 的指令,而 Claude-3.5 则更倾向于遵照 prompt 中的指令。此部分内容由原文作者设计
05 Discussion and Conclusions
在本文中,我探索了在 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”技术,该技术表明,即使语言模型在训练时被教导避免产生有害内容,通过提供足够多的有害行为示例,仍然有可能改变其行为,使其产生不期望的输出。
Anthropic’s Many-shot jailbreaking[6].
文章中的实验研究是基于有限数量的、经过精心挑选和准备的示例进行的。对于语言模型在面对提示词中的不同形式矛盾时的处理方式,目前的研究还远远不够,还有很多不同的角度和方法需要去探索。
如果采用本文作者使用的一些示例的变化形式,并且结合其他不同的语言模型进行测试,那么很可能会观察到与本文中不同的结果。GPT 和 Claude 模型的未来版本,也可能不会完全遵循本文发现的特定行为模式。
当语言模型接收到提示词中的矛盾指令时,它们的行为表现并不是始终如一的。本文的重点不在于这些模型针对特定示例或任务与哪些具体指令保持一致,而在于这种一致性实际上并不存在。
system message 中的指令是否应该始终具有最高的优先级?语言模型是否应该将灵活性视为最重要的原则,并始终遵循最新的指令(即便该指令与之前的指令相矛盾),或者是否应该重视“从实践中学习”的原则,并与其所接收的少量“correct answers”示例保持一致(即使这些示例可能与 system message 或其他指令相冲突)。
上述讨论不仅限于本文构造的测试示例,还适用于现实世界中的其他场景 —— 比如,system message 要求模型提供帮助,而 few-shot examples 却指导模型如何采取有害的行为。又或者,提示词中的 few-shot examples 未能更新,无法反映最新的指令。
对于语言模型如何处理相互矛盾或冲突的指令,以及它们如何在不同情境下作出反应,我们还有很多未知之处,但深入研究和了解更多这方面的信息是非常重要的。
Thanks for reading!
Hope you have enjoyed and learned new things from this blog!
About the authors
Yennie Jun
AI researcher, data scientist, writer http://artfish.ai/
END
本期互动内容 🍻
❓如果让你设计一个实验来测试 AI 如何处理矛盾指令,你会如何设计?有什么独特的想法吗?
🔗文中链接🔗
[1]https://en.wikipedia.org/wiki/Cognitive_dissonance
[2]https://microsoft.github.io/Workshop-Interact-with-OpenAI-models/Part-2-labs/System-Message/
[3]https://docs.google.com/spreadsheets/d/1y1NjamUSqiLzgpHpUwu8cAcknuguMl1obtgj0Tzro9k/edit?usp=sharing
[4]https://openai.com/index/hello-gpt-4o/
[5]https://www.anthropic.com/news/claude-3-5-sonnet
[6]https://www.anthropic.com/research/many-shot-jailbreaking
原文链接:
https://towardsdatascience.com/dealing-with-cognitive-dissonance-the-ai-way-1f182a248d6d
评论