真实面经题目 · 原创解析
RAG 文档发生局部更新时,如何通过增量索引避免全量重新向量化,并保证检索结果一致?
这题考生产级 RAG 数据更新。回答要讲文档版本、chunk 变更检测、增量 embedding、索引原子切换、删除 tombstone 和检索一致性。
真实面经题目 · 原创解析
这题考生产级 RAG 数据更新。回答要讲文档版本、chunk 变更检测、增量 embedding、索引原子切换、删除 tombstone 和检索一致性。
RAG 文档局部更新时,不应全量重新向量化所有文档。更好的做法是把文档解析成稳定 chunk,基于内容 hash 和版本检测变更,只对新增、修改、删除的 chunk 更新索引,并保证查询侧看到一致版本。 建立文档版本模型:每个文档要有 docId、version、更新时间、权限、解析配置和 chunk 版本。没有版本,无法判断哪些向量和元数据已经过期。 变更检测到 chunk:用段落、标题、表格或语义边界切 chunk,并计算 hash。局部更新时比较旧新版 chunk,只重新 embedding 变化部分,未变化部分复用。 索引更新要原子:新增和修改 chunk 写入新版本,删除 chunk 标记 tombstone 或从索引移除。查询侧要么读旧版本,要么读新版本,避免混合读到半更新状态。 权限和元数据同步:RAG 不只是向量。权限、时间、业务标签、来源链接和召回过滤条件也要随版本更新,否则可能召回旧权限或过期内容。 回归验证检索质量:更新后用固定 query 集检查召回、排序、答案引用和删除生效。监控 embedding 队列延迟、失败重试、索引版本滞后和过期召回比例。 最后要把方案落到可验证的指标、失败兜底和迭代闭环上。面试里不要只讲概念名词,要说明边界、取舍、数据来源、线上观测和出问题后的回滚或人工介入。
每个文档要有 docId、version、更新时间、权限、解析配置和 chunk 版本。没有版本,无法判断哪些向量和元数据已经过期。
用段落、标题、表格或语义边界切 chunk,并计算 hash。局部更新时比较旧新版 chunk,只重新 embedding 变化部分,未变化部分复用。
新增和修改 chunk 写入新版本,删除 chunk 标记 tombstone 或从索引移除。查询侧要么读旧版本,要么读新版本,避免混合读到半更新状态。
RAG 不只是向量。权限、时间、业务标签、来源链接和召回过滤条件也要随版本更新,否则可能召回旧权限或过期内容。
更新后用固定 query 集检查召回、排序、答案引用和删除生效。监控 embedding 队列延迟、失败重试、索引版本滞后和过期召回比例。
一个小改动可能导致后续 chunk 全部变化,降低复用率。需要稳定切分策略,尽量按标题、段落或结构块定位。
需要删除向量或写 tombstone,并让查询过滤删除版本。同时验证缓存和生成上下文中没有残留旧内容。
会,尤其是上下文边界变化和重叠区域变化。更新后要跑检索回归,检查关键 query 的 topK 和引用是否合理。
失败 chunk 进入重试队列,索引版本保持旧版本可用,并暴露滞后指标。不能让部分失败污染线上检索。