【LLM&&AI应用开发 八股文】--RAG的分块策略

目录

[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))

9.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", "。", "!", "?", ",", " "]

  1. 优先按段落\n\n切;
  2. 如果块还是太大,换行\n切;
  3. 还大,按句号句子切;逐级往下,直到块尺寸达标。

Chunk1:大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。索引阶段:文档加载、文档分块、向量化、存入向量数据库。

Chunk2 :查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。

Chunk3:RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。

  • ✅优点:工业界 RAG 基线方案;尽量保证句子完整;支持 markdown。
  • ❌缺点:不懂语义,只看标点符号;如果一大段没有句号的长文本,退化成固定长度切割。
  • 🙂 适用:Markdown 文档、技术文档、报告,绝大多数生产项目的基线。

3.句子级分块-Sentence‑level Splitting

原理

第一步:NLP 工具先完整切出一个个独立句子;

第二步:把连续多个句子累积拼接,接近目标 chunk_size 就停止,形成块。切割边界永远在句子末尾,不会切破一句话内部

文本 A 拆出原始句子列表:

  1. 大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。
  2. RAG 分为索引阶段和查询阶段。
  3. 索引阶段:文档加载、文档分块、向量化、存入向量数据库。
  4. 查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。
  5. RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。
  6. 分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。

目标块大小:2 个句子为一块

Chunk1: 大模型检索增强生成 (RAG),通过外部知识库补充大模型固有知识,缓解幻觉。RAG 分为索引阶段和查询阶段。

Chunk2:

索引阶段:文档加载、文档分块、向量化、存入向量数据库。查询阶段:用户 query 向量化、向量库相似度检索、把检索到的上下文连同问题喂给大模型生成答案。

Chunk3:

RAG 性能受分块策略、Embedding 模型、检索器、重排器共同影响。分块是最前置的环节,分块不合理会造成后续无论怎么调检索器都很难提升效果。

4.语义分块 Semantic Chunking

不依赖标点、长度;依靠 Embedding 向量相似度判断语义边界。

流程:

  1. 根据句子、段落、主题等有语义内涵的单位对文档进行分段创建嵌入;
  2. 计算相邻片段 embedding 余弦相似度;
  3. 相似度低于设定阈值,代表主题发生跳转,在此处分割出新 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)

图文混合文档,文本、图表不能混切在一起。

  1. 文本部分使用结构分块;
  2. 图表单独提取,图片做 image embedding;
  3. 图注文字必须和图表绑定为同一个 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对象,不和前后文本粘连在一起,拿到:

  1. 表格标题 / 表注(非常关键,必须绑定表格)
  2. 表格结构化内容:markdown/html
  3. 元数据:所属章节路径、页码、坐标。

三种表格分块策略(按表格大小区分)

方案 1:小表格(整体 token≤500)

------ 整张表格作为独立 Chunk(最常用)

规则:

  1. 表标题 + 表注 + 完整 markdown 表格打包成一个独立 chunk;
  2. 不要把表格和前后大段文本混在同一个 chunk;
  3. 前后少量关联说明文字可以一起打包进来;
  4. 该 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行)

工程实践:

  1. 长表格同样适配父子分块架构:完整原始大表格作为父块存入 KV 存储;切出来的带表头行片段作为子块向量化入库;命中子块后取回完整原始大表格父块给 LLM。
  2. 禁止直接把表格转纯自然语言句子丢失行列结构;优先保留 markdown 表格格式。

方案 3:扫描版 PDF,表格解析失败

(OCR 识别错乱,拿不到 markdown)

两条可选路线:

  1. VLM 图像检索路线:把表格区域截图,作为图片 chunk,使用多模态 embedding(如 Qwen‑VL‑Embedding)对图片做向量入库;query 用文本检索图片向量库;生成阶段送入 VLM 模型读取图片内容。
  2. VLM 做结构化复原:把表格截图丢给 VLM,强制输出 markdown 表格,再走方案 1/2。

