LlamaIndex 的切分器
LlamaIndex 用 NodeParser 体系做切分:SentenceSplitter 在保持句子边界的前提下按 token 计数控制块大小,切出的节点可以直接携带来源、标题等元数据进入索引。除它之外还有 SemanticSplitterNodeParser(按句间语义差异找断点,需要 embedding 模型)与 HierarchicalNodeParser(生成多级节点,配合自动合并检索使用)。
基本信息
| 核心类 | SentenceSplitter,用 chunk_size 与 chunk_overlap 控制块大小 |
|---|---|
| 计量单位 | 按 token 计数,需要与所用模型的 tokenizer 对应 |
| 家族成员 | 语义切分器、层级切分器、句子窗口切分器 |
| 元数据 | 节点默认继承文档元数据,也可在切分时补充字段 |
典型使用场景
- 通用文档入库:结构规整的手册与技术文档,用句子切分器最稳
- 主题切换明显:长报告按语义断点切分,避免一个块跨两个主题
- 需要上下文合并:用层级切分器生成多级节点,命中小块后自动带回父块
- 长文问答:句子窗口切分器把检索单位缩小到句子
- 切分实验:同一语料对比多种切分器,用评测指标选方案
SentenceSplitter 用法
SentenceSplitter 用法
from llama_index.core.node_parser import SentenceSplitter
# chunk_size 以 token 计,overlap 取块大小的十分之一左右起步
splitter = SentenceSplitter(chunk_size=512, chunk_overlap=50)
nodes = splitter.get_nodes_from_documents(documents, show_progress=True)
print(len(nodes), nodes[0].text[:80]) # 检查块数与首块内容
# 若节点缺少来源信息,检查文档元数据是否被正确继承
切分器对照
| 切分器 | 切分依据 | 适用情况 |
|---|---|---|
| SentenceSplitter | 句子边界加 token 上限 | 通用首选,结果稳定可控 |
| SemanticSplitterNodeParser | 相邻句的向量差异 | 主题切换明显的长文档 |
| HierarchicalNodeParser | 多级块大小 | 需要自动把上下文合并回来的检索 |
| SentenceWindowNodeParser | 单句为单元、窗口作上下文 | 长手册与条款类问答 |
NodeParser 家族还有 SemanticSplitterNodeParser 与 HierarchicalNodeParser 等;语义类切分同样要调用 embedding 模型,带来额外的时间与费用。
切分参数属于效果变量:块大小与重叠率调整后要重跑评测集,用召回指标判断改动方向,而不是凭块长感觉。
切分器与解析器要配套:先把 Markdown 或 PDF 解析成带结构的文档对象,再交给 NodeParser,跳过解析直接按纯文本切分会让标题与正文脱节。