搞懂 RAG 里的 “分块”:21种分块策略

292 阅读10分钟

RAG概述

提到检索增强生成(RAG)技术,不少 AI 工程师都会有点 “爱恨交织”。理论上它很简单:从自己的自定义数据里找到相关内容,再让大模型(LLM)基于这些内容生成答案。但实际操作起来,大家常常陷入这样的循环:调整分块方式、换嵌入模型、换检索器、调排序器、改提示词…… 一圈下来,模型要么说 “我不知道”,要么瞎编一堆 “幻觉” 内容,让人头疼。

其实,在 RAG 流程里,有个看似不起眼却影响巨大的环节 —— 分块(Chunking)。数据的格式、结构、用途不一样,适合的分块方式也完全不同。选不对方法,模型要么抓不到重点,要么直接跑偏。今天就来聊聊 21 种常见的分块方法,帮你找到适合自己数据的 “打开方式”。

1. 朴素分块:按换行拆分,简单直接

朴素分块就像字面意思一样 “朴素”—— 按文本里的换行符拆分,一行就是一个块。

这种方法适合处理笔记、FAQ、聊天记录,或者逐行内容独立的转录文本。比如聊天记录里 “你说一句、我说一句” 的内容,换行拆分后每个块都能保留完整的对话单元。

不过要注意:如果每行内容太长,可能会超出大模型的 Token 限制;如果太短,又可能丢失上下文联系。

2. 固定窗口分块:不管语义,平均拆分

固定窗口分块不纠结语义,直接按固定的字符数或词数平均拆分,哪怕把一句话从中间切断也没关系。

它适合处理那些没什么结构的大型文本,比如扫描件里的乱码文本、格式杂乱的转录内容,或者纯文本数据。就像把一大块面包切成大小均匀的片,不用管面包里的 “馅料分布”。

3. 滑动窗口分块:保留重叠,兼顾连贯

滑动窗口分块和固定窗口类似,也是按固定长度拆分,但不同的是,相邻的块会有一部分重叠内容。

这种方法特别适合思路连贯的长文本,比如散文、报告、论文这类内容。重叠的部分能避免因拆分切断语义,让上下文更连贯。不过要注意权衡:重叠太多会浪费 Token,太少又可能断连,得找到平衡点。

4. 基于句子的分块:按标点 “断句”

顾名思义,这种方法会在句号、问号、感叹号这些标点后拆分,保证每个块都是完整的句子。

它适合处理博客、技术文档、摘要这类 “每句话都有独立思想” 的文本。比如一篇技术博客里,每句话都在解释一个小知识点,按句子拆分能精准保留完整语义。另外,它也常用来给更复杂的分块方法做 “预处理”,先把文本拆成句子再进一步处理。

5. 基于段落的分块:按段落 “抱团”

段落分块很简单,就是把每个段落当成一个块,通常以 “双换行” 作为拆分标志。

如果遇到结构清晰但没标题的文本,比如一些随笔、短文章,用这种方法很合适。当需要通过关键词判断段落主题是否切换时,段落分块也能帮上忙 —— 每个块的主题更集中,方便检索时定位。

6. 基于页面的分块:按 “页” 拆分,方便溯源

这种方法直接把 “一页内容” 当成一个块,比如 PDF 的一页、幻灯片的一页、扫描文档的一页。

它最适合处理 PDF、幻灯片、扫描文档这类天然分页的内容。如果你的检索系统需要显示 “答案来自第几页”,用页面分块能轻松实现页码引用,方便用户溯源核对。

7. 结构化分块:跟着 “格式标记” 走

结构化分块会盯着文本里的格式标记拆分,比如 HTML 里的<div>``<p>标签、日志里的时间戳、JSON 里的字段名等。

处理日志、JSON、HTML、CSV 这类结构化数据时,它能派上大用场。比如解析 JSON 数据时,按 “字段” 拆分能精准提取每个 key-value 对,避免把不同字段的内容混在一起。

8. 基于文档结构的分块:跟着 “标题层级” 走

如果文档有明确的标题、小节结构,比如 “第一章→1.1 小节→1.1.1 子小节”,就可以按这种自然结构分块。

教材、文章、报告、论文这类有清晰标题的文本,用这种方法最合适。分出来的块能和文档的章节结构对应,检索时能快速定位到 “某章某节” 的内容,逻辑更清晰。

9. 关键词分块:按 “关键词” 划界

关键词分块会在特定关键词处拆分文本,比如看到 “问题:”“主题:”“注意事项” 这些词,就把前后内容分成不同的块。

当处理无结构文档,但文本里有天然 “主题标记词” 时,这种方法很管用。比如一些会议记录里,经常用 “讨论点 1:”“结论:” 来分隔内容,按这些关键词拆分能精准抓住每个主题的核心。

10. 实体分块:围绕 “人 / 地 / 物” 聚块

实体分块会先通过命名实体识别(NER)技术找出文本里的 “人、地点、物品、机构” 等实体,再把和同一个实体相关的内容聚成一个块。

法律合同(涉及当事人、条款)、新闻稿(涉及事件人物、地点)、剧本(涉及角色对话)、案例研究(涉及核心对象)这类强调 “实体” 的文档,用它能让每个块聚焦一个核心实体,检索时更精准。

