在大模型应用里,提示注入检测模型正在成为一道越来越常见的“安检门”。

用户的 Prompt 先经过一个轻量级安全分类器,如果被判断为正常,再交给后面真正的大模型处理;如果被识别为提示注入或越狱,则直接拦截。

相比让另一个大模型充当安全裁判,这类分类器参数更小、速度更快、成本也更低,因此很适合部署在每一次模型调用之前。

但这里一直存在一个很基础、也很容易被忽略的问题:

当一个护栏告诉我们“这是一条提示注入”时,它到底是怎么知道的?

它是真的理解了 Prompt 背后的攻击意图,还是只是因为见过太多类似的攻击,记住了 Ignore、previous instructions、rules 这些经常与攻击同时出现的词?

2026 年 9 月,乌拉圭共和国大学等机构的研究人员发表论文《Decoding Guardrails: XAI-Guided Perturbation Analysis of Prompt Injection Detection》,把研究对象对准了 Meta 的 Prompt Guard 2。

https://arxiv.org/pdf/2609.24801

他们没有急着设计一种更强的新攻击,而是用可解释人工智能(XAI)技术,试着把这个安全分类器的判断过程“照亮”。

研究最终发现了一个颇值得警惕的现象:

Prompt Guard 2 并不是简单的关键词过滤器,但它的判断仍然很大程度建立在“攻击通常是怎么说的”之上,而不一定真正理解“攻击到底想做什么”。

给护栏做一次“显微镜检查”

论文选择的 Prompt Guard 2,是 Meta Llama 生态中的提示注入检测模型。研究使用的是 8600 万参数版本,基于 DeBERTa-v2 架构,输入一段文字后,它会给出两个类别之一:

  • Benign,正常;

  • Injection,提示注入。

从外部看,这个过程非常简单。输入一句 Prompt,模型输出一个标签和对应概率。

但神经网络真正复杂的部分藏在中间:为什么是这个标签?

为了回答这个问题,作者引入了两种 XAI 方法:Vanilla Gradient 和 SHAP。不用深入公式,可以把它们理解成两种不同的“荧光笔”。

Vanilla Gradient 更关心的是:模型对哪些词最敏感? 如果稍微改变这个词对应的表示,最终判断会发生多大变化?

SHAP 则更像是在追问:模型这一次之所以做出这个判断,每个词分别出了多少力?

于是,原本只有一个“Injection”标签的黑箱判断,被拆成了一张词语重要性地图。某些词颜色更深,说明它们对“这是攻击”的判断贡献更大;另一些词则相对无关。

研究人员首先拿一条典型的 DAN 风格越狱 Prompt 进行分析。Prompt Guard 2 对原始文本给出的提示注入概率高达 0.9994。两种 XAI 方法虽然对很多词的排序并不完全一致,却都把 Ignore 识别为最重要的词之一。

乍看之下,这似乎印证了一个简单猜想:Prompt Guard 会不会就是看到 Ignore 这样的危险词就报警?

但实验很快表明,事情没有这么简单。

它不是关键词过滤器,却仍然依赖“词汇线索”

如果 Prompt Guard 只是一个高级版敏感词系统,那么它的判断应该高度依赖少数几个词。删掉这些词,判断就会立刻改变。

实际结果并非如此。

作者计算了模型特征重要性的分散程度。Vanilla Gradient 得到的指标为 0.118,SHAP 为 0.169,都说明模型关注的信息相当分散:不是某一个词决定了一切,而是许多词一起构成了“这是提示注入”的证据。

两种解释方法在排名靠后的词上也存在明显差异,说明其决策并不能简单归结为一张固定的“危险词表”。

随后作者按照 XAI 给出的重要性排名,一个接一个删除高权重词。

按照 Vanilla Gradient 排序,需要删除 25 个词,Prompt Guard 2 才会把攻击改判为正常;使用 SHAP,需要删除 27 个词;如果只删除 SHAP 判断为对 Injection 有正向贡献的词,也需要 21 次。

作为对照,随机删除通常要删掉 50 多个词才能达到类似效果。

这至少说明了一件事:

Prompt Guard 2 已经不是“看到一个 Ignore 就报警”这么简单。

它学到的是一个由多个词、上下文以及表达结构共同组成的分布式模式。

但“不是关键词过滤”,仍然不意味着“理解了攻击意图”。

这两者之间,还有很大一段距离。

