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

