RAG 文档切分方法详解:从原理流程到常见策略与场景选择

RAG 文档切分是将长文档拆成语义相关文本块的关键步骤。它连接文档分析与向量检索,影响上下文组织。适合了解递归分块、语义分块和场景选择。

RAG 文档切分方法详解:从原理流程到常见策略与场景选择

RAG 文档切分是什么

RAG 文档切分,也常称为 Text Chunking 或 Chunking,是把加载后的长篇文档拆成更小、更易处理的文本单元。它是构建 RAG 流程中的关键步骤,目标不是简单按长度截断文本,而是让每个文本块尽量包含语义上相关的内容。

可以把一份长篇技术文档理解为一本书:如果直接把整本书交给检索系统,范围过大;如果先按章节、段落或主题拆成多个知识片段,后续检索就更容易定位到与问题直接相关的部分。

在 RAG 场景中,文本块通常会作为后续向量检索处理的对象。分块质量会影响检索返回的上下文是否聚焦,也会影响大模型基于上下文生成回答时能否抓住关键信息。

要点: RAG 文档切分的核心不是“切得越细越好”,而是把长文档切成大小适当、语义相关、便于检索的文本块。

文档切分处在 RAG 流程的哪一环

在典型 RAG 流程中,文档切分通常发生在文档准备和文档分析之后,并位于向量检索之前。也就是说,系统一般会先收集文档和测试查询,对文档结构与内容进行基本分析,再进入分块阶段。

阶段主要任务与分块的关系
文档准备收集、整理待处理文档为后续分析和切分提供输入
文档分析识别文档结构、内容类型和潜在边界帮助判断按章节、段落还是其他方式切分
文档切分将长文档拆成大小适当的文本块形成后续检索的基本候选单元
向量检索围绕用户问题查找相关文本块使用切分后的文本块作为检索对象

这个位置决定了文档切分既不是单纯的数据预处理,也不是检索之后的补救步骤。它更像是连接原始内容和检索系统的结构化环节:切分前需要理解文档,切分后要服务于检索。

高质量文本块需要满足什么条件

高质量文本块通常需要同时满足两个方向:大小适当,以及语义相关。大小适当可以避免一个文本块包含过多主题;语义相关则有助于检索时返回更聚焦的上下文。

大小要适当,避免超大数据块

在 RAG 分块中,应避免使用过大的数据块。过大的文本块可能把多个主题、多个问题或多个章节内容混在一起,导致检索系统虽然命中了文本块,却无法提供足够聚焦的上下文。

这里不宜机械套用固定长度。不同文档类型、内容密度和检索目标差异较大,分块大小应结合实际问题和文档结构调整。

语义要尽量集中

每个文本块应尽量包含语义上相关的内容。例如,一个解释“递归分块”的段落,最好不要与另一个无关的“部署成本”段落混在同一块中。语义更集中的文本块,更适合作为用户问题的检索候选。

分块质量检查清单

在设计或调整 RAG 文档切分策略时,可以用下面的清单检查:

  • 是否保留了标题、章节或页面板块等有助于理解上下文的结构信息?
  • 是否在关键解释、定义或步骤中间强行截断,造成上下文断裂?
  • 单个文本块是否包含过多无关主题?
  • 文本块是否适合作为后续向量检索的候选对象?
  • 测试查询命中后,返回的文本块是否能直接支持回答问题?

要点: 文本块不是越大越完整,也不是越小越精准。更重要的是让每个块在检索时承载一个相对清晰、可回答的问题范围。

常见 Chunking 方法及适用场景

RAG 文档切分可以有多种实现方式。常见方法包括按字符、Token、段落、递归和语义分块,也可以按页面板块进行切分。实际项目中,这些方法并不互斥,往往会结合文档结构和检索目标组合使用。

方法基本思路更适合的场景注意点
按字符分块按字符数量或近似长度切分文本文档结构较弱、需要快速建立初始方案可能切断句子或语义边界
按 Token 分块以 Token 数量作为主要边界需要控制文本块输入规模的场景仍需关注语义是否被切断
按段落分块以自然段作为基本单位段落主题相对清晰的文章、说明文档长段落可能仍需进一步拆分
递归分块按较大结构边界优先切分,必要时逐步细分标题、章节、段落层级比较清楚的文档需要选择合适的结构优先级
语义分块尽量让文本块内部内容语义相关主题边界比固定长度更重要的内容需要更多关注内容含义和边界判断
页面板块分割按文章、博客文章等有效内容板块切分长篇内容、内容类型多样的网站需要识别页面中真正有价值的内容区域

页面板块分割

页面板块分割适合把网页或站点内容按有效内容板块拆开,例如文章、博客文章或其他主要内容区域。对于长篇内容以及内容类型多样的网站,这种方式有助于避免把多个类型的页面内容混在同一个文本块中。

如果一个网站同时包含教程、博客、产品说明和帮助文档,可以先按页面板块或内容类型做初步区分,再在每个板块内部继续使用段落、递归或语义分块。

方法可以组合使用

在真实 RAG 项目中,很少只依赖一种分块方法。例如:

  • 对长篇网页,先按页面板块切分,再按段落或语义进一步拆分。
  • 对层级清楚的技术文档,先按标题结构递归切分,再检查文本块是否过大。
  • 对主题连续但边界不明显的内容,优先关注语义相关性,再结合长度控制。

递归分块与语义分块怎么选

递归分块和语义分块都是 RAG Chunking 中常见的思路,但它们关注的重点不同。递归分块更依赖文档的显式结构,语义分块更关注内容本身的主题连续性。

递归分块适合层级清晰的文档

递归分块适合具有多个层级结构的文档。例如一份技术文档可能包含一级标题、二级标题、段落和列表。递归分块可以优先按较大的结构边界切分;如果某一块仍然过大,再继续按更小边界拆分。

在工程实现中,RecursiveCharacterTextSplitter 可作为多层级结构文档分割的一种选择。它的价值在于帮助开发者按预设边界逐步拆分内容,而不是只做一次固定长度截断。

语义分块适合主题边界更重要的内容

语义分块的核心关注点是让文本块内部内容尽量保持语义相关。对于一些段落较长、主题逐步展开、但标题层级不够清晰的内容,单纯按字符或固定长度切分可能会破坏语义连续性。

这类场景下,应优先观察内容主题是否发生变化:如果前半部分在解释定义,后半部分在讨论应用限制,就不应为了凑长度把它们强行放在同一个文本块中。

可以用三个问题做初步判断

判断维度更倾向递归分块更倾向语义分块
文档层级是否清晰标题、章节、列表结构明显标题较少或结构不稳定
段落主题是否连续每个章节内部边界清楚主题在段落之间自然过渡
检索问题是否聚焦用户常问某个章节或步骤用户常围绕概念、解释或上下文追问

如果文档本身结构清楚,可以从递归分块开始;如果检索问题更依赖主题完整性,则需要更多关注语义边界。

面向落地的分块策略检查清单

落地 RAG 文档切分时,建议从用户问题和检索目标出发,而不是先决定某一种固定切分方法。分块策略的好坏,最终要看它是否能让向量检索返回相关、聚焦、可用于回答的文本块。

第一步:明确检索要回答的问题类型

先判断用户问题主要属于哪一类:

  • 事实型问题:需要找到某个定义、参数、步骤或结论。
  • 段落解释:需要返回一段相对完整的说明内容。
  • 长文档综合理解:需要跨多个片段理解文档内容。

不同问题类型对文本块的要求不同。事实型问题通常需要更聚焦的文本块;解释型问题需要保留足够上下文;长文档综合理解则可能需要多个相关文本块共同支持。

第二步:根据文档类型选择初始方法

文档类型或内容特征可优先考虑的方法选择理由
长篇网页、内容类型多样的网站页面板块分割先分离有效内容区域,再进入细粒度切分
标题、章节、列表层级清楚的文档递归分块可利用结构边界逐层拆分
段落主题清晰的文章段落分块自然段本身往往承载相对完整语义
结构较弱但需要快速处理的文本字符或 Token 分块便于快速建立初始方案,但需要后续检查语义断裂
主题边界比长度更重要的内容语义分块有助于保持文本块内部主题一致

第三步:检查文本块是否适合作为检索对象

完成初始分块后,不应只检查块数量,还要检查文本块本身是否适合进入后续检索流程:

  • 是否过大,导致一个块中包含多个主题?
  • 是否过度切碎,导致回答问题所需上下文不完整?
  • 是否保持语义相关?
  • 是否保留必要标题、段落或上下文线索?
  • 是否能作为向量检索返回给大模型的候选上下文?

第四步:用测试文档和测试查询迭代

分块策略需要结合测试文档和测试查询观察效果。可以选取一组典型问题,查看检索结果是否返回了相关文本块:

观察项可能问题调整方向
检索命中的文本块太泛文本块过大或主题混杂缩小块范围,按段落、标题或语义重新切分
命中文本块缺少关键上下文切分过细或切断解释链路调整切分边界,保留必要上下文
经常命中无关页面区域页面结构未处理好先做页面板块分割,区分主要内容区域
层级文档命中不稳定未利用标题和章节结构尝试递归分块,保留结构边界

要点: 好的 RAG 文档切分策略通常来自迭代:先基于文档结构选择初始方法,再用测试查询观察检索结果,最后围绕文本块大小和语义相关性持续调整。