RAG文档切分

发布时间:2026/7/29 1:43:16
RAG文档切分 1、为什么切分避免无关内容对结果影响提升检索精度突破Token数量限制控制经济成本提升信噪比减少信息干扰物理抑制大模型“幻觉”元数据挂载数据治理与溯源混合架构中提升多路召回精确度2、切分策略具体切分时可以采用如下策略具体采用哪种主要取决于在实际使用场景当中对于语义连贯性完整性的要求按照固定字符数或 Token 数来切分但可能会在不适当的位置切断句子导致语义不连贯。语义切分根据文本的语义内容切分旨在保持相关信息的集中和完整适用于需要高度语义保持的场景。但处理速度较慢且可能出现不同块之间长度极不均衡的情况。具体切分过程为将相邻的几个句子拼成一个句组。对所有句组进行嵌入并比较嵌入向量的距离找到语义变化大的位置根据阈值确定切分点比如计算相邻句子嵌入向量的余弦距离取距离分布的第 N 百分位值作为阈值高于此值则切分。按照切分点切分出若干个语义段并合并某些长度很短的语义段。递归使用多个分隔符切分同时尽量保证字符数或 Token 数不超出限制。能保证不切断完整的句子。3、RecursiveCharacterTextSplitterRecursiveCharacterTextSplitter递归字符文本切分器是最常用的切分器它由一个字符列表作为参数默认列表为[\n\n, \n, , ]并且会尝试按顺序使用这些字符进行切分直到块足够小。由此尽可能地将所有段落然后是句子最后是词保持在一起因为这些段落通常看起来是语义上最相关的文本片段。同时为了保证段之间语义完整可以设置每个块之间有一部分重叠。举例以下是一个完整的 Python 代码示例演示如何使用 RecursiveCharacterTextSplitter 进行文本切分# 安装必要的库 # pip install langchain-text-splitters # 导入所需模块 from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.document_loaders import UnstructuredWordDocumentLoader #加载文档 docs UnstructuredWordDocumentLoader( file_pathassets/sample.docx, modesingle ).load() #切分为文本块 chunks RecursiveCharacterTextSplitter( separators[\n\n, \n, 。, , , ……, , ], # 分隔符列表 chunk_size400, # 每个块的最大长度 chunk_overlap50, # 每个块重叠的长度 length_functionlen, # 可选计算文本长度的函数默认为字符串长度可自定义函数来实现按 token 数切分 add_start_indexTrue # 可选块的元数据中添加此块起始索引 ).split_documents(docs) #输出切分结果 print(chunks)这段代码展示了 RecursiveCharacterTextSplitter 的基本用法首先加载文档然后配置切分器的参数最后执行切分操作并输出结果。整个切分过程可以通过如下流程图所示