5万篇中英文混合文档入库后,系统能返回结果,却经常只找到不够用的片段。答案看似沾边,关键数字、条款前提或时间范围却丢了。调整 Embedding 后,召回率仍停在 78%。
问题随后转向了入库前的一步:文档究竟该怎么切。
固定字符切分很容易破坏原文结构。条款标题留在上一块,具体定义落到下一块;时间和统计口径被拆开;两个没有关联的段落又可能因为长度刚好而挤进同一块。53AI 在 2025 年 6 月 24 日发布的分块策略文章中也提到,模型可能把“预计2025年增长10%”误读成历史数据。上下文一旦被切散,后面的向量检索和生成模型都很难补救。
测试环境没变,只换分块方法
这轮复测保持底层模型、向量数据库和文档集不变。测试集包含 5 万篇技术手册、财务报表、合规文档和代码注释,中英文内容混合。
评估记录了三项指标:Recall@K、单次查询延迟,以及答案能否准确到无需人工二次校对。原始测试记录没有列出 Embedding 的具体型号、Recall@K 中的 K 值和硬件配置,因此下面的数据适合观察同一环境里的相对差异,不宜直接当作行业基准。
五种切法,代价各不相同
滑动窗口:改动最小,冗余也最明显
基线方案按 500 token 切分,相邻块重叠 100 token。召回率从 78% 提高到 82%,平均延迟为 120ms,但索引体积增加了 20%,查询延迟较原方案上升 15%。
重叠确实能缓解句子被截断的问题,也会让同一事实反复出现在多个块中。测试中,一些重复片段进入候选结果后干扰了排序,高置信度的错误答案反而排得更靠前。
Markdown 结构分块:标题本身就是检索线索
该方案解析 H1 至 H3 标题,并把父级标题保留在块的元数据中。召回率达到 88%,平均延迟 110ms,索引体积仅增加 5%。
它在技术手册、教程和制度文档中表现稳定。用户询问“某条款”时,系统能够同时看到条款内容及其所属章节。博客园作者 knqiufan 对 RAG 召回率的分析也强调了标题与正文关联的重要性。
短板出现在缺乏标题的大段纯文本中。合同正文或连续叙述没有明确的层级边界,结构解析能利用的信息有限,效果有时还不如滑动窗口稳定。
语义分块:逻辑更连贯,预处理更重
语义分块通过嵌入模型计算相邻段落的相似度,低于阈值时再切开。测试召回率为 91%,平均延迟 180ms,索引体积增加 10%。
这套方法减少了逻辑段落被拦腰切断的情况,但需要逐段计算语义距离,预处理时间增加到原来的 3 倍。中文样本中的切分点也更不稳定,阈值稍有变化,就可能出现块过大或过碎的问题。
Late Chunking:长文档效果突出,对上下文窗口要求高
本次实现先按整章等较大范围获取表示,再在生成阶段收窄上下文。它减少了过早切分带来的信息碎片,在复杂推理任务上的得分最高,召回率达到 93%。
代价同样清楚:平均延迟 200ms,为五种方案中最高;索引体积增加 15%。如果模型的上下文窗口限制在 8k 以内,较长父级内容仍有被截断的风险。
Parent-Child:小块负责命中,大块补足背景
Parent-Child 同时保存两种粒度。较小的子块进入向量索引,用来提高检索精度;命中子块后,系统再取回对应的父块,交给生成模型使用。
这套方案取得了 94% 的召回率,平均延迟 160ms,索引体积增加 12%。延迟高于 Markdown 结构分块和滑动窗口,但低于语义分块与 Late Chunking。最终答案质量也是五种方案中最高的。
数据放在一起更容易判断
| 方案 | 召回率 | 平均延迟 | 索引体积增幅 | 更适合的文档 |
|---|---|---|---|---|
| 滑动窗口 | 82% | 120ms | +20% | 简单问答、预算有限的项目 |
| Markdown 结构分块 | 88% | 110ms | +5% | 手册、教程、制度文档 |
| 语义分块 | 91% | 180ms | +10% | 逻辑连续的长文本 |
| Late Chunking | 93% | 200ms | +15% | 复杂推理、长上下文任务 |
| Parent-Child | 94% | 160ms | +12% | 通用企业知识库 |
Parent-Child 的优势不只体现在 94% 这个数字上。它把检索粒度和生成粒度拆开处理,既能用小块提高命中精度,也能让模型看到定义、条件和例外条款所在的完整段落。
在财务数据和时间节点类问题中,测试记录显示其幻觉率约下降 40%。不过,现有记录没有注明该数据的对照组和统计口径,更适合作为内部选型信号,不能直接外推到其他知识库。
分块解决不了所有漏检
53AI 给出的另一个例子很典型:用户问“钱放货币基金安全吗?”,文档标题却是“货币市场基金信用风险分析”。口语提问与专业术语之间存在明显表述差异,即使文档切得完整,单纯依赖语义向量仍可能漏检。
数字、日期和低频专业术语也需要单独检查。分块上线前,应先完成文档去噪和格式标准化,尤其是中英文混排时的标点、特殊字符与标题层级。Embedding 模型对专业术语的表示能力同样会影响结果,不能把所有问题都归因于切分策略。
选方案时,先看手里的文档
如果知识库主要由 Markdown 手册、教程或规章制度组成,结构分块通常已经够用。它的召回率达到 88%,延迟和索引成本也是五种方案中较低的一档。
研发资料、法律合同和财务文档更依赖上下文完整性,Parent-Child 更均衡:94% 的召回率、160ms 的平均延迟,没有 Late Chunking 那么重,也比单纯的语义分块更适合通用问答。
需要处理复杂推理和超长文档时,可以考虑 Late Chunking,但要先确认模型上下文窗口和计算资源。滑动窗口则适合快速搭建基线,不适合长期依赖大量重叠来修补切分问题。
上线后也别只看总召回率。把漏检问题拆开记录:是相关块完全没找到,还是只找到半段;是排序出了问题,还是生成模型忽略了证据。只有把失败样本分清楚,下一轮调整阈值、分块大小或 Embedding 模型才有依据。