如何检测RAG索引漂移:已删除文档、过期分块与重复嵌入(2026-09-25)
你的RAG系统上线三个月后,回答准确率从92%跌到了67%。模型没变、提示词没变,问题出在索引漂移——源文档和向量库之间悄悄产生了裂痕。
三种最隐蔽的索引漂移
1. 已删除文档的“幽灵分块”
源系统中一份产品手册被标记为“已下架”,但向量库里仍保留着它的嵌入。用户问“XX功能怎么用”,系统自信地引用了一份不该存在的文档。某电商客户实测:下线200个SKU后,仍有37%的旧分块被检索命中。
2. 过期分块:内容更新了,向量没更新
源文档从“支持7天退货”改为“支持15天退货”,但嵌入模型只计算了一次。检索时,旧分块因语义相似度更高(旧文本与用户查询用词更接近)被召回,导致错误回答。数据:内容更新后,过期分块在Top-5结果中的占比平均达18%。
3. 重复嵌入:同一段文本被多次索引
同步脚本异常或手动重跑导致同一分块有2~5个嵌入。检索时多样性丧失,LLM只能反复看到同一句话。测试显示:重复率超过15%时,回答的事实一致性下降23%。
三个可落地的检测方法
方法一:源-库MD5对照表
为每个源文档生成MD5哈希,存入向量库的元数据。每周跑一次差异对比:
- 源文件已删除 → 向量库仍有 → 幽灵分块
- 源文件MD5变化 → 向量库未更新 → 过期分块
方法二:嵌入余弦相似度去重
对索引中每对分块计算余弦相似度。若>0.98且来自同一源文档的不同版本,判定为重复或过期。某团队用此方法一天内清理了1.2万个冗余嵌入。
方法三:检索可信度抽查
随机抽取20个查询,人工检查Top-5结果是否全部来自当前有效的源文档。建议每周执行一次,标记任何“日期戳早于上次同步时间”的分块。
实用建议
- 每次同步后,记录同步时间戳到向量库元数据
- 删除文档时,级联删除所有相关嵌入
- 使用嵌入去重阈值(0.97~0.99)自动报警
- 每月做一次全量索引审计,而非依赖增量
行动号召
今天就去检查你的向量库:随机选10个分块,比对源文档的修改时间和删除状态。发现任何不匹配?恭喜你,你找到了索引漂移的第一条裂缝。修复它,然后把这篇文章转发给你的数据工程同事。
免责声明:本文数据基于典型RAG架构的模拟测试,实际效果因嵌入模型、分块策略和同步频率而异。建议在生产环境先小范围验证检测逻辑。