梦想不只是梦与想头像

LangChain 的切分器(Text Splitter)

LangChain 中的切分器(Text Splitter)种类有很多,但对于绝大多数场景,官方最推荐、也是首先最应该尝试的,就是 RecursiveCharacterTextSplitter(递归字符文本切分器)。它在保持语义完整和管理块大小之间取得了很好的平衡。

推荐:RecursiveCharacterTextSplitter

它的核心思想是“尽力保持大单元完整,实在太大再往下切分”。它按照一个分隔符列表(默认是 ["\n\n", "\n", " ", ""])的优先级顺序,递归地尝试切分文本。

  • 工作方式:先尝试用 \n\n(段落)切分;如果切出来的块还是太大,就对超大的块用 \n(换行)继续切;如果还大,就用空格切;最后兜底用空字符串(逐字符)切,保证一定能切到符合大小。

  • 为什么推荐:这种方式能最大程度地保留段落、句子等语义单元的完整性,让切出来的块更有意义。

from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,        # 每个块的最大字符数
    chunk_overlap=50,      # 块之间的重叠字符数,防止语义被切断
    length_function=len,   # 按字符数计算长度
)
chunks = text_splitter.split_text(document)

其他常用切分器

除了递归切分器,LangChain 还提供了针对不同场景的专用切分器:

1. 基础字符切分:CharacterTextSplitter

  • 特点:最简单的方式,只用一个固定的分隔符(默认 \n\n)切分,块大小按字符数算。

  • 适用场景:当文档结构非常统一,且明确知道用什么分隔符最好时。

2. 按长度/Token 切分

  • TokenTextSplitter:按 Token 数量切分(使用 tiktoken)。当需要严格控制输入给大模型的 Token 数时使用。

  • CharacterTextSplitter.from_tiktoken_encoder():先用字符切分,但用 Token 来计算块大小,能更精确地适配模型上下文窗口。

3. 按文档结构切分

  • MarkdownTextSplitter:根据 Markdown 的标题(#、##)、代码块等结构切分,能很好地保留文档层级。

  • HTMLHeaderTextSplitter:根据 HTML 标签(如 <h1>、<h2>)切分,提取语义结构。

  • RecursiveCharacterTextSplitter.from_language():针对代码文件(Python、JS、Java 等)优化,会按 def、class、{} 等语法结构切分。

4. 按语义/句子切分

  • NLTKTextSplitter / SpacyTextSplitter:利用自然语言处理库,按句子边界切分,适合对句子完整性要求极高的场景。

提醒:中文文档优化

如果处理的是中文文档,使用默认的 RecursiveCharacterTextSplitter 可能会把词语切断。建议自定义 separators 列表,加入中文标点:

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    separators=["\n\n", "\n", "。", "!", "?", ";", ",", " ", ""]  # 加入中文标点
)

切分器对比

场景推荐切分器
通用文本(首选)RecursiveCharacterTextSplitter
严格限制 Token 数TokenTextSplitter 或 RecursiveCharacterTextSplitter.from_tiktoken_encoder
Markdown/HTML 文档MarkdownTextSplitter / HTMLHeaderTextSplitter
代码文件RecursiveCharacterTextSplitter.from_language
中文文本RecursiveCharacterTextSplitter + 中文分隔符
按句子切分SpacyTextSplitter / NLTKTextSplitter

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/wangsen927/article/details/169264442

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--