知识库更新了文件,问答却还在引用旧段。同事差点把过期制度转给客户。
上周三,行政的小陈把我拦住:“你们不是说资料库已经换成新版请假制度了吗?我刚问了一句‘事假几天要交证明’,它还在念旧版那三天的说法。”
我打开后台一看,文件列表里确实是新版 PDF,上传时间也是前一天,预览页内容也对。问题出在索引:我们做了增量更新,但旧切块没有失效,检索还是优先命中了相似度更高的旧段落。模型本身没“记错”,是我们喂给它检索到的上下文还是旧的。
小陈当时手里已经打好一段准备发客户的话,幸好她多问了我一句。
对话核心:文件在了,不等于答案会更新
小陈问:“是不是以后每次改文件都得整库重建?”
我说:不一定。但你得先分清三件事:
- 文件存储里是不是新版本;
- 向量/关键词索引里旧切块是不是还活着;
- 问答时引用的出处能不能指到当前文件的页码或章节。
我们后来定了个规矩:同一路径覆盖上传,必须让旧文档 ID 的切块全部标记删除或物理删除;增量只负责“新增”,覆盖属于“替换”,替换走重建该文档的流程,而不是静默追加。表面上“上传成功”,如果不删旧切块,库里就会同时存在新旧两套说法,检索谁分高听谁的——旧段往往更短更整洁,反而更容易被命中。
我是怎么验的
验收题我们准备得很“损”:
- 把制度里一个关键数字从 A 改成 B,上传覆盖后立刻提问,答案必须是 B,且出处指向新文件。
- 连续问五次,不允许偶尔冒出 A。
- 故意保留一个旧文件名副本在回收站外的旁路目录,确认检索范围没把它扫进来。
- 看引用卡片:标题、修改日期、页码是否与新文件一致;对不上就判失败。
- 改完一小时后再问一次,防止缓存层把旧上下文又送回来。
第一次增量脚本漏删旧切块,验收第一题就翻车。修好后,小陈用她那句原话再问,答案终于对齐新版,她才肯签字说“可以让前台用”。
几条能落地的流程
我们现在写进运维备忘:
- 覆盖上传 = 先删旧索引再切新块;禁止“同名并存两套切块”。
- 每周一次全量抽检:抽十条改过的条款,对比文件原文与模型引用。
- 对外答复前,答案里必须带出处;出处对不上就当失败,不靠感觉。
- 大版本制度变更,宁可整库重建一次,也不要赌增量脚本永远正确。
- 谁负责上传,谁负责跑验收题;上传完不验,等于没更新。
回头看,同事信任的是“库里的字”,不是“上传成功”的提示。索引和文件不同步,比模型本身胡编更隐蔽,也更危险。
你们做本地知识库更新时,增量翻过车吗?评论区聊聊你们怎么验“旧段已死”。
我的折腾笔记在 evafang.com ,有兴趣可以随便翻翻。