意思没怎么变,判断却变了

删除词的实验其实有一个天然缺陷。

如果一直把一句攻击 Prompt 里的重要词删掉,总有一天,这句话本身就已经支离破碎,连后面的大模型都看不懂了。此时虽然护栏被绕过,却没有什么实际意义。

论文里的结果正是如此:在删除大约第 16 个词之后,底层 Llama 3.1 8B 已经不再受到原始越狱 Prompt 的影响;但 Prompt Guard 2 此时仍然认为它是一条攻击。要继续删除数个词,护栏的判断才最终翻转。

这其实揭示出了一个很重要的概念:

护栏的判断边界,与被保护大模型的行为边界,并不是同一条边界。

于是作者换了一种更有意义的做法。

不删掉攻击意图,只改变它的表达方式。

他们先用 XAI 找出 Prompt Guard 最敏感的词,再为这些词寻找语义相近的表达。每进行一次替换,就重新询问 Prompt Guard:现在你觉得它有多像攻击?

例如,一些原本高度显著的词被换成了近义表达。整个过程中,句子的核心含义尽量保持不变,但它越来越不像训练数据里那些典型的“攻击语言”。

结果非常明显。

经过 12 次词语替换、修改约 24% 的文本后,Prompt Guard 2 对 Injection 的置信度从 0.9994 降到了 0.4457,最终将原本的攻击判定为了正常输入。更重要的是,修改后的 Prompt 交给 Llama 3.1 8B 后,仍然保留了一定的越狱效果。

这时候,问题的性质就完全不同了。

不是把攻击删没了,所以护栏看不出来;而是:

攻击想表达的事情大体还在那里,只是换了一套说法,护栏的判断就发生了改变。

从换词到改写整句话,问题依然存在

如果只是替换几个词,我们还可以认为,这是模型对个别词汇过于敏感。

于是作者进一步把实验推到了句子层面。

原始 Prompt 被拆成 11 个句子,再让辅助大模型为每句话生成多种语义相近的改写,同时主动避开此前 XAI 找出的高显著词。比如原本直接表达“忽略此前指令”的句子,可以重新组织成“把此前内容放到一边,从这里继续”一类更自然的说法。

这里发生的已经不是简单的同义词替换,而是整个句法结构和表达方式的变化。

结果是,在改写前 9 个句子后,Prompt Guard 2 对 Injection 的置信度从 0.9994 降到了 0.3127,判断再次翻转。

不过值得注意的是,这一次虽然成功绕过了护栏,对底层大模型的越狱效果却明显下降了。论文进一步测试发现,原始 Prompt 和同义词替换后的 Prompt 效果比较接近,而经过大规模句子重写以后,能够产生有效危险输出的能力有所减弱。

这个结果反而让研究更加有意思。

因为它说明我们不能简单地把“护栏绕过率”当成全部。

真正值得关心的是两个条件的交集:

第一,护栏认为它是正常的;

第二,被保护模型仍然能够理解并执行其中的攻击意图。

这两条边界之间出现的缝隙,才是真正的安全盲区。

XAI 能告诉我们“改哪里”,却不能直接告诉我们“怎么改”

论文里还有一个很容易被忽略、但我认为很重要的细节。

既然 XAI 能告诉我们每个词的重要程度,那么是不是只要不断寻找“显著性最低”的替代词,就一定能快速降低风险分数?

作者专门试了一次。

答案是否定的。

他们仍然按照 Vanilla Gradient 找出的高重要度词进行修改,但这次不再选择“让整体 Injection 概率下降最多”的同义词,而是选择“替换后这个词本身显著性最低”的候选。

即使进行了 16 次替换,Prompt Guard 对攻击的置信度仍然高于 0.9990,几乎没有发生变化。

原因并不难理解。

Transformer 的判断不是:

“这个词贡献 0.3,那个词贡献 0.2,简单加起来就是结果。”

一个词进入新的上下文以后,它和前后词之间的关系、注意力分布以及隐藏表示都会一起变化。

因此,XAI 更像是一张地图,它告诉攻击者或者安全研究人员:

这里值得重点检查。

但真正决定“往哪个方向走”的,仍然是整个模型最终输出的变化。

换句话说,在这篇论文中:

XAI 提供搜索方向,分类置信度提供优化反馈。

两者结合以后,才构成真正有效的定向扰动。

护栏记住了“攻击长什么样”

