指令层级:训练大型语言模型优先处理特权指令

发布于:2025-04-10 ⋅ 阅读:(107) ⋅ 点赞:(0)

The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions

本文讨论了语言模型在执行应用程序时面临的安全风险,尤其是对抗性注入攻击(jailbreaks)。作者提出了一个指令层次结构(instruction hierarchy),将系统消息放在优先级较高的位置,用户消息放在优先级较低的位置,以使模型能够优先遵守系统消息的指令,以减少LLM被攻击的风险,提高模型的鲁棒性。通过合成数据生成和上下文浓缩的原则,作者训练了模型来执行不同类型的操作,包括开放域任务和闭合域任务。实验结果表明,训练后的模型能够更好地遵守指令,并拒绝执行有害操作。作者还提出了改进模型的几种方法,包括改进训练数据、扩展模型架构和进行更多的对抗性训练。最后,作者感谢其他研究人员的反馈和讨论,并希望继续改进模型的性能。
论文:The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions
地址:https://arxiv.org/pdf/2404.13208
The Instruction Hierarchy

关键要点:

  1. 研究提出了一种训练语言模型以优先考虑特定指令的方法。
  2. 方法包括生成带有复合请求和分解指令的数据,并将其放置在不同的层次中进行训练。
  3. 对抗性攻击被用于生成数据集,其中包括对系统提示提取等攻击。
  4. 方法提高了模型的鲁棒性和通用能力。
  5. 研究者还观察到一些回归现象,但相信可以通过进一步收集数据来解决。

快速浏览:

大模型安全在工业界,特别是AI模型落地时,是非常重要的一个考量。例如之前很火的prompt攻击方式“奶奶漏洞”,通过让GPT扮演奶奶睡前讲故事,可以套路GPT,让他说出某些正版软件的密钥。很显然这会给LLM公司带来法律风险。虽然这种直接注入漏洞已经被修复了,但是现在LLM结合工具/Agent之后,会有更多间接注入攻击让我们的LLM没有按照希望的方式去工作

为了解决这个问题,这篇研究提出了一种指令层次结构instruction hierarchy)。它明确定义了不同指令的优先级,以及当不同优先级的指令发生冲突时,LLM应该如何表现。通过这种方式,LLM会区别开系统指令和来自不受信任用户的指令之间的优先级,而不是像之前一样对所有的prompt都一视同仁。再根据优先级冲突时制定的策略以规范LLM的表现,从而减少LLM被攻击的风险。

这篇研究还提出了一种自动数据生成方法,来演示这种层次指令的跟踪行为,从而教会LLM有选择地忽略权限较低的指令。实验表明在几乎不影响LLM的标准能力的情况下,极大地提高了模型的鲁棒性。特别是即使在对训练期间从未见过的攻击类型也是如此!说明这种方法在应对未知的攻击时也是有一定的泛化性的。

1. 引言(Introduction)

背景:现代LLMs不仅作为自动完成系统,还可能成为具有代理能力的应用程序,如网页代理、电子邮件秘书、虚拟助手等。然而,这些应用的广泛部署存在被敌手欺骗执行不安全或灾难性动作的风险。例如,通过提示注入攻击,LLM驱动的电子邮件助手可能被用来泄露用户的私人邮件。

问题:敌手可以通过各种攻击手段,如越狱、系统提示提取和直接或间接的提示注入,来攻击应用程序或用户,例如绕过开发者限制、暴露公司知识产权、泄露私人数据等。

2. 指令层级(The Instruction Hierarchy)

概念:指令层级明确定义了在不同优先级指令冲突时模型应如何行为。例如,系统消息(由应用开发者提供)应优先于用户消息,用户消息优先于第三方内容。

方法:通过自动化数据生成方法来演示这种层级指令遵循行为,教会LLMs有选择地忽略低优先级的指令。

指令层次结构

LLM之所以会受到#prompt注入#、#越狱#等攻击,主要原因是LLM通常认为系统提示与来自不受信任的用户和第三方的文本具有相同的优先级。这样当然会导致LLM把不安全的prompt当成和系统提示同样重要的指令来工作。从而给了prompt攻击以可趁之机。以下是个例子:

图片

从上图可以看到,通过工具输出(Tool Output)间接实现了prompt注入攻击。背后的机制在于LLM缺乏指令特权instruction privileges)。即缺乏对指令优先级的定义。因此这篇研究将不同类型的指令赋予了不同的优先级,具体而言:系统消息优先于用户消息,用户消息优先于第三方内容(如工具输出) 。如下图所示:

图片

理想模型行为

当存在多个指令时,较低特权的指令可能与较高特权的指令对齐不对齐理想的模型应该根据与较高级别指令的一致性,有条件地遵循较低级别的指令。

  • 对齐指令,即与更高级别的指令具有相同的约束、规则或目标的指令。因此需要LLM遵守这一指令;
  • 不对齐指令,即和更高级别的指令有冲突的指令。例如上图中ToolOutputs中的Web Reuslt1并没有回答用户问题(这是系统级指令),而是尝试提取对话记录。我们希望LLM忽略,或者拒绝遵守这种提取对话记录的指令。

