知识库答不准,多数时候不是模型不行,而是语料本身没整理:一段话被切成两半、同一份文件存了三版、旧流程改了半年还留着。这篇不讲概念,只给维护者能照着做的动作:怎么定切分粒度、怎么把近似重复挑出来、多久更新一次、改完怎么验证。
知识库答不准,多数时候不是模型不行,而是语料本身没整理。同一份文件存了三版、一段操作说明被从中间切成两半、旧流程改了半年还留在库里,检索时命中的就是这些脏数据。修语料比换模型便宜得多,也快得多。
下面给维护者一套能照着做的动作:先定切分粒度,再挑近似重复,接着给每个块挂上元信息,然后安排更新节奏,最后用一组固定问题验证改动到底有没有变好。每一步都写清判断标准,也写清什么情况下不适用。
切分粒度:按什么切、切多长
最容易上手的判断标准是「一个问题一个块」:把某个块单独拿出来,它能不能回答一个具体的、用户真会问的问题。答不上,多半是切错了——要么太碎只剩半句话,要么太粗混了三四个主题。先用这个标准过一遍,比纠结字数有用得多。
- 先按标题层级切一级标题切一次,二级标题再切一次,切完检查有没有出现只有标题没有正文的空块,有就合并到相邻块。
- 再按段落合并同一小节里段落很短时合并,直到块内能独立讲完一件事;合并后如果块里出现两个不相干的主题,说明合过头了,退回去拆开。
- 单独处理特殊结构表格、步骤清单、参数表要么整块保留,要么按行拆但每行都带上表头字段,别从中间截断。
- 标出需要重叠的块只有跨段指代明显的地方才做重叠,比如后一段开头说「上述条件」,把条件那段末尾同时放进后一块。其余块不用重叠,重叠多了只会让同一内容反复被检索到。
去重:先分清完全重复和近似重复
完全重复是同一份文件被传了多次,文件级指纹一比就能去掉。真正麻烦的是近似重复:同一份文件的不同版本、同一内容的不同格式、同一流程被不同部门各自改写了一遍。这些块字面不同,检索时却互相抢位置,答案就容易前后矛盾。
- 同标题不同版本:文件名带 v2、最终版、修订这类字样,优先保留最新且内容最完整的一份
- 同内容不同格式:同一份说明既有 Word 又有网页导出,保留结构化更好、更易切分的那份
- 同流程不同部门改写:两个部门各写一份操作流程,先问清哪份是当前生效版本,另一份移到归档区
- 同政策新旧版本:有时两份都要留,用于回答「变化前后有什么区别」,这类必须打上有效期标记
处理方式上,建议保留一份、其余移入归档区而不是直接删除。归档区不参与检索,但需要追溯时还能翻出来。判断哪份是最新,不要只看文件修改时间,时间会被复制粘贴改掉,更可靠的是看内容里引用的流程名、角色名是否与当前一致。
| 重复类型 | 怎么识别 | 处理动作 |
|---|---|---|
| 完全重复 | 文件级指纹一致 | 保留一份,其余删除 |
| 同标题多版本 | 标题相同、正文高度相似 | 保留最新最全,其余归档 |
| 同内容不同格式 | 正文一致、排版不同 | 保留结构化更好的那份 |
| 新旧政策并存 | 同一主题但结论不同 | 两份都留,打有效期标记 |
给每个块挂上元信息:谁维护、什么时候失效
没有元信息的语料库,更新时根本无从下手:不知道这块从哪来、归谁管、多久没核对过。元信息不用多,但最基础的三样要全,否则后面的更新和验证都做不下去。
- 来源文件
- 这块内容出自哪个文件或哪个系统页面,用于回溯和批量重切
- 责任人
- 落到岗位而不是人名,写「客服组长」比写具体某人更耐用
- 最后核对时间
- 上一次人工确认内容仍然准确的时间,用于排巡检优先级
- 适用范围
- 标注只给内部用还是可以对外答,避免把内部口径答给外部用户
元信息补不齐的时候,优先补责任人和最后核对时间这两项。这两个字段直接决定一块语料能不能被放心使用:知道谁负责,出问题能找到人;知道多久没核对,就知道该不该优先抽检。敏感程度和适用范围可以分批补,不必一次到位。
更新节奏:定期全量过一遍,日常只动变更块
全量重跑语料成本高,没必要频繁做。更现实的做法是变更驱动为主、定期巡检为辅:源头文件一改,对应的块同步改;没人改的那些块靠巡检兜底,按被问到的频率决定抽查密度。
- 建变更清单把语料的源头文件列出来,指定谁在文件变更时通知维护者,没有这个环节后面全靠人记得,一定会漏。
- 同步改块源头改了,定位到引用该来源的所有块,逐块更新,改完在元信息里刷新最后核对时间。
- 定期巡检按固定周期抽查高频被问到的块,低频块放宽;抽查时重点看引用是否还有效、结论是否还成立。
- 区分失效类型内容过时的用新版替换并把旧版归档;业务已经下线的直接移出检索范围,别留在库里等它被搜到。
改完怎么验证:别只看「能不能答」,要看「答得对不对」
改完语料只测「能不能答出来」是不够的,答出来但引用了过期块、或者把两个相似块混在一起,同样是问题。更靠谱的办法是固定一组问题做回归,每次改完重跑,比对结果有没有变差。
- 准备一组固定问题,覆盖高频场景和边界场景,每次改动后重跑
- 重点盯三类问题:需要跨块才能答的、库里存在多个相似块的、涉及时间有效性的
- 发现答案变差,先回看是切分问题还是去重问题,不要一上来就换模型或改提示词
- 验收时逐条核对:命中的来源对不对、有没有引用已归档的块、相似块之间有没有被混淆
关于检索效果和响应表现这类需要实测的数字,不同时间点测出来会不一样,建议到站内的检测页面看当时的实际结果,别拿别人截图里的旧数据当基准。
下一步语料整理完,值得顺手确认一下当前用的接入方式是否稳定、响应是否正常,避免把接口问题误判成语料问题。→常见问题
切分的时候要不要按固定字数一刀切?
不建议把固定字数当唯一标准。字数上限可以作为兜底,但优先按标题层级和语义完整性切。表格、步骤、条文这类结构一旦从中间截断,检索出来就是半截信息,模型只能靠猜。可以给一个块的上限和下限,超过就拆,太短就合并,但判断依据还是能不能独立回答问题。
同一份资料在库里有两个版本,直接删旧的那份行不行?
分情况。如果旧版只是笔误修订,删掉没问题。但如果是政策、流程、价格口径这类会随时间变化的,旧版往往还要用来回答「以前是怎么规定的」。建议保留但打上有效期标记,检索时默认只出最新版,需要历史对比时再按标记取旧版。
多久更新一次语料比较合适?
以变更驱动为主,别指望靠固定周期。源头文件一改就同步改对应块,这是最省事的做法。再按一个固定节奏做抽查,重点抽查被问得最多的那批块。具体抽查频率看你们资料变动速度,变动快的月份加密,稳定的月份可以放宽,不用强求统一。