前面的实验毕竟主要围绕一条 DAN 风格 Prompt 展开。如果只看这些实验,我们还不能得出“Prompt Guard 普遍依赖表层词汇”的结论。

所以作者又把分析扩展到一个包含 10000 条 Prompt 的数据集,其中 7000 条为正常样本,3000 条为恶意样本。研究人员从训练集中随机抽取 200 条正常 Prompt 和 200 条提示注入 Prompt,逐条计算 Vanilla Gradient 显著性。

结果开始显现出一个非常清晰的模式。

对于被 Prompt Guard 2 正确识别出来的提示注入,高显著词大量集中在:

previous、instructions、sensitive、information、confidential、access、restrict、ignore……

这些词并不是随机出现的。

它们恰恰就是我们过去几年里最熟悉的提示注入语言:覆盖此前指令、改变角色、突破规则、访问敏感信息。

而在抽取的 200 条恶意样本中,有 105 条没有被 Prompt Guard 2 检测出来。需要强调的是,这只是特定数据集和抽样条件下的结果,不能直接理解成 Prompt Guard 2 的总体漏检率。但研究这些漏检样本后,作者发现,它们的语言特征明显不同:高显著词更加普通,攻击方式也更多偏向信息获取,而不是传统的“忽略之前指令”“扮演另一个角色”式攻击。

于是整篇论文里最值得思考的答案逐渐浮现出来:

Prompt Guard 2 很可能非常擅长识别“它熟悉的攻击长什么样”,却没有同等程度地学会识别“什么叫攻击意图”。

这两者看起来很接近,实际却有本质区别。

这很像学生记住了题型,却没有真正理解题目

可以用一个更简单的类比理解。

假设我们训练一个学生识别数学应用题。

训练集中,“鸡兔同笼”总是出现“鸡”“兔”“脚”“笼子”这些词。久而久之,学生看到这些词就知道该用某一种解法。

从考试成绩看,他似乎掌握得很好。

但有一天,我们把题目换成机器人:一种机器人有两个轮子,另一种机器人有四个轮子,给出总数量和轮子数量,问两种机器人各有多少。

数学结构完全没有变化。

如果学生突然不会了,那就说明他过去真正学到的不是“二元约束关系”,而是“看到鸡和兔,就套这道题”。

提示注入检测模型面临的是类似的问题。

如果模型真正学习的是攻击意图,那么:

“忽略之前所有指令”

和

“从这一刻起,把此前给你的要求放到一边”

虽然字面相差很大,本质上却应该落入非常接近的风险表示。

而如果模型主要依靠训练数据中反复出现的语言模式,那么只要攻击者逐渐远离这些熟悉表达,检测能力就可能下降。

这也是为什么论文把问题指向了一个比“关键词过滤”更准确的概念:

Lexical Dependency,词汇依赖。

它不是简单敏感词匹配,而是一种更复杂、更柔性的“语言模式匹配”。

护栏与大模型拥有两套不同的世界观

这项研究还提示了另一个值得单独讨论的问题。

今天很多大模型系统实际上由两个完全不同的模型共同完成安全判断:

前面是一个只有数千万或数亿参数的 Prompt Injection 分类器,负责判断“这句话是不是攻击”;后面则可能是一个数百亿、数千亿参数的大模型,负责真正理解用户要求并执行任务。

它们的参数规模不同,训练目标不同,数据不同,对语言的理解能力也不同。

因此它们天然可能拥有两套不同的决策边界。

对于同一句话:

护栏看到的是:“不像我认识的攻击。”

而后面的 LLM 看到的却可能是:

“我完全理解你想让我做什么。”

于是安全系统中出现了一个非常危险的区域:

Guardrail 认为 Benign,但 LLM 仍然能够恢复出攻击意图。

从这个角度看,未来评价一个护栏,不能只看它在静态数据集上的 Accuracy、Recall 或 F1,也不能只问:

“已知攻击里挡住了多少?”

还应该进一步问:

当攻击表达发生语义保持的变化时,护栏的安全边界能否和后端模型的行为边界保持一致?

这可能比单纯继续堆更多攻击样本更重要。

“解释模型”本身,也成为了一种双刃剑

XAI 原本是为了让机器学习模型更加可信而发展出来的。

模型为什么拒绝了这笔贷款?为什么把这张医学影像判断为异常?为什么把这句话判成风险内容?

