深度对比 LangChain 8 种文档分割方式:从逻辑底层到选型实战

对 LangChain 常见的 8 种分割器进行多维度横向对比,明确每种工具的底层逻辑。

🧠 核心概念:三个维度看分割

在对比之前,请记住这三个衡量尺度:

  1. Split By (怎么断句):换行符、正则、还是特定的语法树?
  2. Measured By (怎么算大小):数几个字符(Length),还是数几个 Token?
  3. Context (语义保留):切完之后,这段话还能看懂吗?

🧩 8 种分割器深度对标

我们将这 8 位选手分为四个"战队":

第一战队:基础通用类(程序员最常用)
  1. CharacterTextSplitter
    • 逻辑 :极其死板。你指定一个字符(默认是 "\n\n"),它就按这个切。
    • 缺点 :容易超限。如果一段话特别长,中间没有 "\n\n",它就会让这一块变得巨大。
  2. RecursiveCharacterTextSplitter
    • 逻辑 :最推荐的默认选手。它有备选方案:先找段落符,找不到再找换行符,再找不到找空格。
    • 底层:这就是一个递归函数,直到块大小达标为止。
第二战队:结构感知类(最懂程序员)
  1. MarkdownHeaderTextSplitter
    • 逻辑 :它不看长度,它看 #、##、###。
    • 强项:它能把标题作为元数据(Metadata)带给切出来的每一块。这对于 RAG 检索非常关键,模型能知道这段话属于哪个章节。
  2. Language()
    • 逻辑 :这是 RecursiveCharacterTextSplitter 的变体,内置了各种编程语言的分隔符。
    • 支持 :Python, Go, Rust, JS 等。它知道不要把一个 if-else 从中间切断。
第三战队:模型对齐类(LLM 最喜欢)
  1. TokenTextSplitter
    • 逻辑 :使用 tiktoken 等编码器。
    • 意义:大模型的"胃口"是按 Token 算的。字符数不等于 Token 数。用这个可以物理意义上精准控制不爆 Context(上下文)。
  2. SentenceTransformersTokenTextSplitter
    • 逻辑:专为特定的 Embedding 模型设计。
    • 场景:如果你用的向量模型有严格的 Token 限制(比如只能处理 512 个 Token),用这个最保险。
第四战队:自然语言专家(最懂人类语言)
  1. NLTKTextSplitter
    • 逻辑:调用 NLTK 这个老牌 NLP 库,按"句子"切分。
    • 优势:它懂英文的句号、感叹号,不会在缩写(如 Mr.)后面乱切。
  2. SpacyTextSplitter
    • 逻辑:比 NLTK 更重、更准的 NLP 模型。
    • 适用:处理极其复杂、不规范的长文本。

📊 终极对比决策表

分割器名称 分割依据 测量单位 优点 缺点 推荐场景
Character 单个字符 字符数 简单直接 容易切出超大块 极简格式数据
Recursive 字符列表(递归) 字符数 灵活、语义保留好 无 通用首选
Markdown Markdown 标题 无(按标题) 保留文档结构 不管长度,可能超限 知识库、技术文档
Language 代码语法 字符数 保证函数/类完整 需要指定语言 源码分析、Code Review
Token Token 编码 Token数 绝不超模型限制 人类不可读 临门一脚发给模型前
SentenceTransformer Token 编码 Token数 与向量模型完美契合 速度稍慢 针对特定 Embedding 优化
NLTK NLP 句子识别 字符数 句子边界极准 需要下载 NLTK 库 长篇小说、论文
Spacy NLP 句子识别 字符数 最强的语义切分 性能开销最大 对准确度要求极高的文本

❓ 苏格拉底式引导思考

  1. 场景: 假如你现在要爬取你的旧博客(Markdown 格式)做成一个私人 AI 助手,你会如何组合使用这些分割器?(提示:可以先按标题切,再按递归切吗?)
  2. 性能: 如果处理 1000 万字的语料,你会选 SpacyTextSplitter 还是 RecursiveCharacterTextSplitter?为什么?
  3. 逻辑: 既然 Token 是最准的,为什么我们不干脆全部只用 TokenTextSplitter?

✅ 选型口诀(小结)

  • 默认用 Recursive;
  • 有结构用 Markdown 或 Language;
  • 怕溢出用 Token;
  • 求精准用 NLTK 或 Spacy。

🔁 轻量复习问题

  • 在 RecursiveCharacterTextSplitter 中,默认的切分顺序是什么?
  • 为什么在做代码切分时,不建议直接用简单的换行符切割?
相关推荐
早起CaiCai1 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
Martina_03211 小时前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
吴凡wudianmei1 小时前
从0搭AI Agent(六):什么时候该把任务拆给多个 Agent
langchain·llm·ai编程
大草原的小灰灰2 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain
the局外人3 小时前
LangChain ToolRuntime 入门:context、state 与 store 的实际用法
后端·langchain·agent
Rocky Ding*4 小时前
【三年面试五年模拟】2026-11-01_字节跳动AI Agent全栈研发一面面经全解析
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·ai agent
郝学胜-神的一滴5 小时前
AI 编程智能体 27:吃透MCP通信机制
人工智能·python·langchain·wpf·numpy·scikit-learn
叼烟扛炮5 小时前
[LangChain] 学习笔记(05):提示词模板(Prompt)与少样本注入(Few-Shot)实战
linux·人工智能·笔记·学习·langchain·prompt
会飞锦鲤16 小时前
工业AI视觉检测项目完整实施方案
人工智能·深度学习·视觉检测·缺陷检测·模型训练·ai项目·工业应用
电科_银尘17 小时前
【深度学习项目实战·15】小样本图像分类:迁移学习识别蚂蚁与蜜蜂
深度学习·分类·迁移学习