1. 文档分块(Chunking)策略
- 固定长度分块(Fixed-Size Chunking):按照固定字符数或token数切分文本,实现简单、速度快,但可能破坏语义完整性
- 递归字符分块(Recursive Character Splitting):尝试按照一系列预设的分隔符(如段落、换行、句号等)进行分层切分,优先保证段落和句子的完整性,是业界最常用且效果不错的默认选项
- 语义分块(Semantic Chunking):利用嵌入模型理解文本的语义,将语义上相近、讨论同一主题的连续句子聚合在一起形成一个块,能最大程度地保留上下文的连贯性
2. 层次化与结构化分块
- 层次切片(Hierarchical Chunking):按照文档结构(标题、章节、小节等)进行切分,保持文档逻辑结构,适用于技术文档、教材等具有强结构化的文档
- 父子索引/小到大策略(Parent-Child/Small-to-Big):将"用于检索的内容"和"传给LLM的内容"解耦,使用较小的子块进行检索,但将较大的父块提供给LLM作为上下文,平衡检索精度与上下文丰富度
3. 上下文保持与优化技术
- 块重叠(Chunk Overlap):让相邻的两个块之间有部分内容重叠(例如重叠10-20%的块大小),防止在切分边界丢失关键信息,保证上下文的连续性
- 自适应分块(Adaptive Chunking):根据文档的内容动态调整关键参数(例如块大小和重叠),对复杂、信息丰富的段落创建更小、更细粒度的块,同时对更通用、介绍性的部分使用更大的块
- Late Chunking:先对完整文档进行嵌入,然后再推导出块嵌入,这种较新的技术能够提供更好的检索召回率