[智能体-262]:RAG 文档切块(Transform 文本拆分):拆分背景、缘由、主流拆分策略
2026/6/5 3:29:56 网站建设 项目流程

RAG 文档切块(Transform 文本拆分):拆分背景、缘由、主流拆分策略

一、拆分背景 & 拆分缘由(为什么必须做文档切块 Chunk Split)

1. 硬性上限:LLM 上下文窗口限制

所有大模型存在上下文 token 上限(如 GPT3.5=4k、GPT4=8k/32k),完整 PDF / 合同动辄几万字符,全文无法一次性塞进 Prompt必须切小块分批送入。

2. Embedding 向量语义短板:超长文本向量化失真

Embedding 模型对超长文本做向量化时全局语义被稀释,段落首尾关键信息互相干扰,向量相似度计算失效;短 Chunk(200~1000 字符)语义聚焦,向量精准度更高。

3. 检索精准度:细粒度匹配

用户提问大多聚焦局部细节(报销标准、某条款),若整文档入库,召回时整份文档全部进上下文,冗余信息过多LLM 易被无关内容干扰、产生幻觉;切块后仅召回匹配的局部片段。

4. 成本与算力优化

大文档向量化、向量库检索全文档资源开销大,小 Chunk 批量处理,降低 Embedding 计费、向量索引存储成本。

不拆分后果:长文本向量化错乱 + 召回冗余内容 + 超上下文报错 + RAG 问答准确率暴跌。


二、主流文档拆分策略(LangChain 落地 5 大类)

策略 1:固定字符数分割(CharacterTextSplitter)

原理

按固定字符数chunk_size一刀切,到达长度直接截断,chunk_overlap设置重叠字符数

python

运行

from langchain.text_splitter import CharacterTextSplitter splitter = CharacterTextSplitter(separator="\n",chunk_size=300,chunk_overlap=30)
优缺点

✅ 速度最快、逻辑简单;❌ 极易割裂句子、段落,破坏语义完整;

适用:纯无格式短文本、日志、单行数据。

策略 2:递归字符分割 RecursiveCharacterTextSplitter(工业默认首选

原理

分层逐级拆分,拆分优先级:段落换行\n句号。→ 逗号,→ 空格 → 单个字符,优先在语义分隔符处切分,无法满足长度再向下切割,搭配chunk_overlap做上下文重叠防断裂。

python

运行

from langchain.text_splitter import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter( chunk_size=400, chunk_overlap=50, separators=["\n\n","\n","。",","," ",""] )
优缺点

✅ 最大程度保全段落语义、落地通用性最强;

适用:Word、PDF、规章文档、产品手册(90% 企业 RAG 使用)。

策略 3:语义拆分(SemanticChunker,Embedding 驱动拆分)

原理

用 Embedding 计算相邻句子向量相似度,语义发生突变时自动切分不靠固定字符,语义断层即拆分新 Chunk。

python

运行

from langchain_experimental.text_splitter import SemanticChunker splitter = SemanticChunker(OpenAIEmbeddings())
优缺点

✅ 语义完整性最优,跨段落话题自动切分;❌消耗 Embedding 接口费用、拆分耗时高;

适用:长小说、研报、多章节混合文档、非结构化随笔。

策略 4:层级父子文档拆分 ParentDocumentSplitter(RAG 高精度优化方案)

原理:双粒度切片
  1. 子块(小 chunk:50~150 字符):用于向量入库、相似度检索(细粒度精准命中);
  2. 父块(大 chunk:500~2000 字符):原文完整段落,不向量化,子块命中后,返回完整父文档原文,解决小 Chunk 上下文缺失。

python

运行

# 前文RAG全链路已有示例 child_splitter = RecursiveCharacterTextSplitter(chunk_size=80) parent_splitter = RecursiveCharacterTextSplitter(chunk_size=600)
适用:合同、法律条文、技术手册(最容易出现单片段信息不全场景)。

策略 5:结构化格式拆分(Markdown/Header/CodeSplitter)

原理

依托文档原生格式标签拆分:Markdown 按#一级标题、##二级标题、代码按{}/换行、HTML 按<p><h1>标签切分。

python

运行

from langchain.text_splitter import MarkdownHeaderTextSplitter
适用:Markdown 知识库、代码文档、网页结构化 HTML。

三、关键参数:chunk_size & chunk_overlap 配置规范

  1. chunk_size(单块长度)
  • 通用企业制度:300~500 字符;
  • 法律 / 合同:400~800 字符;
  • 短句 FAQ:150~300 字符;

过大 = 语义混杂、召回冗余;过小 = 信息碎片化、单块缺少关键信息。

  1. chunk_overlap(重叠值,推荐为 chunk_size 的 10%~15%)例:size=400 → overlap=40~60;作用:避免关键语句被切在两块边界,上下文断裂丢失信息

四、落地选型速查表

表格

文档类型优选拆分方案
企业规章、产品 PDFRecursive 递归分割
法律合同、标书Parent 父子文档分割
Markdown 项目文档Markdown 标题分割
研报、长文随笔语义分割 Semantic
日志、纯单行文本固定字符分割

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询