RAG 文档改了怎么办:删除、版本号和 Upsert
更新时最怕什么
先删掉旧文档的全部 chunk,再重新切割入库——逻辑干净,但写入失败就会丢知识。生产要保证:切换过程没有真空期,并且能按文档 ID 回滚。
三种策略
先删后增适合大改和结构重组,实现简单,必须先备份旧向量,插入失败立刻回写。
先增后删适合不能中断检索的服务:新 chunk 就绪再删旧的,或延时回收。短暂会占双倍存储。
软删除 + 版本号最稳:新数据写完后把 active 指针切过去,检索只查 status=active。误标可以恢复,定期再物理清理。
ID 和感知变更
文档 ID 稳定、chunk ID 由文档 ID + 序号或哈希组成,更新才删得准。变更感知用定时轮询或事件驱动(对象存储通知、Git webhook)。全量重建只当事故恢复;日常用灰度:先切一小部分流量到新版本索引。
Milvus / Pinecone / Weaviate 的 Upsert 往往在底层做「标记旧数据、建完新索引再回收」,能避开「删了加不进」。另一份空草稿「知识库怎么做动态更新」已并入本文。
RAG 文档改了怎么办:删除、版本号和 Upsert
https://lautung.com/archives/rag-knowledge-update
评论