深度对比 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 中,默认的切分顺序是什么?
  • 为什么在做代码切分时,不建议直接用简单的换行符切割?
相关推荐
跟着狗蛋学安全19 小时前
Windows本地大语言模型部署
人工智能·语言模型·自然语言处理
赵药师19 小时前
YOLO中task.py改复杂的模块
python·深度学习·yolo
Pelb19 小时前
求导 z = (x + y)^2
人工智能·深度学习·数学建模
疯狂成瘾者19 小时前
text_splitter常见方法
python·langchain
技术小黑20 小时前
TensorFlow学习系列10 | 数据增强
python·深度学习·tensorflow2
AC赳赳老秦20 小时前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
hqyjzsb20 小时前
深度洞察人性需求!拆解传统心理咨询升级AI智慧辅导师数智工作流
人工智能·深度学习·学习·数据挖掘·aigc·学习方法·业界资讯
Project_Observer20 小时前
为您的项目选择最合适的Zoho Projects自动化巧能
大数据·运维·人工智能·深度学习·机器学习·自动化·编辑器
qq_白羊座20 小时前
Langchain、Cursor、python的关系
开发语言·python·langchain
大囚长21 小时前
大语言模型作为语种民族文明压缩镜像的映射特性分析
人工智能·深度学习·语言模型