知识库更新了文件但问答仍引用旧段——增量索引与重建我怎么验收

36 阅读3分钟

知识库更新了文件,问答却还在引用旧段。同事差点把过期制度转给客户。

juejin-1.jpg 上周三,行政的小陈把我拦住:“你们不是说资料库已经换成新版请假制度了吗?我刚问了一句‘事假几天要交证明’,它还在念旧版那三天的说法。”

juejin-2.jpg 我打开后台一看,文件列表里确实是新版 PDF,上传时间也是前一天,预览页内容也对。问题出在索引:我们做了增量更新,但旧切块没有失效,检索还是优先命中了相似度更高的旧段落。模型本身没“记错”,是我们喂给它检索到的上下文还是旧的。

juejin-3.jpg 小陈当时手里已经打好一段准备发客户的话,幸好她多问了我一句。

对话核心:文件在了,不等于答案会更新

小陈问:“是不是以后每次改文件都得整库重建?”

我说:不一定。但你得先分清三件事:

  1. 文件存储里是不是新版本;
  2. 向量/关键词索引里旧切块是不是还活着;
  3. 问答时引用的出处能不能指到当前文件的页码或章节。

我们后来定了个规矩:同一路径覆盖上传,必须让旧文档 ID 的切块全部标记删除或物理删除;增量只负责“新增”,覆盖属于“替换”,替换走重建该文档的流程,而不是静默追加。表面上“上传成功”,如果不删旧切块,库里就会同时存在新旧两套说法,检索谁分高听谁的——旧段往往更短更整洁,反而更容易被命中。

我是怎么验的

验收题我们准备得很“损”:

  • 把制度里一个关键数字从 A 改成 B,上传覆盖后立刻提问,答案必须是 B,且出处指向新文件。
  • 连续问五次,不允许偶尔冒出 A。
  • 故意保留一个旧文件名副本在回收站外的旁路目录,确认检索范围没把它扫进来。
  • 看引用卡片:标题、修改日期、页码是否与新文件一致;对不上就判失败。
  • 改完一小时后再问一次,防止缓存层把旧上下文又送回来。

第一次增量脚本漏删旧切块,验收第一题就翻车。修好后,小陈用她那句原话再问,答案终于对齐新版,她才肯签字说“可以让前台用”。

几条能落地的流程

我们现在写进运维备忘:

  • 覆盖上传 = 先删旧索引再切新块;禁止“同名并存两套切块”。
  • 每周一次全量抽检:抽十条改过的条款,对比文件原文与模型引用。
  • 对外答复前,答案里必须带出处;出处对不上就当失败,不靠感觉。
  • 大版本制度变更,宁可整库重建一次,也不要赌增量脚本永远正确。
  • 谁负责上传,谁负责跑验收题;上传完不验,等于没更新。

回头看,同事信任的是“库里的字”,不是“上传成功”的提示。索引和文件不同步,比模型本身胡编更隐蔽,也更危险。

你们做本地知识库更新时,增量翻过车吗?评论区聊聊你们怎么验“旧段已死”。

我的折腾笔记在 evafang.com ,有兴趣可以随便翻翻。