长文档切片策略:按文档类型切,而不是按字数切
长文档切片,指的是把几十上百页的文件拆成检索系统能定位、能引用、又保留语境的片段。固定字数切分最省事,却会把表格拦腰截断、把条款与适用范围拆散。本文按文档类型给出切片方式对照表,并说明重叠窗口、父子块与验收口径
长文档切片,指的是把一份几十页甚至上百页的文件,拆成检索系统能精确定位、能作为引用出处、同时又不丢掉语境的片段。它是文档进入知识库前的最后一道工序,也是最容易被跳过的一道 —— 很多「检索不准」的问题,追到底都是切片切坏了
固定长度切片为什么会出问题
按字数平均切分实现最简单,在结构规整的纯文本上也确实够用。但企业文档大多不规整:一份设备手册里有步骤、有参数表、有安全警告;一份合同里有条款、有附件、有金额表。等距切分会产生三类问题:
- 语义被截断:一个完整结论被切成两半,检索只命中后半句,答案就少了一半前提。
- 表格被破坏:表格行与表头分离后,模型看到的是没有列名的数字,既读不懂也容易被误读。
- 标题与正文分离:小节标题掉进上一块,正文片段失去主题线索,向量表示随之偏掉。
这三类问题的共同点是:它们不会报错,只会在回答质量上慢慢显现,因此很难靠开发阶段的测试发现。
按文档类型选切片方式
切片没有通用参数,只有按文档类型分派的规则。下面这组对应关系来自实际项目里反复出现的六类文档:
- 制度与规范:按条款层级切,一条一款为一块,保留条款编号与所属章节标题。
- 合同与协议:按条款切,同时把「定义」「适用范围」这类前置条款作为公共片段附加给同一文档的其他块。
- 技术手册与操作规程:按步骤与章节切,一个操作步骤为一块,参数表整表保留。
- 会议纪要与邮件:按议题切,一个议题为一块,保留时间、参与人与结论三要素。
- 表格与财务报表:整表为一个单元并转成结构化描述,行列不做拆分。
- 问答与常见问题:一问一答为一块,不与其他内容混切。
这张对照表的作用是让切片策略可以被讨论和复核。当团队争论块大小该设多少时,真正该先回答的是这份文档属于哪一类、它的语义边界在哪里。
重叠窗口与父子块
重叠是指相邻两块共享一小段内容,用来避免关键句正好落在切分点上。重叠比例通常不需要很大,过大的重叠会带来大量重复命中,挤占后续排序的名额,让真正有区分度的片段排不上去。
父子块解决的是另一对矛盾:检索要精确,回答要完整。做法是子块负责被检索到,命中后回溯到它所属的父块(整节或整章)再交给模型。这样既能精确定位,又能把完整语境带上去,代价是索引要多存一层映射关系,更新时两级都要同步。
验收口径
- 抽二十个高频问题,检查命中的片段本身是否可读 —— 人看不懂的片段,模型也很难用对。
- 抽查涉及的表格与条款,确认表头与内容、条款与适用范围仍然在一起。
- 同一份文档更新后,新旧片段不会同时留在索引里。
- 切片策略有文字记录,且能回答「这类文档为什么这样切」。
不要做的事
不要把切片当成一次性调参。文档类型会变、业务会增,切片规则需要跟着一起维护。也不要在没有固定评测问题集的情况下反复调整块大小 —— 没有评测手段,调参只是把问题从一处挪到另一处,而且没人能证明是变好了还是变差了。