读到目前为止,这篇研究的动机还是很直观的,接下来我们一起看看具体是怎么做的吧~

数据生成方法

为了有效地将指令层次结构融入LLM,需要用具有层次结构的指令数据微调LLM,所以本篇提出了创建层次结构的指令训练数据的方法,该方法使用了上下文合成Context Synthesis)和上下文忽略Context Ignorance)两种策略:

  • 上下文合成Context Synthesis):对于对齐指令将指令分解成更小的部分,然后将分解后的小指令放置在层次结构的不同级别,微调模型来预测真实的响应;(例如将“用西班牙语写一个20行的诗”分解成更小的指令片段,如“写诗”、“使用西班牙语”、“使用20行”,然后将这些指令放到不同的层级中。)
  • 上下文忽略Context Ignorance):对于未对齐指令,会采取完全相反的方法:训练LLM,当它从未见过低级别的指令时,生成相同的答案。

生成数据时,注意不要触发过度拒绝行为,即对于对齐的低层次指令,模型也拒绝遵守或执行。因为这会极大地损害模型的指令遵循能力。

对于对齐的指令,我们将指令分解成更小的部分,然后放入层次结构的不同级别。如下图所示,将一段定期检查银行状态的指令放入用户层级中。对应LLM而言,应该表现的就好像它在系统消息中看到了整个组合指令(System Message + UserInput)一样;所以它的输出也会提醒用户定期检查。

图片

对于没有对齐的低层次指令(例如用户的输入),我们让模型的输出为拒绝访问或者直接忽视,如下图所示,用户层级试图直接prompt注入攻击,LLM应该忽略或者拒绝回答,所以它输出我无法帮助您。

图片

注:由于篇幅有限,其他领域\攻击方式的数据构造模板请阅读原文哦。

通过这两种策略,我们就可以构建层次结构的指令供大模型微调啦。接下来看看实验是怎么做的。

实验结果

实验方法:有监督微调+基于人类反馈的强化学习(SFT+RLHF)

模型:GPT-3.5 Turbo

数据:上述生成数据

Baseline LM:为了评估指令层次结构的有效性,选择了一个类似的模型做微调,但是它的数据没有采用指令层次结构。

研究使用监督微调和基于人类反馈的强化学习,对上述数据微调了GPT-3.5 Turbo以观察模型的鲁棒性,作为对比,作者还微调了一个类似的模型作为BaselineL。唯一的区别在于Baseline LM没有使用层序结构的指令作为训练数据,而是正常的指令数据。下面我们来看看结果:

主要结果

如下图所示,指令层次结构训练的模型在各种攻击中具有显着更高的鲁棒性。最高提高了63.1%

图片

泛化结果

在训练期间,虽然没有为越狱攻击(jailbreaks) 构建指令层次结构的训练数据。但是根据下图的实验结果,依然将鲁棒性提高了34%,这说明LLM学会了指令层次的结构,对未曾见过的prompt也有一定的泛化性

图片

过度拒绝结果

由于上文提到的创建训练数据的方法会比较容易导致过度拒绝的问题,所以需要和BaselineLM比较下大模型遵循指令的性能。如下图所示,在遵循不冲突的指令的性能方面,基本上和Baseline匹配,没有出现模型行为的明显下降

图片

总结

这篇论文提出了一种新的框架,即指令层级,用于提高 LLMs 的安全性和鲁棒性,同时保持其遵循正常指令的基本能力不受损害。并且通过实验验证了他们的方法比当今LLM的现状有了巨大的进步。


OpenAI 的研究者将基于 LLM 的产品使用总结分为三种情形

  1. 应用的构建者:定义了LLM 应用的底层指令和逻辑
  2. 产品的用户:LLM 产品的实际使用者
  3. 第三方输入:工具或接口返回的内容,作为 LLM 的输入

而攻击的底层逻辑往往是在以上三方之间引入冲突(conflicts),比如产品用户输入的指令要求覆盖应用构建者的原始指令。

常见攻击形式可以概括为如下三类

  1. 提示注入(Prompt Injections):这种攻击的目标不是 LLM 本身,而是基于 LLM 构建的应用(比如邮件助手的例子),因为基于 LLM 构建的应用往往需要给 LLM 一定的权限,使它可以访问重要的数据或执行现实世界的操作
  2. 越狱(Jailbreaks):这种攻击形式主要针对的是 LLM,让其脱离原本在训练中学到的安全行为,但并不一定与应用指令冲突。下面的例子是当 LLM 作为有帮助且无害的聊天助手应用时,攻击者让模型“帮助”他给奥巴马写钓鱼邮件(写钓鱼邮件这个行为往往会在训练阶段就被对齐抑制掉):图片
  3. 系统消息提取(System Message Extraction):应用构建者通过 System Message 来定义应用的行为和逻辑,这部分内容有可能具备很高的商业价值或携带隐私信息(如帐号密码):图片