目录
[1.固定长度分块-Fixed‑size Chunking](#1.固定长度分块-Fixed‑size Chunking)
[2.递归字符分块-Recursive Character TextSplitter](#2.递归字符分块-Recursive Character TextSplitter)
[3.句子级分块-Sentence‑level Splitting](#3.句子级分块-Sentence‑level Splitting)
[4.语义分块 Semantic Chunking](#4.语义分块 Semantic Chunking)
[5.结构感知分块-Structure‑aware Chunking](#5.结构感知分块-Structure‑aware Chunking)
[6.LLM 智能分块-Agentic Chunking](#6.LLM 智能分块-Agentic Chunking)
[7.父子分块 Parent‑Child Chunking(分层分块)](#7.父子分块 Parent‑Child Chunking(分层分块))
[8.多模态分块(图文混排 PDF)](#8.多模态分块(图文混排 PDF))
[方案 1:小表格(整体 token≤500)](#方案 1:小表格(整体 token≤500))
[方案 2:超大 / 跨页长表格(token>800,几十上百行)](#方案 2:超大 / 跨页长表格(token>800,几十上百行))
[方案 3:扫描版 PDF,表格解析失败](#方案 3:扫描版 PDF,表格解析失败)
分块是 RAG 的预处理核心,目标:块不能太大(噪声多、语义弥散),不能太小(语义断裂、上下文不足),直接影响召回质量。下面按:基础固定策略、语义感知分块、文档结构感知、高级智能分块、多模态分块,分别说明优缺点与适用场景。
原始待切文本(统一样例文本,用于对比大部分分块算法):
文本 A :
大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。索引阶段:文档加载、文档分块、向量化、存入向量数据库。查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。
1.固定长度分块-Fixed‑size Chunking
最经典、实现最简单。设置固定chunk_size(token / 字符)、chunk_overlap,滑动窗口切割,完全不看句子、段落、语义边界,到长度就切一刀。
参数示例:
chunk_size=120字符,overlap=30字符
- Chunk1:大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。索引阶段:文档加载、文档分块、向量化、存入向量数据库。查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型
- Chunk2:把检索到的上下文连同问题喂给大模型生成答案。RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。
问题:Chunk1 末尾句子被硬生生截断 "喂给大模型",后半句跑到下一个 chunk。语义断裂。


- ✅优点:实现最简单,速度最快;兼容任意脏文本;原型快速验证首选。
- ❌缺点:暴力切割,经常切断句子、逻辑单元;重叠带来重复内容。
- 🙂 适用:爬虫网页、无格式杂乱文本、快速 POC 原型。
2.递归字符分块-Recursive Character TextSplitter
多级分隔符,优先用大分隔符切,切完如果块依旧超过 size,就使用下一级更细分隔符继续切 。 默认分隔符优先级:["\n\n", "\n", "。", "!", "?", ",", " "]
- 优先按段落
\n\n切; - 如果块还是太大,换行
\n切; - 还大,按句号句子切;逐级往下,直到块尺寸达标。

Chunk1:大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。索引阶段:文档加载、文档分块、向量化、存入向量数据库。
Chunk2 :查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。
Chunk3:RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。
- ✅优点:工业界 RAG 基线方案;尽量保证句子完整;支持 markdown。
- ❌缺点:不懂语义,只看标点符号;如果一大段没有句号的长文本,退化成固定长度切割。
- 🙂 适用:Markdown 文档、技术文档、报告,绝大多数生产项目的基线。
3.句子级分块-Sentence‑level Splitting
原理
第一步:NLP 工具先完整切出一个个独立句子;
第二步:把连续多个句子累积拼接,接近目标 chunk_size 就停止,形成块。切割边界永远在句子末尾,不会切破一句话内部。
文本 A 拆出原始句子列表:
- 大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。
- RAG 分为索引阶段和查询阶段。
- 索引阶段:文档加载、文档分块、向量化、存入向量数据库。
- 查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。
- RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。
- 分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。
目标块大小:2 个句子为一块
Chunk1: 大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。
Chunk2:
索引阶段:文档加载、文档分块、向量化、存入向量数据库。查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。
Chunk3:
RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。
4.语义分块 Semantic Chunking
不依赖标点、长度;依靠 Embedding 向量相似度判断语义边界。
流程:
- 根据句子、段落、主题等有语义内涵的单位对文档进行分段创建嵌入;
- 计算相邻片段 embedding 余弦相似度;
- 相似度低于设定阈值,代表主题发生跳转,在此处分割出新 chunk。

5.结构感知分块-Structure‑aware Chunking
利用文档本身的层级结构(标题、章节、条款、列表)作为天然分割边界。

# RAG基础介绍 ## 1.什么是RAG RAG通过外部知识库补充大模型固有知识,缓解幻觉。 ## 2.RAG两大阶段 ### 2.1索引阶段 文档加载、文档分块、向量化、存入向量数据库。 ### 2.2查询阶段 用户query向量化、相似度检索、上下文送入大模型生成答案。 ##3.RAG影响因素 RAG性能受分块策略、Embedding、检索器、重排器共同影响。
真实 PDF 场景:MinerU 解析 PDF,提取标题树,基于标题树做结构分块。
- ✅优点:贴合文档原生知识单元;保留章节归属信息。
- ❌缺点:扫描 PDF 没有标题结构,直接失效;依赖文档解析质量。
- 适用:PDF 技术手册、标准规范、书籍、markdown 知识库。
6.LLM 智能分块-Agentic Chunking
交给大模型理解全文逻辑,识别知识单元,输出切分后的块数组。给 LLM 写 Prompt,让它做分块工作。

Prompt 示例:
将下面文本切分成语义完整的知识块,每个块 300‑500token,不要割裂完整逻辑,不要修改原文,输出 JSON 数组。 文本:【文本 A】
LLM 输出返回:
[
"大模型检索增强生成(RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG分为索引阶段和查询阶段。索引阶段:文档加载、文档分块、向量化、存入向量数据库。",
"查询阶段:用户query向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。",
"RAG性能受分块策略、Embedding模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。"
]
- ✅优点:语义理解最强,可以处理逻辑混乱、混杂多类型内容文档。
- ❌缺点:调用 LLM 成本高、速度慢;有小概率篡改原文、幻觉;不适合百万级海量文档。
- 适用:少量高价值文档,合同、复杂白皮书。
7.父子分块 Parent‑Child Chunking(分层分块)
解决经典矛盾:小块检索准,但是上下文信息不足;大块上下文完整,检索噪声大。
- 父块 Parent :大块(1000‑2000token)保存完整原文上下文,不入库向量库;
- 子块 Child:父块再切割成细粒度小块(200‑400token),子块做 Embedding 存入向量库;
- 检索流程:用户 query 检索向量库命中子块;通过 ID 映射,取出子块对应的完整父块,把父块交给 LLM 做回答。
原始父块(完整一大段,不入库向量库)
【父块】大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。索引阶段:文档加载、文档分块、向量化、存入向量数据库。查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。
父块切出 2 个子块,子块向量化入库:
Child‑1:大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。
Child‑2:查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。
检索例子:用户问 "RAG 查询阶段做什么?",向量检索命中 Child‑2;系统不直接把 Child‑2 丢给 LLM,而是取出 Child‑2 对应的完整父块全部文本送入 LLM。
- ✅优点:兼顾细粒度检索召回,同时提供完整上下文;生产 RAG 非常常用优化手段。
- ❌缺点:存储翻倍;需要维护父子 ID 映射关系。
- 适用:几乎所有生产 RAG 系统。
8.多模态分块(图文混排 PDF)
图文混合文档,文本、图表不能混切在一起。
- 文本部分使用结构分块;
- 图表单独提取,图片做 image embedding;
- 图注文字必须和图表绑定为同一个 chunk,不要拆开。
样例 PDF 片段:
图 1 RAG 系统整体架构图
(图片)
图注:RAG 系统分为索引阶段与查询阶段两大模块。索引阶段负责文档处理,查询阶段负责检索生成。
❌错误切分:把图注和图片拆开,图注跑到别的文本块;
✅正确切分:一个独立多模态 chunk :[图片] + 图注文字:图1 RAG系统整体架构图。RAG系统分为索引阶段与查询阶段两大模块。索引阶段负责文档处理,查询阶段负责检索生成。
-
✅优点:图表信息不会丢失;
-
❌缺点:依赖 PDF 解析工具 MinerU/PyMuPDF;向量库需要支持多模态 embedding。
-
适用:论文 PDF、带大量图表技术手册。
PDF原始文档
↓
MinerU布局解析 → 识别text / title / table / image元素
↓
遍历元素列表
if 元素类型 == text/title:普通结构分块/递归分块
elif 元素类型 == table:
提取标题、表注、markdown表格
if token ≤500:整体作为table‑chunk
else:按N行切片,每片复制表头,生成多个table‑child‑chunk
存入父子映射,完整表格作为parent存入KV存储
elif 元素类型 == image:多模态图片chunk
↓
全部子块(文本子块+表格子块+图片子块)向量化入库
↓
查询:检索命中子块 → 取出parent父块送入LLM
9.PDF表格如何分块
❌绝对禁止:普通递归 / 固定长度分块直接切表格。 普通文本分块会把表格从中间拦腰切断,丢失表头,单元格错位,召回出来的片段完全失去业务含义。
示例错误切分(灾难案例) 原始 markdown 表格:
表格
参数 数值 单位 电压 220 V 功率 1500 W 被递归分块从中间切断,得到:
Chunk:| 参数 | 数值 | 单位 | |----|----|----| | 电压 | 220|
下一个 chunk:
Chunk:V| | 功率 | 1500|W|
模型拿到
V|功率|1500|W,完全分不清哪一列对应什么。
依赖布局解析器(MinerU /pdfplumber/ Unstructured.io),识别文档元素类型:text / table / image / title。
表格必须识别为独立
table对象,不和前后文本粘连在一起,拿到:
- 表格标题 / 表注(非常关键,必须绑定表格)
- 表格结构化内容:markdown/html
- 元数据:所属章节路径、页码、坐标。
三种表格分块策略(按表格大小区分)
方案 1:小表格(整体 token≤500)
------ 整张表格作为独立 Chunk(最常用)
规则:
- 把表标题 + 表注 + 完整 markdown 表格打包成一个独立 chunk;
- 不要把表格和前后大段文本混在同一个 chunk;
- 前后少量关联说明文字可以一起打包进来;
- 该 chunk 作为原子单元,不再做递归切割。
✅生成 Chunk 示例:
### 表1 设备参数表
|参数|数值|单位|
|----|----|----|
|额定电压|220|V|
|额定功率|1500|W|
|工作温度|-10~60|℃|
表注:设备选型需要结合电压、功率参数综合评估。
元数据 :{type:"table", table_name:"表1 设备参数表", section_path:"第三章>设备参数"}
向量库存入这个 markdown 文本,普通 text‑embedding 模型就可以检索。
用户提问 "设备额定功率多少?" 召回整个表格 chunk,直接喂给 LLM。
方案 2:超大 / 跨页长表格(token>800,几十上百行)
------ 按行切片,每一片都强制带上表头
核心铁律:任何一个表格子 chunk,不能没有表头,否则召回出来的行没有列含义,完全无效。
原始大表格:表头 A B C D,共 30 行数据。 设置:每 8 条数据行为一个子 chunk。
- Table‑Child‑1:表头 + 第 1‑8 行
- Table‑Child‑2:表头 + 第 9‑16 行
- Table‑Child‑3:表头 + 第 17‑24 行
- Table‑Child‑4:表头 + 第 25‑30 行
每一个子块都带上:表格标题、表注、完整表头,再带上对应数据行。
示例:
### 表2 设备清单(节选)
表头:|设备编号|型号|电压|功率|
|--------|----|----|----|
|D001|A‑1|220V|1000W|
|D002|A‑2|220V|1500W|
......(共8行)
工程实践:
- 长表格同样适配父子分块架构:完整原始大表格作为父块存入 KV 存储;切出来的带表头行片段作为子块向量化入库;命中子块后取回完整原始大表格父块给 LLM。
- 禁止直接把表格转纯自然语言句子丢失行列结构;优先保留 markdown 表格格式。
方案 3:扫描版 PDF,表格解析失败
(OCR 识别错乱,拿不到 markdown)
两条可选路线:
- VLM 图像检索路线:把表格区域截图,作为图片 chunk,使用多模态 embedding(如 Qwen‑VL‑Embedding)对图片做向量入库;query 用文本检索图片向量库;生成阶段送入 VLM 模型读取图片内容。
- VLM 做结构化复原:把表格截图丢给 VLM,强制输出 markdown 表格,再走方案 1/2。
缺点:图像 embedding 检索召回精度不如文本,成本更高;优先尽量做结构化解析。
表格与周围文本如何处理
(非常容易踩坑)
场景 A:表格前面有一大段介绍文字,后面有一大段分析文字
【前文】本节介绍设备各项电气参数,下面表格汇总关键指标。 【表 1 设备参数表】 【后文】由上表可见,额定功率决定设备能耗,选型时重点关注功率指标。
✅正确分块:
- Chunk1:前文介绍文字(普通文本块)
- Chunk2:表标题 + 完整表格 + 表注(独立表格块)
- Chunk3:后文分析文字(普通文本块)
不要把大段前文 + 表格 + 大段后文全部塞到同一个块,会造成块过大,embedding 混杂多主题。
✅边界例外:如果前后文字很短(一两句话),可以和表格合并为一个 chunk。
❌错误:直接把表格混在大段文本中间,交给 RecursiveCharacterTextSplitter 自由切割。
父子分块如何结合表格(生产环境标准做法)
- 父块 :完整原始表格(markdown + 标题 + 全部行),存入 KV 存储,不向量化。
- 子块 :
- 小表格:子块 = 完整表格;
- 超长表格:切分多行片段,每段子块携带完整表头 + 表标题;子块做 embedding 存入向量库。
- 查询阶段: 用户问题命中某一个表格子块 → 通过 parent_id 取出完整原始表格父块 → 将完整表格送入 LLM 回答。
好处:检索用细粒度子块更容易命中某几行;生成时拿到完整全量表格,不会只有局部片段。
表格摘要子块(双索引策略)
对于非常大的业务表格,增加一个摘要子块:
- 子块 A:表格结构化 markdown 片段(用于精确数值查询)
- 子块 B:VLM/LLM 生成的表格文本摘要(用于语义类问题检索) 两者都绑定同一个 parent_id,检索命中任意一个,都取回完整父表格。
示例摘要:
表 1 设备参数表,记录设备额定电压 220V,额定功率 1500W,工作温度‑10~60℃。
适合:用户问 "设备工作条件是什么",更容易命中摘要子块。
表格分块避坑清单
- ❌不要丢弃表格标题、表注;标题表注必须和表格绑定在同一个 chunk。
- ❌长表格切片,绝不允许丢掉表头。
- ❌不要把 markdown 表格直接交给普通递归分块器切割。
- ✅表格 chunk 必须打元数据标记
type="table",方便后续检索、重排、过滤。 - ✅能解析出 markdown 就优先 markdown;扫描解析失败再走图片 VLM 路线。
- ✅跨页表格,解析阶段先合并为一张完整逻辑表格,再执行分块,不要按物理页切分。
