切分策略选择与效果评估
选择合适的切分策略并对其进行优化,是构建高效 RAG 系统的关键步骤。
切分工具选择
根据不同应用场景,推荐使用以下切分工具:
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 普通文本 / 报告 / 网页 | SentenceSplitter | 简单快速,保持句子完整性 |
| 长文本 / Embedding 限制场景 | TokenTextSplitter | 精确控制 token 数量 |
| 精确语义块 / 摘要场景 | SemanticSplitterNodeParser | 基于语义的智能切分 |
| 技术文档、Notebook | CodeSplitter | 保持代码结构完整性 |
| 教程、技术博客 | MarkdownNodeParser | 识别 Markdown 层级结构 |
| 教材、论文类文档 | HierarchicalNodeParser | 分层切分,保持文档结构 |
切分策略选择
针对不同文档类型,推荐的切分策略和关键参数如下:
| 文档类型 | 推荐策略 | 关键参数 |
|---|---|---|
| 结构化文档(Markdown、PDF、Word) | HierarchicalNodeParser | chunk_sizes=[2048, 512, 128] |
| 纯文本(小说、新闻、邮件) | SentenceSplitter | chunk_size=500, chunk_overlap=50 |
| 代码文件 | CodeSplitter | language="python", max_chars=1000 |
| 混合文档(文本 + 表格 + 图像) | Unstructured + SentenceSplitter | chunk_size=500, chunk_overlap=50 |
| 长文档(书籍、报告) | SemanticSplitter | buffer_size=1, breakpoint_percentile_threshold=90 |
通用建议:
- 通用场景(如博客、新闻):优先使用 SentenceSplitter,兼顾速度与可用性
- 高精度需求(如法律合同 、医疗报告):使用 SemanticSplitterNodeParser,牺牲部分效率换取检索准确率提升
- 结构化文档(如技术手册、学术论文):指定 HierarchicalNodeParser,利用文档自身层级优化分块
参数调优指南
块大小(chunk_size)
- 小块(< 300 tokens):高精度,低上下文,适用于精确匹配场景
- 中等块(300-800 tokens):平衡精度与上下文,适用于大多数场景
- 大块(> 800 tokens):高上下文,低精度,适用于长文档理解场景
重叠区域(chunk_overlap)
- 小重叠(< 50 tokens):减少冗余,提高检索效率
- 中等重叠(50-150 tokens):平衡上下文连续性与效率
- 大重叠(> 150 tokens):确保上下文连续性,但增加冗余
语义断点阈值(breakpoint_percentile_threshold)
- 低阈值(< 80):产生更多小块,提高检索精度
- 中等阈值(80-90):平衡块大小与语义连贯性
- 高阈值(> 90):产生更大块,保持语义连贯性
参数调优总结
| 参数 | 推荐范围 | 效果 |
|---|---|---|
| chunk_size | 300-800 tokens | 越小精度越高,越大上下文越丰富 |
| chunk_overlap | 50-150 tokens | 越大连续性越好,但冗余也越多 |
| breakpoint_percentile_threshold | 80-90 | 越高块越大且语义越完整 |