标准回答
核心:增量而非全量
别每次都把整库删了重灌——慢、贵、还会造成空窗期。建一条增量 ingest 管线,按文档变更类型处理:
- 新增:切块 → 算 embedding → 写入索引。
- 修改:定位该文档的旧 chunk 删掉,重新切块入库(内容变了 chunk 边界也会变)。
- 删除:按文档 id 删掉它的所有 chunk 向量。
为此每个 chunk 要存来源文档 id、版本号、时间戳,才能精准增删改。
触发方式
可以事件驱动(文档系统有变更就发消息触发 ingest),也可以定时扫描比对。重要变更要近实时同步,避免用户拿到过期答案。
定期重建与校准
换 embedding 模型、调整切块大小、迁移向量库时,需要对全量数据重建一次索引。日常则定期做一致性校验,清理孤儿向量。
监控与治理
监控检索质量(召回是否下降)、识别陈旧内容(用时间戳标记过期文档)、处理重复(同一内容多份)和冲突(新旧版本并存)。陈旧和重复内容会拉低检索准确率甚至误导回答。
常见误区
⚠️ 常见踩坑
每次更新都全量删库重灌——既慢又贵,重建期间还有检索空窗;另一个坑是改文档时只加新 chunk 不删旧 chunk,导致新旧版本并存、检索出互相矛盾的过期内容。
追问
追问 1:文档被删了,怎么保证它的内容不再被检索到?
入库时给每个 chunk 记上来源文档 id,删除文档时按 id 把它派生的所有向量从索引里一并删掉。靠这个关联关系做级联清理,否则会留下「孤儿向量」——文档没了但片段还能被检索出来,造成幽灵答案。
追问 2:更换 embedding 模型时知识库要怎么处理?
必须用新模型对全量文档重新算一遍 embedding 并重建索引——新旧模型的向量空间不兼容,混用会让相似度计算失真、检索质量崩坏。建议在新索引上跑通并评测检索质量后再灰度切流,保留旧索引可回滚。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。