首页/AI/RAG 与向量库速查/切片重叠(overlap)的取值

切片重叠(overlap)的取值

overlap 让相邻切片共享边界文本,避免答案恰好被切在切口处;经验上取 chunk_size 的 10%-20%,过大会带来重复检索与成本上升。

RAG 与向量库速查AI更新于 2026-10-13

切片重叠是什么

重叠(overlap)让相邻切片共享边界处的一段文本,作用是兜住恰好被切在切口处的句子与条款:某个答案横跨两块时,至少有一块包含完整表述。经验取值是块长的 10% 到 20%,超过这个区间收益递减而重复率上升——检索会返回多条内容高度相似的片段,既浪费候选位也挤占上下文预算。重叠只是缓解手段,让切片对齐句子或段落边界才是根治办法。

基本信息

参数含义相邻切片共享的字符数
常用取值块长的 10%~20%(如 size=500 取 50~100)
硬约束overlap 必须小于 chunk_size,否则步长非正
副作用切片总数与索引体积增加,重复内容变多
更优替代按句子、段落、标题边界对齐切分

典型使用场景

  • 条款类文档:一条规定横跨切口时,重叠能保住完整表述
  • 固定长度基线调参:观察不同重叠下召回率与切片数量的变化
  • 评估重复度:统计检索结果中相似片段占比,判断重叠是否过激
  • 混合策略:结构化文档先按标题切,只在长段落内部用重叠兜底
  • 成本核算:按重叠比例估算索引体积与向量化费用的增幅

不同重叠的切片数量

不同重叠的切片数量
def chunk(text, size, overlap):
    step = size - overlap                 # 步长必须为正
    return [text[i:i + size] for i in range(0, len(text), step)]

text = open('doc.txt', encoding='utf-8').read()
print('无重叠:', len(chunk(text, 500, 0)))
print('10% 重叠:', len(chunk(text, 500, 50)))
print('20% 重叠:', len(chunk(text, 500, 100)))   # 条数与成本同步上升

重叠比例的取舍

比例效果代价
0%切口处内容可能被拆开成本最低
10%多数跨块句子可被兜住索引体积小幅增加
20%边界更稳重复片段开始变多
>30%收益趋缓检索结果高度冗余,占用上下文预算
重叠会让同一个答案在三、四条候选里重复出现:去重与按父文档聚合选代表块,是配合重叠使用的必要动作。

易错点

  • overlap 接近 chunk_size 时重复内容占比过高,检索结果几乎都是重叠片段
  • overlap 大于等于 chunk_size 造成步长为零或负,切分死循环或直接报错
  • 重叠被当成万能药,忽略了结构对齐才是根治手段
  • 调大重叠后未同步更新去重逻辑,同一片段反复进入上下文,浪费预算
  • 只在检索效果上对比不统计索引体积与向量化成本,隐性支出被忽略
  • 重叠导致同一段落以不同偏移入库多次,增量更新时按内容 hash 去重会把新旧版本误判为同一块

数据来源与参考

  • LangChain 官方文档(chunk_overlap 参数说明)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