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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470814.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt QProcess详解

1、概述 QProcess是Qt框架提供的一个类,它用于在应用程序中执行外部进程。QProcess提供了一系列函数来启动、控制和与外部进程进行交互,使得开发者能够在自己的应用程序中集成和调用其他程序或服务。这个类在需要执行系统命令、启动其他应用程序或进行文…

Appium配置2024.11.12

百度得知:谷歌从安卓9之后不再提供真机layout inspector查看,仅用于支持ide编写的app调试用 所以最新版android studio的android sdk目录下已经没有了布局查看工具... windows x64操作系统 小米k30 pro手机 安卓手机 Android 12 第一步&#xff1a…

《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明

参考 《element plus 使用 icon 图标(两种方式)》使用 icon 升级 Vue2 升级 Vue3 项目时,遇到命名时的实心与空心点差异! ElementUI: 实心是 el-icon-more空心是 el-icon-more-outline ElementPlus: 实心是 el-icon-more-fill…

WebSocket和HTTP协议的性能比较与选择

WebSocket和HTTP协议的性能比较与选择 引言: 在web应用开发中,无论是实时聊天应用、多人在线游戏还是实时数据传输,网络连接的稳定性和传输效率都是关键要素之一。目前,WebSocket和HTTP是两种常用的网络传输协议,它们…

【数据结构与算法】第11课—数据结构之选择排序和交换排序

文章目录 1. 选择排序1.1 直接选择排序1.2 堆排序 2. 交换排序2.1 冒泡排序2.2 快速排序(找基准值法1----Hoare版本)2.2.1 特殊场景12.2.2 特殊场景22.2.3 代码2.2.4 快速排序的时间复杂度 2.3 快速排序(找基准值法2---挖坑法)2.3.1 特殊情况1处理2.3.2 特殊情况2处理 2.4 快速…

MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中

MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQ…

UVC 输出视频格式修改和windows下数据分析

文章目录 前言一、UVC MJPEG视频帧描述符1.MJPG视频帧格式示例 二、UVC YUV2、NV12、M420、I420无压缩视频帧描述符GUID1.如YUV2数据参数初始为: 三、UVC Windows下UVC摄像头数据分析总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要&#…

大数据开发面试宝典

312个问题,问题涵盖广、从自我介绍到大厂实战、19大主题,一网打尽、真正提高面试成功率 一、Linux 1. 说⼀下linux的常⽤命令? 说一些高级命令即可 systemctl 设置系统参数 如:systemctl stop firewalld关闭防火墙 tail / hea…

更改Ubuntu22.04锁屏壁纸

更改Ubuntu22.04锁屏壁纸 sudo apt install gnome-shell-extensions gnome-shell-extension-manager安装Gnome Shell 扩展管理器后,打开“扩展管理器”并使用搜索栏找到“锁屏背景”扩展

GxtWaitCursor:Qt下基于RAII的鼠标等待光标类

有时我们需要以阻塞的方式执行一点耗时的操作&#xff0c;这时需要主窗口光标呈现忙状态&#xff0c;GxtWaitCursor正是为此设计&#xff1b;重载的构造函数&#xff0c;可以让光标呈现忙状态一定时间后自动恢复。 GxtWaitCursor.h #pragma once#include <QObject>// // …

Unity3D实现视频和模型融合效果

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示如下👉二、VideoPlayer播放视频(一)👉2-1、Hieraechy面板右键创建videoPlayer👉2-2、Assets面板右键创建RenderTexture👉2-3、把设置好的RenderTexture拖到videoPlayer里面还有本地视频视频�…

探索Pillow库:Python图像处理的瑞士军刀

文章目录 **探索Pillow库&#xff1a;Python图像处理的瑞士军刀**1. 背景&#xff1a;为何选择Pillow&#xff1f;2. Pillow是什么&#xff1f;3. 如何安装Pillow&#xff1f;4. 五个简单的库函数使用方法4.1 打开图像4.2 显示图像4.3 转换图像格式4.4 调整图像大小4.5 旋转图像…

HelloMeme 上手即用教程

HelloMeme是一个集成空间编织注意力的扩散模型&#xff0c;用于生成高保真图像和视频。它提供了一个代码库&#xff0c;包含实验代码和预训练模型&#xff0c;支持PyTorch和FFmpeg。用户可以通过简单的命令行操作来生成图像和视频。 本文将详细介绍&#xff0c;如何在GPU算力租…

JVM详解:JVM的系统架构

计算机语言大致可以分为两类&#xff0c;一直是编译性语言&#xff0c;典型的如C&#xff0c;他会先有编译器编译成可执行文件&#xff08;操作系统可读&#xff0c;不同的操作系统需要编译成不同的可执行文件&#xff09;&#xff0c;而另一种则是翻译性语言&#xff0c;这种语…

21. Drag-Drop拖放操作(二) - 文件、表格和树的拖放实现

本了继上节内容&#xff0c;讲述几种常用的拖放场景示例&#xff0c;包括文件、表格和树的拖放实现。 文件拖放 实现从系统目录拖放文件到App中。 自定义接收视图 自定义应用内部接收拖放的view视图类FileDragView&#xff0c;注册拖放类型&#xff0c;实现目标拖放协议NS…

力扣515:在每个树行中找最大值

给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3]提示&#xff1a; 二叉树的节点个数的范围是 [0,104]-231 < Node.val &l…

vivo 游戏中心包体积优化方案与实践

作者&#xff1a;来自 vivo 互联网大前端团队- Ke Jie 介绍 App 包体积优化的必要性&#xff0c;游戏中心 App 在实际优化过程中的有效措施&#xff0c;包括一些优化建议以及优化思路。 一、包体积优化的必要性 安装包大小与下载转化率的关系大致是成反比的&#xff0c;即安装…

数据库SQL——连接表达式(JOIN)图解

目录 一、基本概念 二、常见类型 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; 左连接&#xff08;LEFT JOIN 或 LEFT OUTER JOIN&#xff09;&#xff1a; 右连接&#xff08;RIGHT JOIN 或 RIGHT OUTER JOIN&#xff09;&#xff1a; 全连接&#xff08;FULL…

Sigrity SPEED2000 Power Ground Noise Simulation模式如何查看PDS系统的自阻抗操作指导

Sigrity SPEED2000 Power Ground Noise Simulation模式如何查看PDS系统的自阻抗操作指导 Sigrity Power SI Power Ground Noise Simulation模式可以用于PDS系统自阻抗分析,以下图为例 2D视图

uni-app移动端与PC端兼容预览PDF文件

过程遇到的问题 1、如果用的是最新的版本的pdfjs的话&#xff0c;就会报Promise.withResolvers 不是一个方法的错误&#xff0c;原因是Promise.withResolvers是ES15新特性&#xff0c;想了解可参考链接&#xff0c;这里的解决方案是将插件里的涉及到Promise.withResolvers的地…