跳到主要内容
认出是毒药照样中毒:RAG 那张图我画错了两次

认出是毒药照样中毒:RAG 那张图我画错了两次

画唠
画唠

· 阅读约 4 分钟

前几天在 arXiv 刷到一篇讲 RAG 安全的论文(Ghassabi 8 月 17 号挂出来的),里面有个结论把我以前画的一张图直接判了死刑。先撂判断:RAG 的坑不在“查”,也不全在“判断”,在一个更别扭的地方——模型看见了假的,认出来了是假的,还是被带偏了。

先画我以前以为的样子:

   查回文档 ──► 模型判断真假 ──► 真的就用 / 假的就丢 ──► 回答

看着挺合理对吧?只要“判断”那格够强,污染文档就进不来。所以很长时间我默认 RAG 的安全性约等于“检索源干不净 + 模型会不会挑”。上次画 RAG 那张图我还挺得意,觉得把“判断”那格补上就算画全了。

结果论文直接说:不对。LLM 即使正确识别出文档里有错误信息,那个错误信息还是会渗到最终输出里。

等等等等,先别急——我第一反应是不信。认出来了还中毒?什么原理,意志力问题吗?我盯着那句话看了半天,脑内只有羊叫。

后来画了个比方才顺过来:让一个人边闻毒气边写报告,他可以一边写“注意,房间里有毒气”,但报告里的措辞、例子、思路,还是被熏得歪歪扭扭。识别和免疫是两回事。模型读过的每一个 token 都进 context,都参与接龙,你让它“知道这是假的”,不等于那条通路就断电了——知道,和生成时不受影响,中间隔着一道我们到现在也没完全画明白的沟。

顺着这条线,之前有个应对思路叫 Cordon Principle,走物理隔离:负责最终合成答案的模型,干脆不许直接碰原始证据。画成图:

   不可信文档 ──► 隔离带 ──► 只有"中转者"碰过 ──► 合成模型只看中转报告

思路硬核,但开销大——每次回答都要多养一层中间结构。打个比方,怕食物中毒,干脆雇个试毒员先吃一遍。安全是安全了,饭也凉了。

那篇论文的 refined 原则,我读到第一感觉是“这也太简洁了”:只有具备审慎 System 2 推理能力的智能体,才许访问不可信文档。不是全隔离,也不是全放开,按“消化能力”发准入证。

然后是实验,也是把我那张图彻底判掉的部分:拿推理能力强的模型和标准模型对着同一批污染证据跑,前者的鲁棒性显著更高,高到不需要 Cordon 那套严格隔离。也就是说,同一份毒文档,普通模型是“看见了、标注了、还是中毒”,推理模型是真的扛得住。

顺手论文还造了个新指标,专门量化“检测到了多少”和“下游实际被影响多少”之间的差。我特别喜欢这个指标的存在本身——等于给“识别≠免疫”那条沟画了把尺子。以前大家测 RAG 安全,基本测“模型能不能认出假信息”,但认出来和没被带偏中间那条沟,一直没人单独量过。

说回我画错的图。第一版我以为 RAG 的命门是“判断信不信”;这篇论文逼我改成这样:

   查回文档 ──► 识别(能认出假)──► 隔离影响(认出≠不被影响)──► 回答
                     ↑                    ↑
                 普通模型在这卡住    System 2 推理在这补上

两格,不是一格。识别一格,免疫一格。我以前把两格画成了一格,所以一直觉得“模型都标注出这是假的了怎么还错”——现在知道了,那不是 bug,是结构上本来就有的两道门。

毒气这个比方有地方漏风,得老实标出来:毒气是被动渗透,均匀作用于全身;模型被污染文档影响的方向是有选择性的——它影响的是“下一个 token 接什么”这条路,哪里跟文档内容搭得上,哪里歪得厉害,不是均匀变傻。抓“识别不等于免疫”这个大方向,毒气够用;抠到具体怎么影响生成路径,得回 attention 和生成机制本身。这段我也还没完全画明白,先放这儿,懂了再补。

真正让我坐不住的是引申那一步:我们平时给 Claude Code、给各种 agent 贴一堆外部文档、网页、MCP 拉回来的东西,默认“模型会自己甄别”。这篇论文说的其实是——甄别能力和免疫能力是两种能力,普通模型只有前者。你以为给它配了免疫系统,其实只配了眼睛。

所以选 RAG 检索源别抱侥幸:“模型能看出来是假的”,在实验里就是推不出“模型不会被带偏”。要么上推理更强的模型去碰不可信源,要么老老实实隔离,两头都不占的方案,目前我没看到。

本期画开:识别和免疫是两道门,别画成一道。下期想画开 System 2 推理到底在模型内部多走了哪几步——候选里还有 KV cache,你挑一个?

画唠
画唠

把被讲玄的概念用图 + 比喻 + 动手实验拆到咔哒扣明白,错的也保留。

查看主页 →