LangChain教程:文本分割器 作者:马育民 • 2026-02-28 14:28 • 阅读:10001 # 介绍 文本分割器是连接 **文件加载器** 和 **大模型/向量库** 的关键组件,核心解决三大问题: 1. **适配大模型上下文窗口**:将 **超长文本** 拆分成符合 **大模型 tokens 限制的小片段**(如 GPT-3.5 4k tokens),**避免超出上下文导致报错**; 2. **保证语义完整性**:尽可能按自然语义边界(段落、句子、标题)拆分,避免“2025年销售额500万”被拆成两段,确保大模型能理解完整语义; 3. **提升检索精度(RAG 核心)**:拆分后的小文本片段存入向量库后,检索时能精准匹配用户问题(而非检索整个大文本),提升问答准确率。 # 常用文本分割器 ### RecursiveCharacterTextSplitter 递归字符分割器 ##### **特点**: - 按「优先级分隔符列表」递归拆分(先按段落/换行,再按标点,最后硬截断); - 兼顾「长度限制」和「语义完整」,适配多语言(尤其中文); - 可自定义长度计算方式(字符数/tokens)、重叠长度。 ##### **适用场景**: - 通用长文本拆分(Word/PDF/CSV/纯文本); - 中文文本拆分(支持中文标点分隔符); - RAG 场景的核心分割器(90%场景首选); - 无固定格式的长文本(如企业报告、小说、新闻)。 ### CharacterTextSplitter 基础字符分割器 ##### **特点**: - 简单按固定字符数硬截断,无语义判断; - 配置极简,仅需指定拆分长度和分隔符; - 速度极快,但易切断语义。 ##### **适用场景**: - 无结构纯文本(如日志文件、简单笔记); - 对语义完整性要求低的场景(如文本批量统计); - 快速原型测试(无需精细拆分)。 ### TokenTextSplitter Token 分割器 ##### **特点**: - 按大模型 tokens 数拆分(而非字符数),精准适配上下文窗口; - 基于 tiktoken 库计算 tokens,支持主流模型(GPT-3.5/GPT-4); - 硬截断,不考虑语义边界。 ##### **适用场景**: - 精准适配大模型 tokens 限制的场景(如 GPT-4o 128k tokens); - 英文文本拆分(tokens 计算对英文更精准); - 对长度要求极高的生产环境(避免超出 tokens 上限)。 ### MarkdownHeaderTextSplitter Markdown 标题分割器 ##### **特点**: - 按 Markdown 标题层级拆分(# 一级标题、## 二级标题); - 拆分后保留标题元数据(如“标题:一、概述”); - 适配 Markdown 结构化文本。 ##### **适用场景**: - Markdown 文档拆分(如技术文档、知识库、博客); - 按章节/标题拆分文本(如教程、手册); - 需要保留标题上下文的 RAG 场景(如“提取某章节的内容”)。 ### SentenceTransformersTokenTextSplitter 嵌入模型 Token 分割器 ##### **特点**: - 按嵌入模型的 tokens 限制拆分(如 BERT/ERNIE 模型的 512 tokens); - 适配 **向量嵌入场景**,**避免嵌入模型报错**; - 兼顾语义,优先按句子拆分。 ##### **适用场景**: - 文本嵌入向量库前的拆分(如用 Sentence-BERT 生成嵌入); - 适配开源嵌入模型的长度限制; - 中文文本嵌入的精准拆分。 ### NLTKTextSplitter NLTK 句子分割器 ##### **特点**: - 基于 NLTK 库按「句子」拆分(而非字符/tokens); - 语义拆分精度高,支持多语言; - 需安装 NLTK 依赖,速度稍慢。 ##### **适用场景**: - 对句子完整性要求高的场景(如法律文档、学术论文); - 英文文本拆分(NLTK 对英文句子分割更精准); - 需按完整句子分析的场景(如情感分析、文本摘要)。 ### SpacyTextSplitter Spacy 语义分割器 ##### **核心特点**: - 基于 Spacy 库按「语义块/名词短语」拆分,最贴合自然语言逻辑; - 支持自定义拆分粒度(句子/段落/语义块); - 依赖重(需安装 Spacy 模型),配置复杂。 ##### **适用场景**: - 高精度语义拆分(如医疗文档、法律合同); - 多语言复杂文本拆分(如多语种报告); - 对拆分精度要求极高的企业级场景。 ### CodeSplitter 代码分割器 ##### **特点**: - 按代码语法结构拆分(函数、类、模块、注释); - 支持主流编程语言(Python/Java/JS); - 保留代码语法上下文。 ##### **适用场景**: - 代码文件拆分(如 Python 脚本、开源项目代码); - 代码问答/分析场景(如“提取某函数的功能”); - 开发者知识库构建(代码片段检索)。 # 选型参考表 | 分割器类型 | 核心优势 | 核心缺点 | 首选场景 | |--------------------------------|---------------------------|-------------------------|-----------------------------------| | RecursiveCharacterTextSplitter | 语义+长度兼顾,适配中文 | 配置稍多 | 通用长文本、RAG、中文文本 | | CharacterTextSplitter | 简单快速 | 切断语义 | 无结构纯文本、快速测试 | | TokenTextSplitter | 精准适配 tokens 限制 | 硬截断、英文优先 | 大模型精准适配、英文文本 | | MarkdownHeaderTextSplitter | 按 MD 标题拆分,保留结构 | 仅适配 MD 格式 | Markdown 文档、章节化文本 | | CodeSplitter | 按代码语法拆分 | 仅适配代码文件 | 代码分析、开发者知识库 | ### 总结 1. **核心选型原则**:90%的通用场景选 `RecursiveCharacterTextSplitter`,中文场景需配置中文分隔符; 2. **精准适配**:需匹配大模型 tokens 选 `TokenTextSplitter`,嵌入模型选 `SentenceTransformersTokenTextSplitter`; 3. **结构化文本**:Markdown 选 `MarkdownHeaderTextSplitter`,代码选 `CodeSplitter`; 4. **极简需求**:无结构纯文本选 `CharacterTextSplitter`,快速测试首选。 原文出处:http://malaoshi.top/show_1GW2rOdn8h1Q.html