我们希望通过解释模型内部的判断依据,发现偏差、修复错误,也方便人类审计。

但到了安全场景,透明度出现了另一面。

一旦我们可以准确知道:

模型最看重哪些词、最依赖哪些结构、哪些位置对最终分类最敏感,

我们实际上也得到了一张模型决策边界的局部地图。

对于防守者,这张地图可以帮助发现模型盲区;对于攻击者,它同样可以告诉他应该从哪里修改输入。

论文因此提出了一个值得重视的矛盾:用于提高模型透明度的解释方法,也可能降低构造针对性绕过样本的成本。

这并不意味着安全模型就应该变成一个彻底的黑箱。

恰恰相反,它意味着 XAI 在安全场景中的价值可能首先不是“向所有人解释模型”,而是作为一种内部红队和诊断工具。

用它主动寻找自己的薄弱点,再把这些薄弱点重新送回训练、评测和监测体系。

下一代护栏,需要从“识别表达”进一步走向“识别意图”

这篇论文并没有给出一个能够彻底解决问题的新护栏架构,但它实际上指出了几个非常明确的工程方向。

第一,不要只用原始攻击样本训练护栏,而要训练“语义等价类”。

如果一条提示注入可以有几十种、几百种表达,那么训练数据的单位就不应该只是单条 Prompt,而应该是:

同一个攻击意图在不同词汇、句法、语言和上下文中的一组变体。

第二,评测也应该从静态样本准确率走向语义保持下的鲁棒性评测。

一条 Prompt 换几个近义词、重新组织句式、换一种语言表达之后,如果含义基本不变,检测结果是否仍然稳定?这种一致性本身,就应该成为护栏的重要指标。

第三,可以反过来把 XAI 纳入安全测试流水线。作者也提出,Token Attribution 可以帮助进行针对性数据扩充、阈值校准和分布漂移监测,用解释结果主动寻找模型的词汇盲区,再将生成的对抗样本用于训练和 Benchmark。arXiv

从这个角度看,XAI 并不只是“解释模型为什么这么判断”。

它还可以成为一种:

自动发现护栏认知盲区的方法。

这篇论文也没有证明“护栏根本不懂语义”

当然,这项工作的结论也不应该被过度放大。

论文中最主要的词语删除、同义词替换和句式重写实验,仍然主要围绕一条代表性的 DAN 风格 Prompt 展开;跨语言实验也只进一步测试了西班牙语。

虽然数据集级分析提供了更广泛的证据,但还没有真正完成成千上万条 Prompt 的自动扰动和大规模绕过测试。

作者自己也把自动化这套实验流程、扩展到更大规模评测列为未来工作。

更重要的是,论文测试的是 Prompt Guard 2,而不是所有提示注入检测器。因此不能简单得出“所有护栏都只是关键词模型”的结论。

更准确的说法应该是:

这项研究提供了一组相当有说服力的证据,说明轻量级提示注入分类器可能在很大程度上依赖词汇和语言模式,而这种依赖会形成可以通过语义保持改写暴露出来的盲区。

它不是给这个问题画上句号,而是提供了一种观察护栏的新方法。

真正需要守住的,不是一组词,而是一种意图

回到文章开头的问题:

护栏真的理解了 Prompt 里的攻击意图吗?

这篇论文给出的答案并不是简单的“是”或者“不是”。

Prompt Guard 2 显然已经比传统关键词系统复杂得多。它不会因为一句话里出现某个词就机械报警,而是综合很多分散的语言线索做判断。

但另一方面,当研究人员保持大体语义不变,只是逐渐改变词汇和句式时,它的判断又会明显动摇。

这说明在“识别关键词”和“理解意图”之间,其实存在很大一片灰色区域。

今天很多安全分类器已经离开了最原始的关键词时代,却还没有真正抵达语义理解的终点。它们更像是处在中间:学会了非常复杂地识别攻击“长什么样”,却还没有完全学会攻击“是什么”。

而随着大模型自身越来越擅长理解隐喻、改写、多语言和长上下文,这种差距反而可能变得更加重要。

因为未来真正难防的 Prompt,未必会带着那些我们已经熟悉的“攻击词汇”出现。

它完全可能说得自然、正常,甚至彬彬有礼。

但它想做的事情,仍然没有改变。

对下一代大模型护栏来说,真正需要守住的,也许从来都不是那些词,而是词背后的意图。

声明:本文来自模安局,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。