在构建一个健壮的检索增强生成(RAG)系统时,文档分块是影响最终效果的关键预处理步骤。如果处理不当,再强大的语言模型也可能给出不准确或无关的回答。那么,究竟有哪些有效的分块策略呢?
在探讨具体方法前,我们先快速回顾一下RAG的典型工作流程:

简单来说,RAG 系统会将外部知识库中的文档转化为向量并存储起来。当用户发起查询时,系统会先检索出与查询最相关的文档片段,再将它们和原始问题一同交给大语言模型(LLM)来生成答案。
由于原始文档可能非常庞大,直接处理会超出模型限制,因此“分块”环节——即把大文档切分成更小、更易管理的片段——就显得至关重要。

这一步不仅确保文本能适配嵌入模型的输入尺寸,更直接关系到后续检索的效率和准确性,最终影响生成答案的质量。今天,我们就来深入解析五种主流的 RAG 文本分块策略,帮助你根据实际场景做出最佳选择。

1. 固定大小分块
这是最直观、最简单的分块方法。它根据预定义的字符数、单词数或标记数,将文本均匀地分割成等长的片段。

由于生硬地按长度切割可能会打断句子的语义连贯性,通常建议在连续的文本块之间保留一定的重叠区域(如上图中的蓝色部分)。这种做法很容易实现,并且因为所有块大小一致,简化了批处理操作。
然而,这种方法存在一个明显的缺陷:它常常会生硬地割裂完整的句子或思路。这导致关键信息很可能被分散在不同的文本块中,从而在检索时丢失重要的上下文。
2. 语义分块
语义分块的核心思想是根据文本的内在含义进行划分,而不仅仅是机械的长度。

其流程大致如下:
- 首先,根据句子、段落或主题章节等有意义的单元对文档进行初始分段。
- 接着,为每个分段生成对应的嵌入向量。
- 从第一个分段及其嵌入开始,计算它与下一个分段嵌入的余弦相似度。
- 如果相似度很高,则将这两个分段合并为同一个块。
- 持续添加新的分段,直到新增分段与当前块的余弦相似度出现显著下降。
- 一旦相似度骤降,就以此为边界结束当前块,并开始构建下一个新的块。
通过这种方式得到的文本块,能够保持语言的流畅性和思想的完整性。由于每个块都包含了更丰富的语义信息,通常能提高检索的准确率,从而帮助 LLM 生成更连贯、更相关的回答。
不过,这种方法依赖于一个阈值来判断“相似度是否显著下降”,而这个阈值往往需要针对不同的文档类型进行调整,增加了调优的复杂性。
3. 递归分块
递归分块结合了规则与灵活性,是一种分层处理的方法。

它的执行步骤很简单:
- 首先,利用文档固有的分隔符(如段落、章节标题)进行初始分块。
- 然后检查每个块的大小:如果某个块超过了预设的块大小限制,就递归地将其进一步分割成更小的块(可以使用不同的分隔符,如句子);如果块大小符合限制,则保留原状,不再分割。
与固定分块相比,递归分块也能较好地保持语义单元的完整性。它通过分层处理,在尊重文档结构的同时,确保最终的块大小可控。
当然,它的实现逻辑和计算复杂度会比简单规则分块稍高一些。
4. 基于文档结构的分块
对于本身结构清晰、格式规范的文档(如学术论文、技术手册、Markdown文件),直接利用其固有结构进行分块是一个非常有效的策略。

这种方法利用标题、章节、子章节、段落等标记来定义块的边界。它能完美保持文档的逻辑结构和层次关系,生成的块具有极高的可读性和结构性。
其前提是文档必须具备良好且统一的结构,对于结构混乱或格式不规范的文本则难以适用。另一个潜在问题是,由此产生的块长度可能极不均匀,有些节可能会很长,甚至超过模型上下文限制。此时,可以结合递归分块策略,对过长的节进行二次分割。
5. LLM 驱动分块
既然上述方法各有优劣,为什么不直接让最理解语义的 LLM 来帮我们分块呢?

我们可以设计特定的提示词,要求 LLM 根据对上下文和语义的理解,将文档分割成多个语义独立、内容完整的块。这种方法有望实现最高的语义准确性,因为它超越了简单的启发式规则,真正在“理解”的基础上进行划分。
但显而易见,这是五种方法中计算成本最高、最耗时的一种。同时,它同样受限于 LLM 的上下文窗口大小,对于超长文档可能需要额外的处理技巧。
如何选择?实践经验谈
总结来看,每种分块策略都有其适用场景和代价:
- 固定大小分块:实现简单,适合处理格式随意、对速度要求高的场景,但可能损害语义。
- 语义分块:在多数情况下表现良好,能平衡语义完整性和块大小,是值得优先尝试的通用策略。
- 递归分块:适合结构分明但内部章节长度不一的文档,在灵活性与可控性间取得平衡。
- 基于结构的分块:是处理高度结构化文档(如API文档、论文)的理想选择。
- LLM 驱动分块:能提供最优的语义划分,但计算开销最大,适用于对精度要求极高且资源充足的场景。
根据实践经验,语义分块往往是效果与成本兼顾的可靠起点。但最重要的是,没有“一刀切”的最佳方案。最终选择应基于你的具体内容特性、所使用的嵌入模型能力以及可用的计算资源进行充分的测试和评估。
优化 RAG 流水线的每一个环节,尤其是分块策略,是提升应用效果的关键。如果你在实践过程中有其他心得或疑问,欢迎到云栈社区与更多开发者交流讨论。