11. 基于 Token 的分块:按模型 “胃口” 拆分

Token 是大模型处理文本的基本单位,基于 Token 的分块就是按固定的 Token 数量拆分文本。

如果你的大模型有严格的 Token 限制,或者处理无结构文本时想精准控制每个块的长度,这种方法很合适。实际使用时,还可以结合句子分块,避免把一个句子拆成两个 Token 块,保证语义完整。

12. 基于主题的分块:按 “话题” 聚块

这种方法会先把文本拆成小单位(比如句子),再用主题建模技术(如 LDA、聚类)把讲同一个话题的内容归成一个块。

当文档包含多个主题但没有明显标记时,它能帮你理清逻辑。比如一篇杂谈类文章,可能一会儿聊科技、一会儿聊生活,主题分块能自动把 “科技相关” 和 “生活相关” 的内容分开,避免块内主题混乱。

13. 表格感知分块:单独 “拎出” 表格内容

表格感知分块会专门识别文档里的表格,然后按行、列或整个表格作为一个块。

处理含表格的报告、财务文档时,它能避免表格内容被拆得七零八落。比如财务报表里的收支表,按表格整体分块能保留完整的表头和数据对应关系,方便大模型理解表格逻辑。

14. 内容感知分块:“见招拆招” 灵活分块

内容感知分块很 “智能”—— 遇到表格就完整保留,遇到连续段落就合并,遇到列表就按列表项拆分,会根据内容类型动态调整策略。

如果处理的是图文混排、“正文 + 表格” 的混合格式文档,用它能避免单一分块方法的局限,让每种内容都按最合适的方式拆分。

15. 上下文增强分块:先 “加注释” 再分块

这种方法会先让大模型给文本添加上下文或摘要(比如给一段复杂内容加个小标题、写句总结),再进行分块。

处理财报、合同这类复杂文档时,它能帮分块 “带上背景”。如果知识库内容量不大,能整体放进大模型处理,加了上下文的块会让后续检索更精准。

16. 语义分块:按 “意思相近” 聚块

语义分块会先把文本拆成短句,再通过计算句子间的嵌入相似度,把意思相近的句子归成一个块。

当处理多主题长文档,用滑动窗口、段落分块效果都不好时,可以试试它。它不纠结 “句子在原文里是不是同一段”,只关注 “是不是在讲同一件事”,能避免因格式问题拆分语义。

17. 递归分块:先粗后细 “逐层拆”

递归分块就像剥洋葱,先把文本粗略拆分,再把每个粗块逐层细化拆分,直到每个块的长度符合要求。

内容长度波动大的文本,比如对话记录(有时一句话很短,有时一长段论述)、采访稿、发言稿,用它能避免出现 “有的块太长、有的块太短” 的问题,让块的长度更均匀。

18. 基于嵌入的分块:按 “语义相似度” 动态聚块

这种方法会先给每句话生成嵌入向量(用嵌入模型),再通过计算向量相似度,把语义接近的句子动态聚成一个块。

如果文本完全没有结构,滑动窗口等简单方法效果差,试试它。它能忽略文本表面的格式,只按 “意思是否相关” 分块,适合处理杂乱无章的自由文本。

19. 基于 LLM 的分块:让大模型 “自己判断”

简单说就是让大模型自己决定怎么拆分文本 —— 给它一段内容,告诉它 “按语义完整的方式拆成块”,让模型自主判断拆分点。

当内容复杂到需要 “人类级判断” 时(比如晦涩的学术论文、多角色交叉的剧本),可以用这种方法。不过要注意,它的计算成本较高,一般场景没必要用。

20. 分层分块:保留 “大纲到细节” 的结构

分层分块会把文本拆成多层级,比如 “章节→小节→段落”,每个层级都是一个块,同时保留层级间的上下文关系。

教材、手册、研究论文这类有明确层级结构的内容,用它能完美适配 “先看大纲、再看细节” 的阅读习惯。用户检索时,既能看到整体框架,又能深入具体段落,体验更流畅。

21. 模态感知分块:按 “内容类型” 分开处理

文档里常有文字、图片、表格等不同类型的内容,模态感知分块会把它们分开处理 —— 文字按文本规则分块,图片提取描述信息单独成块,表格按表格规则分块。

处理图文混排的文档(比如带图表的报告、含插图的手册)时,它能避免不同类型的内容互相干扰,让每种内容都用最合适的方式参与检索。

最后想说:分块的核心是 “量体裁衣”

分块看似只是把文本拆成小块,却直接影响 RAG 系统能不能精准找到有用信息。没有 “万能的分块方法”,关键是根据数据的格式(纯文本 / 表格 / 图文)、结构(有无标题 / 层级)、用途(检索精准度 / 阅读体验)选对方式。

选对了分块方法,大模型才能 “看懂” 你的数据,不再乱答或说 “不知道”—— 这正是 RAG 技术从 “理论可行” 到 “实践好用” 的关键一步。

更多大模型知识

↓↓↓↓↓↓↓↓

【码上有模力】