RAG 检索是抑制幻觉最可靠手段,但同时将文档库变成了直达模型输出的攻击通道。PoisonedRAG 论文证明攻击者可向语料注入恶意内容操控模型回答,且模型无法审计信息来源真实性。
上下文污染与劣质检索数据
让模型基于检索文档进行 grounding 是目前最可靠的消除幻觉的手段。但这也意味任何能向你语料库写入内容的人,都获得了一条直接注入模型答案的通道。这是从两个角度看同一属性,你不可能只要前者而不接受后者。
当检索文本与模型在训练中吸收的内容相矛盾时,检索文本通常会胜出。这不是缺陷——这正是检索有效的全部原因。上下文中的信息是具体的、实时的、贴合当前请求的;而参数化知识是对一个语料库在某个时间点之前的压缩平均值。每个经过指令微调的模型都被训练为权重前者,因为一个会与自身上下文争论的模型,在摘要、文档问答和工具使用上都将毫无用处。
后果是:你的语料库不是一个提示(hint),它更接近于一种覆盖(override)。任何以权威声明形式进入上下文窗口的内容,都很可能以权威声明的形式出来,而且模型没有审核来源的机制,因为来源(provenance)根本不是文本的特征。
Zou、Geng、Wang 和 Jia 的 PoisonedRAG(2024)是代表性成果。其威胁模型是现实的:攻击者无法触碰模型或检索器,只能向知识语料库中注入少量文本——这正是你索引公共 wiki、客户可编辑的知识库、抓取的文档或用户提交内容时所处的情形。
攻击构建分为两个部分的优化。每个被污染的段落必须能针对目标问题被检索到(这是一个相似度目标),且在被检索到后必须能诱导出选定的答案(这是一个生成目标)。论文报告,在数百万级的语料库中,针对每个目标问题注入大约五个精心构造的段落,就能在他们测试的各种检索器和模型上实现很高的定向攻击成功率——实验中约为 90%。
关键数字是比例。五份文档在数百万中只是可以忽略不计的一小部分,这意味着语料库级别的完整性统计永远看不到它。攻击是有针对性的:它只改变一个问题答案,对其他一切毫无影响。聚合的质量监控在结构上对它视而不见。
Carlini 等人的 Poisoning Web-Scale Training Datasets Is Practical(2023)在预训练语料库层面提出了平行的观点。同样的教训,更高的代价:谁能写数据,谁就能影响输出。
大多数上下文污染是意外发生的,在这里两篇已发表的研究比任何直觉都更有用。
Shi 等人的 Large Language Models Can Be Easily Distracted by Irrelevant Context(2023)在算术应用题中加入了一句无关的句子,并报告了准确率的显著下降。无关材料不必具有误导性——仅仅存在就够了。
Cuconasu 等人的 The Power of Noise(SIGIR 2024)产生了反直觉的伴随发现:在一个 RAG 流程中,相关但不相关的文档——即优秀检索器在第 3 到 10 位返回的"差一点命中"——对准确率的损害比完全随机的文档更大。随机噪声容易被忽略;一个看似合理的邻居则不然。对于那种通过提高 top_k 来改善召回率的标准直觉来说,这是一个令人不安的结果,因为你增加的边缘文档恰恰就是一个"差一点命中"。
再加上长上下文退化中的位置效应——位于长上下文中间的素材比位于两端的内容使用可靠性更低——这就描绘出一幅图景:上下文是一种稀缺的、有顺序的资源,往里塞东西并非免费的。
问题更尖锐的版本:以指令形式书写的检索文本。Greshake 等人的间接 prompt 注入研究(2023)确立了其形态——有效载荷潜伏在文档、网页或电子邮件中,等待被检索,然后发出模型无法可靠地区分于你发出的指令。上下文窗口中的每个 token 对模型来说是同一种东西。
缓解方案是架构层面的,而非语言层面的。将检索内容保存在一个明确分隔的区域,在系统提示中告诉模型该区域内的所有内容都是要总结或引用的数据,而非要执行的指令,而且——最重要的是——不要授予响应自行触发副作用的权限。如果工具调用可以由检索文本的后果所发出,那么检索文本就拥有你的权限。在模型和任何不可逆操作之间放置确认或策略检查。
每个 chunk 标注来源,并附带信任层级。经过策展的文档和抓取的论坛帖子不应以平等身份进入上下文。按信任度而非仅按相似度排序,并在上下文中放入层级信息,以便模型可以权衡它,你的日志可以解释某个答案。
审查写路径,而不只是读路径。谁能添加文档?是否有 diff?一个 LLM 语料库如果写路径未经审查,就是一个生产依赖项而其写路径未经审查。
检索更少、更好的 chunk。鉴于"差一点命中"的研究结果,一个将十个候选削减到三个的重排器通常比提高限制更好。在你自己的集合上测量,而不是假设。
始终根据 span 验证 claim。Grounding 页面的蕴含门(entailment gate)无法捕获被污染的文档——因为 claim 确实由段落所蕴含——但它能捕获模型将污染段落与其他内容混合的所有情况,而这才是更常见的失败。
保留一个金丝雀集。用几十个答案已知的问题,按计划对实时语料库运行。定向污染只移动一个答案对聚合指标是不可见的,但如果碰巧有一个覆盖它的金丝雀就显而易见了——所以要为那些答案错误代价最高的问题选择金丝雀。
当质量下降时做消融。当摄入新来源后答案退化,重新用排除该新来源的方式运行评估。逐来源消融比任何数量的 prompt 工作都能更快地定位语料库回归。
Grounding: The Only Reliable Hallucination Fix
Types of Hallucination: A Taxonomy That Routes to a Fix
Long-Conversation Degradation