跳到主要内容
文本分割器将大型文档分割成较小的块,这些块可以单独检索并适应模型上下文窗口的限制。 有几种分割文档的策略,每种策略都有其优点。
对于大多数用例,请从RecursiveCharacterTextSplitter开始。它在保持上下文完整性和管理块大小之间取得了很好的平衡。这种默认策略开箱即用,效果很好,只有当您需要针对特定应用程序微调性能时才应考虑调整它。

基于文本结构

文本自然地组织成段落、句子和单词等层次单元。我们可以利用这种内在结构来指导我们的分割策略,创建的分割可以保持自然语言的流畅性,在分割内部保持语义连贯性,并适应不同粒度的文本。LangChain 的 RecursiveCharacterTextSplitter 实现了这一概念。
  • RecursiveCharacterTextSplitter 尝试保持较大的单元(例如,段落)完整。
  • 如果一个单元超出块大小,它会移动到下一个级别(例如,句子)。
  • 如有必要,此过程将继续到单词级别。
使用示例
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 100, chunkOverlap: 0 })
const texts = splitter.splitText(document)
可用文本分割器:

基于长度

一种直观的策略是根据文档的长度进行分割。这种简单而有效的方法确保每个块不超过指定的尺寸限制。基于长度分割的主要优点是
  • 实现简单
  • 一致的块大小
  • 易于适应不同的模型要求
基于长度的分割类型
  • 基于Token:根据Token数量分割文本,这在使用语言模型时很有用。
  • 基于字符:根据字符数量分割文本,这在不同类型的文本中可能更一致。
使用 LangChain 的 CharacterTextSplitter 进行基于 Token 分割的示例实现
import { TokenTextSplitter } from "@langchain/textsplitters";

const splitter = new TokenTextSplitter({ encodingName: "cl100k_base", chunkSize: 100, chunkOverlap: 0 })
const texts = splitter.splitText(document)
可用文本分割器:

基于文档结构

某些文档具有固有的结构,例如 HTML、Markdown 或 JSON 文件。在这些情况下,根据文档的结构进行分割是有益的,因为它通常自然地将语义相关的文本分组。基于结构分割的主要优点
  • 保留文档的逻辑组织
  • 保持每个块内的上下文
  • 对于检索或摘要等下游任务可能更有效
可用文本分割器:
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.