知识库里的文档被删除、权限被收回或内容被修订后,用户仍从 AI 得到旧答案,常被误认为“模型记住了”。更常见的原因是向量索引、分段缓存、摘要、重排序结果或会话记忆没有同步失效。只删原文件不会自动清理所有派生表示。
先画出内容生命周期
一份文档从上传到回答,可能经过提取、分段、嵌入、索引、摘要、缓存和引用卡片。每一步都应带有源文档 ID、版本、租户和权限快照。删除或权限变化发生时,系统才能据此找到所有派生对象,而不是全库模糊搜索关键词。
删除与更新要区分处理
删除意味着检索和引用都不应再返回内容,必要时还要清除派生摘要;更新意味着新版本生效,同时让旧向量和缓存退役。对合规要求较高的场景,记录清理完成时间和失败重试,避免把异步任务“已提交”误当作“已清除”。
用负向检索验证而非只看队列
建立包含唯一短语的测试文档,分别测试删除、权限收回和覆盖更新。验收时不仅查询向量检索,也要让实际 RAG 问答、引用展示和会话追问都尝试命中旧内容。正确结果是明确说明资料不可用或请求重新检索,而不是编造原文的替代答案。
多租户隔离不能依赖提示词
租户 ID、文档 ACL 和索引命名空间必须在检索过滤器中强制执行。缓存键同样要包含权限上下文;否则一个有权用户生成的答案可能被无权用户命中。通过 top-api.cc 统一调用模型时,仍要在检索侧完成这些边界,模型入口不能替代数据访问控制。
上线检查表
- 每个派生对象都能追溯到源文档与版本;
- 删除、更新、撤权有独立的失效流程与完成证据;
- RAG 回答、引用和会话缓存均通过负向测试;
- 索引重建不会混入已撤销租户的数据;
- 清理失败会告警并可安全重试。
RAG 的新鲜度不仅决定回答质量,也决定访问控制是否真实生效。把“资料不该再出现”当作一级功能测试,远比事后解释幽灵答案可靠。
Leave a Reply