60 秒回答模板

RAG 知识库不停服更新的核心是不要在生产索引上边写边查,而是做版本化索引和原子切换。我会把更新流程拆成采集、解析、切分、embedding、索引构建、质量校验、灰度切换和回滚。新知识先在离线或旁路索引里构建,保留完整版本号、文档版本、chunk 版本和权限元数据;构建完成后用抽样 query、黄金集和影子流量验证召回、排序、权限过滤和延迟;通过后用 alias 或路由配置把线上流量从旧版本切到新版本。切换时要处理缓存失效、增量数据双写、会话内版本一致性和失败回滚。监控上看索引新鲜度、召回命中、空召回、引用版本、权限错误、延迟和 badcase,保证用户看到的是一致且可追溯的知识结果。

考点 RAG 热更新要做版本化索引
难度 真实面经题
回答目标 设计 RAG 不停服更新

深入解析

01

版本化是热更新基础

知识库更新不能只理解成把新文档写进向量库。生产系统应为文档、chunk、embedding、索引和元数据建立版本。查询请求命中哪个知识库版本、引用哪个文档版本都要可追溯,这样才能保证一致性、排查问题和快速回滚。

02

离线构建新索引

更稳的做法是在旁路构建新索引:拉取最新文档,完成清洗、拆分、embedding、写入向量库和倒排索引,再生成版本快照。不要在旧索引上直接覆盖 chunk,否则更新过程中可能出现一部分文档是新版、一部分仍是旧版的混合状态。

03

上线前做影子验证

新索引切流前要验证质量。可以用黄金问题集、历史 query 回放、抽样人工检查和影子流量比较新旧版本的召回率、相关性、引用正确性、权限过滤、延迟和空召回率。验证失败时不要切主流量,而是回到数据或切分策略修复。

04

用原子切换和灰度发布

生产流量可以通过 alias、版本路由或配置中心从旧索引切到新索引。先小流量灰度,稳定后全量切换。切换动作应尽量原子,避免同一次查询同时访问两个不一致版本;长会话场景还要考虑会话内固定版本或明确刷新策略。

05

缓存和权限也要同步

RAG 更新不只更新向量,还包括标题、正文、权限、来源 URL、有效期和删除标记。缓存里的检索结果、rerank 结果、答案引用也要按版本失效。权限元数据尤其关键,不能出现正文已更新但权限过滤仍用旧规则的情况。

06

监控新鲜度和一致性

上线后要监控文档同步延迟、索引构建失败、版本切换时间、查询命中版本、引用缺失、权限拒绝异常、召回波动和 badcase。出现问题时可以快速回滚到旧索引,或对单个知识源降级到旧版本。

易错点

  • 把问题回答成 RAG 和微调如何选择,偏离不停服更新。
  • 直接覆盖线上索引,没有版本号、灰度和回滚。
  • 只更新向量,不更新权限、来源、删除状态和引用元数据。
  • 忽略缓存失效,导致用户看到旧结果或错误引用。
  • 没有影子验证,切换后才发现召回或延迟异常。
  • 长会话中混用多个知识版本,造成答案前后不一致。

面试官追问

为什么不能直接在生产向量库里覆盖旧 chunk?

直接覆盖会让线上查询在更新过程中命中新旧混合内容,造成引用不一致、权限不一致和难以回滚。版本化旁路构建能把切换变成可验证、可回滚的发布动作。

RAG 知识库更新时如何保证权限元数据不滞后?

权限要作为索引元数据的一部分随版本一起构建和校验。切换前验证权限过滤样本,切换后清理旧缓存;删除或降权内容要优先传播,避免旧权限结果继续被引用。

新索引上线前你会用哪些 query 做验证?

用黄金问题集、历史高频 query、最近 badcase、权限边界 query、空召回 query 和长尾业务 query。比较新旧版本的召回、排序、引用、延迟和权限过滤结果。

长对话中途知识库切版本,会带来什么问题?

同一会话可能前文引用旧知识,后文突然用新知识,造成回答口径变化。可以选择会话内固定知识版本,或在关键知识更新时提示刷新上下文并重新检索。

缓存的检索结果什么时候应该失效?

索引 alias 切换、文档版本变化、权限元数据变化、删除生效和 rerank 逻辑变更时都应失效。缓存 key 最好带知识库版本和权限上下文,避免跨版本复用。

如果新版本索引召回率下降,你会如何回滚和定位?

先通过 alias 或路由切回旧版本,保留问题 query 和命中结果。再按数据源、切分、embedding、索引参数、权限过滤、rerank 和缓存逐层排查。