RAG 实践:分块策略如何影响检索质量

同样的嵌入模型,换一种切法,召回可能天差地别。分块是 RAG 里最被低估的旋钮。

检索增强生成(RAG)的链路很长:解析 → 分块 → 嵌入 → 索引 → 检索 → 重排 → 生成。其中「分块」看起来机械,却直接决定每条向量代表什么语义。

三种常见策略

1. 固定长度

按 token 或字符数切片,实现简单,吞吐高。缺点是容易切断句子与代码块,上下文破碎。

2. 语义 / 结构分段

按标题、段落、空行或 Markdown 结构切。中文技术文档通常更受益:一节一义,检索更「整」。

3. 重叠窗口

在固定或结构切分上加 overlap(如 10%–20%),缓解边界信息丢失,但会增加索引体积与重复命中。

一组朴素对比结论

在自建的约 200 篇中文技术笔记语料上(非严格学术实验),观察大致如下:

  • 纯固定长度(512 token、无重叠):短问句召回尚可,跨段概念题易漏。
  • 按二级标题切 + 段内再限长:长文档问答更稳,代码示例完整性明显更好。
  • 标题切 + 64 token 重叠:边界题提升,但 Top-K 里重复块变多,需要简单去重。

实用建议

  1. 优先保留文档结构(标题路径写入 metadata)。
  2. 块大小对准下游模型上下文与嵌入模型舒适区,而不是越大越好。
  3. 检索后做「父子块」扩展:命中小块,拼回所属章节再喂给 LLM。
  4. 用固定黄金问题集回归,而不是凭感觉调参。
分块没有银弹。目标不是「切得漂亮」,而是让检索到的片段足以支撑一次正确回答。

小结

先结构、后长度、再重叠;把标题路径当作一等公民。RAG 的质量,往往死在切碎的那一刻,也活在切对的那一刻。