基于文本结构
文本天然地组织为段落、句子和单词等层次单元。我们可以利用这种固有结构来指导分割策略,从而创建保持自然语言流畅性、维护块内语义连贯性、并适应不同文本粒度级别的分割。LangChain 的RecursiveCharacterTextSplitter 实现了这一理念:
RecursiveCharacterTextSplitter尝试保持较大单元(如段落)的完整性。- 如果某个单元超过块大小,则移至下一级别(如句子)。
- 如有必要,此过程将继续到单词级别。
基于长度
一种直观的策略是根据文档长度进行分割。这种简单而有效的方法确保每个块不超过指定的大小限制。基于长度分割的主要优势:- 实现简单
- 块大小一致
- 易于适配不同模型需求
- 基于 Token:根据 token 数量分割文本,在使用语言模型时非常有用。
- 基于字符:根据字符数量分割文本,在不同类型文本中更为一致。
CharacterTextSplitter 进行基于 Token 分割的示例:
基于文档结构
某些文档具有固有结构,例如 HTML、Markdown 或 JSON 文件。在这些情况下,根据文档结构进行分割更为有益,因为它通常会自然地将语义相关的文本分组在一起。基于结构分割的主要优势:- 保留文档的逻辑组织
- 在每个块内维护上下文
- 对于检索或摘要等下游任务可能更有效
- Markdown:基于标题分割(如
#、##、###) - HTML:使用标签分割
- JSON:按对象或数组元素分割
- 代码:按函数、类或逻辑块分割
连接这些文档 到 Claude、VSCode 等,通过 MCP 获取实时答案。

