跳到主要内容

上下文长度是安全边界,而不仅仅是成本线

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数团队将上下文窗口视为一种预算。你有一百万个 token;明智地使用它们;更长的对话成本更高,运行速度也更慢。这种框架是正确的,但并不完整。上下文窗口也是一个攻击面,它的尺寸就像一个旋钮,随着数值的调大,会悄无声息地削弱你的安全控制。

这是没人会放在威胁模型中的失效模式。你的系统提示词(System Prompt)——包含护栏、工具使用规则和“绝不要做某事”条款的那些——位于上下文的最顶端。它的权威在那里是最强的。随着对话的进行,成千上万个 token 的用户轮次、工具输出和检索到的文档会堆叠在它之上。模型的注意力机制并不会平等地衡量所有这些 token。最接近生成点的指令在权重竞争中胜出。到了第四十轮,你的护栏并没有消失,但它们被埋没了。一个耐心的对手不需要聪明的越狱手段就能绕过它们,他们只需要一个足够长的对话。

这不是假设。这是 Transformer 处理长上下文时一种可衡量的属性,在研究文献中它有专门的名称,即使你的事故审查模板中还没有。

为什么指令会随距离而衰减

Transformer 阅读提示词的方式不像人阅读合同那样,赋予开篇条款永久的法律效力。它们在进行注意力计算(Attend)。模型生成的每一个 token 都取决于之前所有 token 的加权融合,而这些权重并不是均匀的。

有两个效应占主导地位。第一个是近因效应(Recency):上下文末尾附近的 token(最新的用户消息、最后的工具输出)承载了不成比例的权重,因为模型已经习得,最相关的信号通常就在那里。第二个是**“迷失在中间”(Lost-in-the-middle)问题**:处于长上下文中间位置的信息,其权重会相对于开头和结尾被低估。研究人员通过简单地将答案文档在 20 篇文档的上下文中从第一位移动到第十位,就测得在多文档问答中的准确率下降了 30% 以上。模型并没有忘记该文档,而是给它打了折扣。

诸如 RoPE 之类的位置编码将基于距离的衰减直接植入到注意力机制本身:相距较远的 token,其注意力得分会被机械性地降低。开头的 token 会从“注意力池”(Attention Sinks)中获得一些保护,这是一种将多余注意力路由到序列开头的习得习惯。但这种保护是不完整的,并且会与所有更新的信息竞争。

现在将这一点应用到你的系统提示词中。它起始于最强的位置——最开头。但随着上下文的增长,它不再靠近末尾,而最新鲜、最接近、权重最高的指令则是对话中刚刚出现的内容。其中包括攻击者编写的指令。护栏和攻击并不会被评估为“受信任的策略”与“不受信任的输入”。它们被评估为“陈旧且遥远”与“新鲜且接近”。

长对话是一场缓慢的越狱

上下文长度作为武器的最清晰演示是多样本越狱(Many-shot Jailbreaking)。这种技术简单得近乎侮辱:在提示词中填充数百个伪造的对话轮次,其中 AI 助手愉快地回答有害问题,然后在最后提出你真实的有害问题。没有奇特的 token 序列,没有对抗性后缀。只有数量。

它之所以奏效,是因为模型正在根据你提供的模式进行上下文学习(In-context Learning)。其效果随着样本数量呈明显的幂律增长,并且在测试的每一个主要模型系列中都具有普适性。在上下文窗口增长到足以容纳数百个示例之前,这种漏洞在任何实际形式上都不存在。能力和攻击面在同一个版本中同时降临。

应该让产品团队担心的版本比实验室攻击更微妙,因为它不需要单个精心制作的超长提示词。它只需要一段看起来正常的对话。对手花费 30 轮时间来建立一个框架——角色扮演、一个“假设”、一个具有不同规则的虚构系统——每一轮都会增加 token,将真实的系统提示词推离决策点,同时在注意力最强的地方强化一套竞争指令。第三十一轮提出了护栏禁止的事情。第三十一轮看起来没有任何攻击迹象。攻击其实是前 30 轮的上下文积累,而你的安全审查几乎肯定只测试了第一轮。

短提示词上的安全测试忽略了真实风险

对于任何签署过红队报告的人来说,这是令人不安的部分。大多数安全评估都在短提示词上运行。你编写一个对抗性输入,检查模型是否拒绝,然后记录通过。这只能告诉你,当护栏是上下文中最新鲜、最接近、权重最高的指令时,它能起作用——这是护栏发挥作用最容易的条件。

它几乎无法告诉你第四十轮的情况。

最近专门测试长上下文智能体的工作发现,安全状况并不仅仅是优雅地降级——它变得不稳定。宣称拥有百万级 token 窗口的模型在达到 10 万个 token 之前就表现出了严重的行为变化。拒绝率并没有按预期滑动;它们在不同模型之间朝相反的方向摆动。一个模型的拒绝率从大约 5% 爬升到 40% 随着上下文增长;另一个模型的拒绝率则从 80% 暴跌至 10%。这种分歧才是真正的发现。这意味着长上下文下的拒绝并不是由稳定的安全判断驱动的。它是由你无法通过短提示词测试预测的架构和训练瑕疵(Artifacts)驱动的。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates