一句话:递归分块(Recursive AI 词典:Chunking">Chunking)是按「先粗后细」的顺序,依次用一组分隔符去切文档;切出来的片段如果还是超长,就换下一级更细的分隔符继续切,直到每一段都不超过设定长度为止。
先看一个类比
想象你要把一本厚书塞进一排尺寸固定的收纳盒。你不会拿剪刀量着 30 厘米剪一刀——你会先按「章」分;某章塞不下盒子,就按「节」分;节还塞不下,再按「段」分;最后才按「句」、按「词」分。切到哪一级为止?切到这块能放进盒子为止。
这就是「递归」的含义:同一个切分动作,在不同层级上反复调用,每次都在上一轮切出来的「超长片段」上继续工作。
实现上长什么样
一般会给分块器传一个分隔符列表,顺序从最粗的边界排到最细的边界,大致是这样:
```
["\n\n", "\n", "。", "!", "?", ";", ",", ""]
```
先按空行切段落;某一段太长,就按单换行切行;某一行还太长,就按句号切句子;句子仍然太长,才退到按字符硬切——列表最后那个空字符串就是兜底选项。每一层切完都要检查长度,不合格就带着下一级分隔符继续递归。
通常还会加一点 overlap(重叠):相邻两块保留一小段重复内容,避免答案正好卡在边界上被劈成两半。
和相邻概念的区别
| 方式 | 边界依据 | 成本 | 特点 |
|---|---|---|---|
| 固定长度分块 | 字符数 | 极低 | 简单,但常把句子劈成两半 |
| 递归分块 | 分隔符优先级 + 长度上限 | 低 | 优先落在自然边界,兜底硬切 |
| 语义分块 | 相邻句子的向量相似度 | 高 | 边界更准,需要额外模型推理 |
| 父子分块 | 检索用小块、生成用大块 | 中 | 解决的是「切多大」,不是「怎么切」 |
一句话区分:固定长度分块不管内容,语义分块靠模型算,递归分块靠文档本身的标点与换行结构——便宜、确定、可复现。
对从业者的实际意义
它是大多数 RAG(检索增强生成)流水线的默认起点。不知道用什么参数时,先用它。
几个具体坑:中文语料照抄英文的 \n\n 常常失效,因为 PDF 抽出来的文本段落之间可能全是单换行,第一层分隔符根本不触发,直接掉到按句号切;代码块、表格、Markdown 标题这些有强结构的内容,往往需要自定义分隔符或专门解析器,否则会被切得七零八落;长度上限和重叠量没有普适最优值,取决于你的语料密度和下游模型,最终以你在真实数据上的检索效果为准。
对普通职场人来说,理解这一点的价值在于:当你问一个基于公司文档的问答机器人,它答得驴唇不对马嘴时,问题未必在模型,很可能出在文档被切碎的那一刀上。
