首页/AI/RAG 与向量库速查/知识库新鲜度与增量更新

知识库新鲜度与增量更新

知识过期是 RAG 的隐性质量问题:建立增量更新管线(变更检测 → 重新解析切分 → 向量更新 → 旧块删除)、对文档记录 updated 时间并在排序中适度加权,定期做“过期答案”抽检。

RAG 与向量库速查AI更新于 2026-10-13

新鲜度是什么问题

知识过期是 RAG 里最隐蔽的质量问题:旧制度、旧价格、旧参数照样能被检索出来,模型也照样照着它们回答,而答案看上去毫无异常。解法是建立增量更新管线(变更检测 → 重新解析切分 → 向量更新 → 旧块删除),给文档记录更新时间并在排序中适度加权,同时定期对「过期答案」做抽检,把过期命中率当作常规指标看。

基本信息

更新流程变更检测、重新解析切分、向量更新、旧块删除
幂等要求任务可重跑,不产生重复切片
排序手段按更新时间适度加权,让新内容优先
质量监控定期抽检过期答案,统计命中旧内容的比例

典型使用场景

  • 制度与规范更新:新版生效后旧版必须停止被检索命中
  • 价格与费率调整:过期费率被引用会直接造成业务损失
  • 产品版本迭代:旧版本参数与新版本并存时按版本过滤
  • 文档下架:源文件删除后同步清理索引中的对应切片
  • 定期体检:按月抽样问题,人工核对答案是否引用了过期内容

增量更新骨架

增量更新骨架
changed = detect_changes(source, last_sync_ts)   # 只处理变更过的文档
for doc in changed:
    old_ids = index.find_by_doc(doc.id)           # 先找出旧切片
    new_chunks = split(parse(doc))                # 重新解析与切分
    index.upsert(embed(new_chunks))               # 写入新切片
    index.delete([i for i in old_ids if i not in {c.uid for c in new_chunks}])
# 删除与写入放在同一幂等任务里,失败重跑不会产生残留

更新方式对比

方式特点适用情况
全量重建干净彻底,可清理全部残留语料规模小、变更频繁
增量更新省资源,需正确处理删除语料大、变更集中在局部
定时批处理实现简单,延迟可见允许小时级延迟的场景
事件触发接近实时对时效要求高的业务
删除旧块与写入新块要放在一个幂等任务里完成,避免中途失败留下半新半旧的状态,这种状态最难排查。
更新时间加权的系数需要评测:加权过强会让新文档压过更相关的旧文档,反而降低检索质量。

易错点

  • 只增不删,旧版本与新版本文档同时被检索
  • 增量任务重跑不幂等,产生重复块
  • 没有变更检测,靠人工判断哪些文档需要更新,长期必有遗漏
  • 缺少过期答案抽检,过期内容被引用多时无人察觉

数据来源与参考

  • Anthropic, Contextual Retrieval(更新与维护)
  • Milvus 官方文档(Delete + Upsert 模式)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