核心要点

  • 建增量 ingest 管线:文档新增/修改/删除 → 重新切块 → 算 embedding → 更新索引,别每次全量重灌

  • 给每个 chunk 加版本号和时间戳,删改时能精准定位并清掉对应向量

  • 定期重建/校准:换 embedding 模型或切块策略时需全量重建一次

  • 持续监控检索质量、处理陈旧内容、重复与冲突文档

标准回答

核心:增量而非全量

别每次都把整库删了重灌——慢、贵、还会造成空窗期。建一条增量 ingest 管线,按文档变更类型处理:

  • 新增:切块 → 算 embedding → 写入索引。
  • 修改:定位该文档的旧 chunk 删掉,重新切块入库(内容变了 chunk 边界也会变)。
  • 删除:按文档 id 删掉它的所有 chunk 向量。

为此每个 chunk 要存来源文档 id、版本号、时间戳,才能精准增删改。

触发方式

可以事件驱动(文档系统有变更就发消息触发 ingest),也可以定时扫描比对。重要变更要近实时同步,避免用户拿到过期答案。

定期重建与校准

换 embedding 模型、调整切块大小、迁移向量库时,需要对全量数据重建一次索引。日常则定期做一致性校验,清理孤儿向量。

监控与治理

监控检索质量(召回是否下降)、识别陈旧内容(用时间戳标记过期文档)、处理重复(同一内容多份)和冲突(新旧版本并存)。陈旧和重复内容会拉低检索准确率甚至误导回答。

常见误区

⚠️ 常见踩坑

每次更新都全量删库重灌——既慢又贵,重建期间还有检索空窗;另一个坑是改文档时只加新 chunk 不删旧 chunk,导致新旧版本并存、检索出互相矛盾的过期内容。

追问

追问 1文档被删了,怎么保证它的内容不再被检索到?

入库时给每个 chunk 记上来源文档 id,删除文档时按 id 把它派生的所有向量从索引里一并删掉。靠这个关联关系做级联清理,否则会留下「孤儿向量」——文档没了但片段还能被检索出来,造成幽灵答案。

追问 2更换 embedding 模型时知识库要怎么处理?

必须用新模型对全量文档重新算一遍 embedding 并重建索引——新旧模型的向量空间不兼容,混用会让相似度计算失真、检索质量崩坏。建议在新索引上跑通并评测检索质量后再灰度切流,保留旧索引可回滚。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。