缺点:图像 embedding 检索召回精度不如文本,成本更高;优先尽量做结构化解析。

表格与周围文本如何处理

(非常容易踩坑)

场景 A:表格前面有一大段介绍文字,后面有一大段分析文字

【前文】本节介绍设备各项电气参数,下面表格汇总关键指标。 【表 1 设备参数表】 【后文】由上表可见,额定功率决定设备能耗,选型时重点关注功率指标。

✅正确分块:

  1. Chunk1:前文介绍文字(普通文本块)
  2. Chunk2:表标题 + 完整表格 + 表注(独立表格块)
  3. Chunk3:后文分析文字(普通文本块)

不要把大段前文 + 表格 + 大段后文全部塞到同一个块,会造成块过大,embedding 混杂多主题。

✅边界例外:如果前后文字很短(一两句话),可以和表格合并为一个 chunk。

❌错误:直接把表格混在大段文本中间,交给 RecursiveCharacterTextSplitter 自由切割。

父子分块如何结合表格(生产环境标准做法)

  1. 父块 :完整原始表格(markdown + 标题 + 全部行),存入 KV 存储,不向量化
  2. 子块
    • 小表格:子块 = 完整表格;
    • 超长表格:切分多行片段,每段子块携带完整表头 + 表标题;子块做 embedding 存入向量库。
  3. 查询阶段: 用户问题命中某一个表格子块 → 通过 parent_id 取出完整原始表格父块 → 将完整表格送入 LLM 回答。

好处:检索用细粒度子块更容易命中某几行;生成时拿到完整全量表格,不会只有局部片段。

表格摘要子块(双索引策略)

对于非常大的业务表格,增加一个摘要子块:

  • 子块 A:表格结构化 markdown 片段(用于精确数值查询)
  • 子块 B:VLM/LLM 生成的表格文本摘要(用于语义类问题检索) 两者都绑定同一个 parent_id,检索命中任意一个,都取回完整父表格。

示例摘要:

表 1 设备参数表,记录设备额定电压 220V,额定功率 1500W,工作温度‑10~60℃。

适合:用户问 "设备工作条件是什么",更容易命中摘要子块。

表格分块避坑清单

  1. ❌不要丢弃表格标题、表注;标题表注必须和表格绑定在同一个 chunk。
  2. ❌长表格切片,绝不允许丢掉表头
  3. ❌不要把 markdown 表格直接交给普通递归分块器切割。
  4. ✅表格 chunk 必须打元数据标记type="table",方便后续检索、重排、过滤。
  5. ✅能解析出 markdown 就优先 markdown;扫描解析失败再走图片 VLM 路线。
  6. ✅跨页表格,解析阶段先合并为一张完整逻辑表格,再执行分块,不要按物理页切分。
相关推荐
商业白皮书1 小时前
企业大模型应用可获得哪些安全防护能力?Amazon Bedrock Guardrails 从内容过滤到规则验证搭建 AI 安全护栏
网络·人工智能·安全
Yan-英杰1 小时前
从“投屏“到“办公“,ToDesk鸿蒙版4.8.0.0补齐远控“进入→处理→离开“全流程
服务器·人工智能·爬虫·机器学习·ai开发工具
CCYe、1 小时前
企业AI网关中的密钥生命周期:从一把Key走天下到自动轮换
网络·人工智能·安全
小蒋观天下1 小时前
2026交通安防AI摄像头完整选型指南
大数据·人工智能
Alter12301 小时前
算力决定下限,存力决定上限:Gartner魔力象限背后的AI存储暗战
大数据·人工智能
为自己_带盐2 小时前
AI驱动历史项目安全审查
人工智能·安全
2601_954811822 小时前
AI科学实验室MHS标准解读:AI智能体如何统一控制实验室设备接口
人工智能·python
具身AGI2 小时前
第一视角数据从哪来,物理AI 人类学习路线 的入口
人工智能·深度学习·学习
小白羊丨2 小时前
训练中看哪些指标?chosen/rejected 样本质量怎么保证?
人工智能·深度学习·机器学习