鱼日先生
AI 应用交付 · 知识库 · 独立验收
第七期 · 17:55
分段切断代码块24.3% 是碎的
一次清洗与分段的配合失误|实操复盘 · 面向 RAG 开发者
本视频含 AI 生成内容(音频由 AI 合成,已按平台要求声明)。
本期聊什么
这是一次真实排查的完整复盘。一套上线运行的知识问答应用做体检时,故障手册知识库里 1401 个分段中有 341 个是代码碎块,占 24.3%(碎块的判定口径:一个分段里代码围栏出现奇数次,说明代码块被从中间切开了)。而它上线前专门做过一轮清洗。
从碎块形态倒推三条线:源文档围栏密度极高(MPLS 章节 7.6 万字符里有 1502 个围栏行,平均每块一到两行命令);清洗只做了一半(把 1502 个围栏合并成 156 个,但 817 个代码块里有 113 个超过 800 字符,最长的超过两万两千字符);目标库 max_tokens 只有 800——长代码块远超上限,被分段器第二级「按长度硬切」,切点正好落在围栏上。
修复用结构感知切分(代码块整体优先、超长块在语义边界切开并补完整围栏、普通文本也控长),碎块率从 30.0% 降到 5.3%。对照实验里有一个反直觉的发现:把 max_tokens 从 500 一路调到 2000,碎块率几乎没降(29.1% → 25.3%)——问题不是上限太小,是切点不受控。剩下的 5% 追下去,是 PDF 转 Markdown 时围栏和正文被合并到同一行(154 处、涉及 22/25 个文档),这部分只能回源文档层解决。
收尾给出三条可直接照用的判据,核心一句:清洗的输出尺寸,必须由目标库的分段配置决定,而不是由源文档的格式决定。
完整文字版见下方文章。
时间轴
- 00:01开场:清洗与分段配合失误
- 00:15体检报告里那个 24.3%
- 00:41上线前专门清洗过,为什么还有碎块
- 01:37碎块的真实代价:答案少一半
- 02:24三种碎块形态
- 03:59第一条线:源头围栏密度
- 04:39第二条线:清洗只做了一半
- 05:59第三条线:分段器的两级切分
- 06:54修复:结构感知切分
- 07:48结构感知的三件事
- 08:37对照实验:30% 降到 5.3%
- 09:48验证:调大上限到底有没有用
- 10:50反直觉:碎块率为什么反而上升
- 11:47剩下 5% 的真相在源文档
- 12:50三条可照用的判据
- 14:15常见问题:碎块率多少算正常
- 16:53收尾:问题不在配置,在上一环
本期的文字版