真实面经题目 · 原创解析
RAG 知识库如何做不停服更新,并保证检索结果一致性?
这题考 RAG 知识库不停服更新和一致性,不是 RAG vs SFT。回答要覆盖版本化索引、离线构建、影子验证、别名切换、缓存失效、权限元数据和回滚。
真实面经题目 · 原创解析
这题考 RAG 知识库不停服更新和一致性,不是 RAG vs SFT。回答要覆盖版本化索引、离线构建、影子验证、别名切换、缓存失效、权限元数据和回滚。
RAG 知识库不停服更新的核心是不要在生产索引上边写边查,而是做版本化索引和原子切换。我会把更新流程拆成采集、解析、切分、embedding、索引构建、质量校验、灰度切换和回滚。新知识先在离线或旁路索引里构建,保留完整版本号、文档版本、chunk 版本和权限元数据;构建完成后用抽样 query、黄金集和影子流量验证召回、排序、权限过滤和延迟;通过后用 alias 或路由配置把线上流量从旧版本切到新版本。切换时要处理缓存失效、增量数据双写、会话内版本一致性和失败回滚。监控上看索引新鲜度、召回命中、空召回、引用版本、权限错误、延迟和 badcase,保证用户看到的是一致且可追溯的知识结果。
知识库更新不能只理解成把新文档写进向量库。生产系统应为文档、chunk、embedding、索引和元数据建立版本。查询请求命中哪个知识库版本、引用哪个文档版本都要可追溯,这样才能保证一致性、排查问题和快速回滚。
更稳的做法是在旁路构建新索引:拉取最新文档,完成清洗、拆分、embedding、写入向量库和倒排索引,再生成版本快照。不要在旧索引上直接覆盖 chunk,否则更新过程中可能出现一部分文档是新版、一部分仍是旧版的混合状态。
新索引切流前要验证质量。可以用黄金问题集、历史 query 回放、抽样人工检查和影子流量比较新旧版本的召回率、相关性、引用正确性、权限过滤、延迟和空召回率。验证失败时不要切主流量,而是回到数据或切分策略修复。
生产流量可以通过 alias、版本路由或配置中心从旧索引切到新索引。先小流量灰度,稳定后全量切换。切换动作应尽量原子,避免同一次查询同时访问两个不一致版本;长会话场景还要考虑会话内固定版本或明确刷新策略。
RAG 更新不只更新向量,还包括标题、正文、权限、来源 URL、有效期和删除标记。缓存里的检索结果、rerank 结果、答案引用也要按版本失效。权限元数据尤其关键,不能出现正文已更新但权限过滤仍用旧规则的情况。
上线后要监控文档同步延迟、索引构建失败、版本切换时间、查询命中版本、引用缺失、权限拒绝异常、召回波动和 badcase。出现问题时可以快速回滚到旧索引,或对单个知识源降级到旧版本。
直接覆盖会让线上查询在更新过程中命中新旧混合内容,造成引用不一致、权限不一致和难以回滚。版本化旁路构建能把切换变成可验证、可回滚的发布动作。
权限要作为索引元数据的一部分随版本一起构建和校验。切换前验证权限过滤样本,切换后清理旧缓存;删除或降权内容要优先传播,避免旧权限结果继续被引用。
用黄金问题集、历史高频 query、最近 badcase、权限边界 query、空召回 query 和长尾业务 query。比较新旧版本的召回、排序、引用、延迟和权限过滤结果。
同一会话可能前文引用旧知识,后文突然用新知识,造成回答口径变化。可以选择会话内固定知识版本,或在关键知识更新时提示刷新上下文并重新检索。
索引 alias 切换、文档版本变化、权限元数据变化、删除生效和 rerank 逻辑变更时都应失效。缓存 key 最好带知识库版本和权限上下文,避免跨版本复用。
先通过 alias 或路由切回旧版本,保留问题 query 和命中结果。再按数据源、切分、embedding、索引参数、权限过滤、rerank 和缓存逐层排查。