Sunday 的面试指南

RAG 知识库里的文档更新、删除后,为什么还会搜到旧答案?

🧑‍💻 面试官:退款政策昨天改了,文件已经替换,AI 今天还引用旧条款。你会先查什么?

🙋‍♂️ 我:先看这次回答用的是哪个片段版本。文件替换了,不代表检索索引里的旧片段已经被覆盖或删除。

🧑‍💻 面试官:那把索引器重新跑一遍不就行了?

🙋‍♂️ 我:不一定。要看数据源如何标识删除、索引器有没有删除检测,以及旧片段是否还存在于向量库或缓存里。单纯重跑不能保证孤儿文档消失。

🧑‍💻 面试官:如果不是改版,而是某份文件的访问权限被收回,你也等后台慢慢删完吗?

🙋‍♂️ 我:不能等。先在查询和回答链路阻断这份文件的访问,后台再清理索引与缓存。撤权是即时安全要求,物理清理可以异步,但不能继续被检索出来。

这道题的关键不是“有没有同步文件”,而是旧证据在什么时刻、经过哪一道门,才真正不再能进入回答。

面试速答(60 秒版)

RAG 的文档通常会被解析、切片、生成向量,再写入检索索引。修改源文件只完成了第一步,旧片段可能还留在索引、搜索副本或缓存里,所以用户仍会搜到旧答案。

我会给文档和片段带上稳定 ID、版本和有效状态。更新时构建并检查新版本,再切换检索可见版本,同时让旧版本失效;删除时发出明确的删除事件,核对相关片段是否都被清掉。权限收回更急:查询时先按当前权限过滤,不能等待异步删除结束。

最后用带文档 ID 和版本的 Trace 检查回答来源,并做“更新后不得命中旧版”“撤权后不得返回原文”的回归测试。这样才算真正完成了更新,而不只是后台任务显示成功。

知识点详解:一份文件更新,要穿过几层状态

文档更新后先让旧证据退出检索,再完成后台清理

文件改了,检索材料未必改了

假设退款政策从 V1 改成 V2。上传页面显示 V2,只说明源文件换了。检索系统里可能还保存着 V1 切出来的十几段文字;生成模型只看检索结果,不会主动打开上传页面核对最新版。

所以文档和片段最好都有能追溯的 ID 与版本。排查错误回答时,先从 Trace 中找到被引用片段,再反查它属于哪一版、何时写入索引。没有这层信息,就只能猜“是不是缓存问题”。

更新、删除和撤权不是一回事

更新要保证切换过程可控:先构建 V2,检查关键片段是否可检索,再把可见版本切过去,让 V1 不再参与回答。对短时间存在两个版本的系统,查询侧必须能过滤掉旧版;不能只靠等待索引最终收敛。

删除是让所有对应片段退出检索。它需要明确的删除标记或删除请求。某些索引器的“重跑”只更新还在源里的内容,并不自动删除已经从源消失的孤儿记录,具体要核对使用的服务与策略。

撤权则更不能把“物理删除完成”当作生效时间。比如法务收回一份内部文档,查询端要立刻根据当前用户、租户和文件权限拦截;随后再清理向量、关键词索引及相关缓存。即使后台还有旧字节,也不该再对无权用户可见。

怎么证明旧内容真的退场

保留一组回归问题,分别问旧条款和新条款的关键词。检查检索候选、最终上下文、引用链接和回答,而不只看最后一句话。还要测被撤权用户与仍有权限用户:前者不能拿到内容,后者可以拿到正确版本。

如果系统有答案缓存或检索缓存,缓存键也要考虑版本与权限;否则索引已经切换,缓存仍可能把旧回答送回来。更新成功的判据,应是用户侧不再看见旧证据。

面试官继续追问

能不能先删 V1,再慢慢建立 V2?

可以,但这段时间可能没有可用答案。对需要连续服务的知识库,更合适的是先构建和校验 V2,再切换可见版本;切换前仍须确保旧版没有被错误授权。

文档删除了,向量库里还留着向量,有风险吗?

有。向量和元数据可能仍能参与检索或暴露关联信息。要同时核查检索屏蔽与后续物理清理,不能只删原始文件。

如何发现某一批文档没有同步成功?

记录源文档版本、索引片段数量与更新时间,做差异对账;再用关键文档的回归查询验证。任务“运行成功”不等于内容“可正确检索”。

面试速记卡

  • 更新:构建新版、校验后切换,旧版退出检索。
  • 删除:必须有明确删除机制,不假设重跑会清孤儿片段。
  • 撤权:查询侧立即阻断,物理清理可以随后完成。
  • 排查:追踪片段 ID、版本、权限和缓存。
  • 验收:用用户侧问题证明旧证据不再出现。
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历