1. 文本分割器概述与核心维度
在自然语言处理(NLP)和大型语言模型(LLM)应用中,文本分割是一个看似简单却至关重要的预处理步骤。作为LangChain框架的核心组件之一,文本分割器的选择直接影响后续的检索增强生成(RAG)、文本嵌入和模型理解效果。
1.1 为什么需要文本分割
想象你正在整理一个巨大的图书馆,如果把整本书直接塞进书架,读者将难以快速找到所需内容。文本分割的作用类似图书管理员——它将大段文本拆分为语义连贯的"知识块",使得:
- 向量数据库能更精准地索引和检索相关内容
- 语言模型能处理超出其上下文窗口限制的长文档
- 不同章节、段落可以独立进行语义分析
1.2 三大核心评估维度
1.2.1 Split By(分割依据)
这决定了文本在哪里被"切断"。常见策略包括:
- 字符级:换行符(
\n)、双换行符(\n\n)、空格等 - 语法级:Markdown标题、代码块、HTML标签等
- 语义级:句子边界、段落边界(需NLP模型识别)
提示:选择分割依据时,要考虑原始文本的结构特征。技术文档适合语法级分割,而小说等自由文本需要语义级分割。
1.2.2 Measured By(测量单位)
定义如何计算"块"的大小:
- 字符数:简单直接,但与模型处理的Token数不对应
- Token数:与LLM处理方式对齐,但计算成本较高
- 无固定大小:按逻辑结构(如标题)自然分割
1.2.3 Context Preservation(上下文保留)
评估分割后是否保持原始语义:
- 是否切断了重要的前后文关联?
- 分割后的块是否能独立理解?
- 关键元数据(如标题层级)是否保留?
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 八种分割器深度解析
2.1 基础通用类分割器
2.1.1 CharacterTextSplitter
这是最基础的分割器,工作原理如下:
python复制def split(text, separator="\n\n"):
return text.split(separator)
典型问题场景:
当遇到连续5000字符没有分隔符的文本时,会产生一个过大的块,可能导致:
- 向量嵌入质量下降
- 超出模型上下文窗口限制
- 检索结果不精确
适用场景:
- 格式高度规范的文本(如日志文件)
- 对分割精度要求不高的快速处理
2.1.2 RecursiveCharacterTextSplitter
这是LangChain中最推荐的通用分割器,其算法流程为:
- 尝试用首选分隔符(默认
["\n\n", "\n", " "])分割 - 如果最大块仍超过设定大小,递归处理该块
- 直到所有块都满足大小限制
优势对比:
| 特性 | Character | Recursive |
|---|---|---|
| 处理无分隔长文本 | × |
