RAG 知识库投毒的检测与缓解:四个关口的防线
污染知识库等于污染模型回答。投毒的门槛只是往检索源里塞一篇文档,防线因此不在模型侧,而在入库、检索、生成、引用四个关口。含入库扫描流水线代码。
- 1理解「背景:攻击面从模型移到了语料」的关键结论与适用边界
- 2理解「攻击链」的关键结论与适用边界
- 3理解「四道关口与检测/缓解」的关键结论与适用边界
导读由分类与正文章节自动整理(AI 辅助),具体以正文为准。
- 背景:攻击面从模型移到了语料
- 攻击链
- 四道关口与检测/缓解
一句话结论: RAG 把"模型说什么"外包给了知识库——于是污染知识库就等于污染模型回答。投毒的门槛不是黑进模型,而是往检索源里塞一篇文档;防线也因此不在模型侧,而在入库、检索、生成、引用四个关口。
背景:攻击面从模型移到了语料
RAG(检索增强生成)的默认假设是"知识库内容可信"。这个假设在开放场景下不成立:知识库的喂养来源往往是网页爬取、用户上传、工单导入、第三方文档同步——每一条都是攻击者的可写入口。
学术界已给出量化验证:
- PoisonedRAG(Zou 等,2024):在含数百万文本的知识库中,每个目标问题仅需注入 5 篇投毒文本,即可让主流 LLM 以约 90% 的概率输出攻击者预设的答案;
- 语料投毒注入对抗文本(Zhong 等,2023):在检索语料中注入对抗性段落,控制模型对目标问题的检索与回答;
- AgentPoison(Chen 等,2024):把投毒思路扩展到 Agent 的长期记忆/知识库,投毒一条记忆即可长期劫持 Agent 行为。
共同结构:投毒成本极低(几篇文档),触发极其定向(只对特定问题/实体生效),常规评测(问答准确率抽样)几乎测不出来。
攻击链
攻击者获取语料写入面(评论区/上传/爬取的外部页/第三方同步)
→ 构造投毒文档:正常内容 + 针对目标问题的"答案注入"
→ 文档通过入库管道进入向量库
→ 受害者提问命中投毒文档(对抗文本提升检索排名)
→ 模型把投毒内容当作权威知识输出
→ 错误/恶意结论被引用、被执行、被写回下游系统
投毒文档长什么样
针对"X 产品的默认管理员密码是什么"这类问题,投毒文档通常:
- 正文前 80% 与正常文档无异(通过语义相似度匹配);
- 在关键位置嵌入与目标问题高度相似的问句 + 预设答案(提升检索得分);
- 有的直接优化对抗后缀,让 embedding 空间中与任意目标问题都接近。
对"操作指引型"知识库,投毒目标更危险:篡改运维手册里的命令、把安全配置文档改成危险默认值——错误答案在这里不是降智,是事故。
推荐阅读
更多文章 →继续系统学习
把本文知识点放进学习路径,按阶段继续实践。


