被投毒的 RAG 反而更自信:从注意力向单篇文档塌缩这一信号抓出投毒攻击

When Context Bites: Detecting RAG Poisoning via Document-Level Attention Collapse

Yingtao Ren, Ziyi Zhao, Yiwei Fu, Xiao Luo, Yu-Cheng Chang, Chin-Teng Lin

cs.CR

2026-08-07

对抗文档让 LLM 输出更流畅更自信,不确定性检测因此失效;D-SCAN 盯住注意力向投毒文档集中、文档级熵下降的内部信号,三个多跳问答基准上 AUC 0.83~0.93,超过现有检测器。

这篇在解决什么

RAG(检索增强生成)先检索文档再让 LLM 作答,攻击者只要往知识库里塞几篇对抗文档,就可能操纵模型输出。此前的检测多在输出侧打转:看困惑度、看多次采样的一致性。这篇先给这类方法判了死刑:精心优化的对抗文档恰恰让输出更流畅。攻击文档是拿梯度优化出来的,目标就是最大化模型生成特定答案的概率,于是被投毒的回答平均 token 概率更高、困惑度更低,比干净回答看起来还自信。论文把这叫 blind confidence(盲信):不确定性信号不仅失灵,方向都是反的。

方法

作者把视线从输出移到生成过程的内部:注意力分布。干净生成时注意力摊开在多篇相关文档上;被投毒时注意力被劫持,集中到投毒文档上。论文用两个量刻画:

这个信号为什么值得信?对抗文档的存在意义就是让模型把生成概率质量压到它身上,注意力集中是攻击起效的机制本身,不是副产品。所以哪怕攻击没改成最终答案,塌缩信号照样在,这给了检测一个不依赖攻击成败的锚点。

D-SCAN(Document-level Signal Collapse Analysis)把这些指标做成一个轻量检测器:token 级和文档级的注意力熵、方差、密度作为特征,训一个线性分类器。推理时顺路取注意力算特征,不用额外采样,单次生成就够。

结果

设置:三个多跳问答基准(HotpotQA、2WikiMultihopQA、Musique),E5-base-v2 从 2018 年英文维基百科检索 top-5 文档,投毒样本是把两篇良性文档换成 PoisonedRAG 生成的对抗文档。检测器在四个开源模型上测,主结果挂 Llama-3.1-8B-Instruct。

方法2Wiki AUCHotpotQA AUCMusique AUC
Qwen2.5-7B(零样本判别)0.8540.7880.850
HaloScope0.6560.6880.806
ReDeep0.8400.7950.767
RevPRag0.7530.7130.741
D-SCAN0.9340.8330.906

D-SCAN 在三个基准上全部领先,最好的单基准到 0.934。按攻击成败拆分后,失败组(模型没吐出目标答案)的检测保真度依然高。敏感性实验里把生成采样数从 10 砍到 1,AUC 还有 0.800.88,说明不用靠多次采样撑性能。消融显示去掉文档级注意力特征比去掉 token 级掉点更多,证实跨文档的注意力劫持才是主导信号。

一个副产物:直接让 LLM 零样本判别的路线上,更小的 Qwen2.5-7B 反而显著强过 Llama-3.1-8B 和更大的 Qwen2.5-14B、Qwen3-30B,论文称之为 inverse scaling,检测能力不随参数量涨。

为什么重要

对做 RAG 的人来说这是换检测思路的实证:输出侧的困惑度、一致性在对抗设定下会反向失效,内部注意力信号更稳。方法本身便宜,一个线性分类器加现成的注意力,适合挂进自托管 RAG 管线的推理路径里做在线告警。代码已开源(github.com/yingtaoren/D-Scan)。界限也清楚:它要读模型内部,只适用于自托管或能拿到注意力的开源模型,闭源 API 场景用不上。

局限与存疑

论文没有单独的局限一节,但从设定能看出边界:只测了 PoisonedRAG 这一种攻击生成方式,其他注入手段(启发式文本、别的优化方法)没验证;只测了多跳问答,别的 RAG 应用形态没碰;闭源 API 拿不到注意力,直接不可用。还有一个更实际的问题论文没讨论:检测器是按「本库投毒分布」训的线性分类器,投毒文档数量从两篇变多、攻击者刻意做注意力分散化对抗,阈值还稳不稳,未知。

术语

原文与代码

相关论文

全部论文解读