日期:2026-08-20
我们给客户建的 RAG 知识库,刚上线那阵答得准,业务方挺满意。半年后没人管了,制度改了好几版,旧文档没下架,新文档没补,链接失效没人修,同一个问题不同文档给不同答案,知识库慢慢成了垃圾场。业务方一查发现答非所问,信任崩了,又退回人工翻制度文件,RAG 形同摆设。
我们进场时,他们的知识库已经没人敢信,客服宁可问老员工也不问系统。说到底,RAG 不是建完就完事,它像代码一样会腐化,文档过期、链接失效、重复打架,没人巡检就烂掉。知识库得有健康度,不能只管建不管养。
方案做成一个巡检闭环。文档有效性巡检:定期扫每个文档的生效状态,过期自动标记。失效链接与重复检测:扫出打不开的链接和语义重复、互相矛盾的文档。过期版本下线:标记过的文档先下线观察,确认无引用再删。知识库健康分:综合覆盖率、失效数、重复数、回答准确率给一个分,低了告警。
过期判定比想象难。文档没写有效期,系统不知道它什么时候该失效。我们给每类文档加生效区间和负责方,制度类按发布日期加默认有效期,业务方认领后可在到期前续期,否则自动标记待下线。我们早期那版直接删过期文档,结果把还在被某些问答引用的内容搞没了,回答突然变瞎,被业务方抓包,后来改成先标记再观察一周才真删。
重复和矛盾检测靠语义。字面重复好查,语义重复,同一事两种说法,得用向量相似度,超阈值就标疑似重复,人工确认。矛盾更麻烦,两份文档对同一政策说法不一,我们让巡检把疑似矛盾的成对推给业务方裁定,而不是系统自作主张留哪份。
健康分是给业务方看的抓手。纯技术指标他们不懂,一个分数加红黄绿,谁都能看懂知识库该不该管。我们把健康分挂到负责人绩效看板,倒逼业务方定期认领文档,比我们催一百遍管用。
巡检本身也得讲性能。知识库大到几十万文档,全量扫一遍要很久,我们改成增量巡检,只扫近期变更和到期临近的文档,全量扫描放在周末低峰。这样既保了时效性又不拖垮系统。还有个关键是文档血缘,一份制度被多少问答引用,下线下线前得看依赖,我们建了文档到问答的依赖图,下线前自动检查有没有还在用的,没依赖才真删,有依赖先告警业务方。这层血缘后来还用在影响分析上,政策一改,哪些问答会受影响一目了然,比人工翻强太多。说实话,知识库治理是个持续活,巡检频率和劝业务方认领,两头都得抓。
巡检告警不能只发出来就完事,得有处理闭环。每条告警分派到文档 owner,设处理时限,超时没处理就升级到 owner 的上级,避免告警石沉大海。之前巡检报告发群里,没人认领就过去了,过期文档照样躺。加了时限和升级后,清理时效从平均两周压到三天。我们还做了处理结果的回填,owner 标记已删或已续期,系统关闭告警并记一笔,下次巡检不再重复报同一条。这层闭环让巡检从发现问题变成解决问题,知识库健康分才真正持续改善。
巡检覆盖率从零到百分之百,定期每周跑。失效文档清理数累计约两成,主要是死链和过期制度。回答准确率从腐化期的约七成回升到九成以上,人工兜底率降回上线初期水平。知识库健康分长期维持在绿区,业务方重新用回系统。文中数据为项目复盘口径,已做脱敏。
RAG 知识库要像代码一样定期巡检,给文档打有效期、自动扫死链和重复,准确率能拉回来,这步偷不得。过期文档别直接删,先标记下线再观察,我们吃过直接删搞崩问答的亏。矛盾文档让业务方裁定,系统只负责成对推,别自作主张。说实话,健康分挂绩效这招最管用,技术再好不如责任到人,知识库腐化本质是没人认领。我们后来把文档认领做成入职流程的一部分,新制度一发布就绑负责人,从根上防腐化。
案例片段(已脱敏): 知识库巡检与健康分节选(配置节选): 一次巡检标出两份离职制度文档,生效区间已过期且被新办法替代,但仍在被问答引用。系统先标记下线观察七天,期间监控回答准确率无波动,确认无依赖后删除。若按旧模式直接删,该问答会瞬间失准,业务方又得回头问人。
doc:
effective: {start: 2026-01-10, expire: 2026-07-10}
owner: dept_hr
renew_before: 30d
inspect:
dead_link: true
dup_sim_threshold: 0.92
conflict_pair_push: owner
health_score:
weights: {coverage:0.3, dead:0.3, dup:0.2, accuracy:0.2}
alert_if: < 0.7案例片段(已脱敏): 巡检发现某政策存在新旧两版文档,语义相似度零点九四,且对报销上限表述冲突,旧版五千,新版八千。系统将这对矛盾推给财务负责人,裁定以新版为准,旧版标记冲突下线。此前已有三名员工按旧版问答操作,多报部分被退回,这事儿让我们把矛盾检测优先级提到了死链之上。