人人都会AI编程

6.4 文本分块技术

更新时间:2026-07-12

文本分块(Text Chunking)是 RAG 系统中影响检索质量的关键前置步骤。它的任务是将原始文档切分成若干大小适中的片段,使得每个片段既能独立表达一个相对完整的意思,又能被高效检索和准确命中。分块策略的好坏,直接决定了后续向量检索的召回率和回答的准确性。

6.4.1 为什么需要分块

原始文档通常很长,一篇产品手册可能有上百页,一份合同也动辄数千字。直接把整篇文档转成一个向量并不可行,原因有三:

  • 嵌入模型有长度上限:大部分嵌入模型支持的输入长度有限(如 512 token、8192 token),超长文本会被截断,丢失关键信息。
  • 长文本向量“焦点模糊”:一篇跨章节的完整文档,其语义分散在多个主题上,转换成单一向量后,与具体问题的相关性反而会被稀释。
  • 生成上下文窗口有限:即使能检索到整篇文档,大模型的生成窗口也无法一次塞入全部内容,且无关内容过多会干扰回答质量。

分块的目的,就是将文档拆解成“可独立检索、可独立引用”的最小语义单元,让检索能够精准命中相关内容,同时不妨碍生成时拼接多个块提供完整上下文。

6.4.2 常见的分块策略

1. 固定大小分块(Fixed-size Chunking)

按预设的 token 数量或字符数进行切分,例如每 500 个 token 切成一块。这是最简单、最通用的方法。

  • 优点:实现简单,计算量小,块大小一致便于批量处理。
  • 缺点:容易在句子或段落中间切断,破坏语义完整性,降低检索效果。

实用改进:在固定大小的基础上加入“重叠”(overlap),即相邻块之间保留一部分重复文本。比如块大小 500 token,重叠 50 token,可以避免关键句被截断在两个块的边界。

2. 基于句子的分块(Sentence-based Chunking)

以标点符号(句号、问号、感叹号等)作为切分边界,保证每个块在自然语言边界处断开。

  • 优点:保持句子完整,不易切断语义。
  • 缺点:句子长短不一,可能导致块大小差异大,影响检索的稳定性。

3. 基于段落的分块(Paragraph-based Chunking)

按自然段落(通常由换行符界定)进行分块。一个段落往往表达一个完整的小主题,语义内聚性强。

  • 优点:语义完整,检索到的内容更容易被直接引用。
  • 缺点:段落长度不可控,太长的段落可能超出嵌入限制,太短的段落可能信息量不足。

4. 递归分块(Recursive Chunking)

这是目前许多 RAG 框架(如 LangChain、LlamaIndex)默认采用的方式。它先按较大的分隔符(如 \n\n)尝试切分,如果某一块仍然过长,再用更小的分隔符(如 \n,然后是句号、空格)继续切分,直到每一块都小于预设长度。

  • 优点:尽可能尊重文档的自然结构(章、节、段),同时保证块大小不会超限。
  • 缺点:实现稍复杂,需要预定义分隔符优先级。

5. 语义分块(Semantic Chunking)

利用嵌入模型计算相邻句子之间的语义相似度,当相似度出现明显下降时,判定为话题切换点,在此处切分。

  • 优点:每个块内部语义高度一致,检索精度高。
  • 缺点:计算开销大,需要调用多次嵌入模型,实时性差;对短文本或碎片化文档效果不明显。

6. 特定文档结构分块

对于格式规整的文档(如 Markdown、HTML、PDF 中的表格),可以利用结构信息进行分块。例如,按 Markdown 标题层级切分,按表格的行或单元格切分。这种方法能最大程度保留结构化信息,方便后续检索和引用。

6.4.3 关键参数:块大小与重叠量

两个参数对最终效果影响巨大:

  • 块大小(chunk size):太小的块信息量不足,难以准确回答需要一定上下文的问题;太大的块包含太多无关内容,会淹没关键信息,且增加生成成本。通常建议在 256~1024 token 之间,具体需根据文档类型和嵌入模型调整。经验上,512 token 左右是较均衡的起点。
  • 重叠量(overlap):重叠可以缓解边界切断问题,但会增加存储和计算量。建议在块大小的 10%~20% 之间选取,例如块大小 500 token,重叠 50~100 token。

6.4.4 分块中的实用建议

  • 保留元数据:每个块应附带来源信息,如文档名、章节标题、页码。这些元数据在生成时可用于引用,也可在检索时作为过滤条件。
  • 避免“孤岛块”:如果文档中有列表或编号项,尽量保证列表项与其上方的总述性句子在同一个块内,否则单独检索到一个编号项可能语义不明。
  • 测试驱动选择策略:没有一种分块策略适用所有场景。建议选取有代表性的问题集,分别测试几种分块方法,比较召回率和最终回答的准确度,再确定最适合当前文档库的策略。
  • 与检索方式配合:如果采用混合检索(如同时使用向量检索与关键词检索),可以适当加大块大小,并依赖稀疏检索提升精准度;若纯向量检索为主,则需要更精细的语义分块。

6.4.5 真实场景下的选择示例

  • FAQ 知识库:内容本身已经是短小的问答对,可直接将每个问答作为一个独立块,几乎不需要再额外分块。
  • 技术手册:文档结构清晰,宜采用递归分块,按标题层级自然划分,再限制最大块长。
  • 法律合同:条文编号严格、语义独立性强,适合按条款编号分块,每条一款作为一个块。
  • 新闻或长报告:段落长短不一,可采用基于段落的分块,并对过长的段落做递归切分。

文本分块看似是一个工程细节,却是 RAG 系统从“能跑”到“好用”的关键桥梁。花一些时间在分块策略的选型与调优上,往往能获得比更换模型或复杂检索算法更高的投入产出比。