RAG 分块大小与重叠怎么调:用小样本问题集做对比实验
RAG 的分块大小(chunk size)和重叠(overlap)没有放之四海皆准的数值,最可靠的方法是用你自己的文档和真实问题做小规模对比实验:准备一组带“标准答案出处”的问题,换几组参数,看检索结果是否包含正确段落。
为什么分块参数影响大
- 块太小:一个完整的答案被切成几段,检索只拿到一半,模型回答不完整。
- 块太大:一块里混入多个主题,相关度被稀释,同时占用更多上下文。
- 重叠太少:关键句恰好落在边界上时,两边都不完整。
- 重叠太多:重复内容增加,存储和检索结果中出现大量近似块。
第一步:准备测试问题集
从真实用户提问或客服记录中挑 20–30 个问题,每个问题记录:
| 问题 | 正确答案所在文档 | 所在段落(关键句) |
|---|---|---|
| 退货需要几天内申请? | 售后政策.md | “自签收之日起……” |
问题要覆盖不同类型:一句话事实、需要跨段落的流程、表格里的数据。
第二步:设定几组候选参数
不必穷举,选 3–4 组差异明显的即可,例如:
- A:较小块,少量重叠
- B:中等块,中等重叠
- C:较大块,少量重叠
- D:按标题/段落结构切分(不按固定长度)
具体数值根据你的文档特点和嵌入模型的输入长度限制来定。
第三步:只测检索,不测生成
对每组参数,对每个问题取前 k 个检索结果,记录:
- 正确段落是否出现在前 k 个中(命中/未命中)
- 出现在第几位
先单独评估检索,避免生成环节的随机性干扰判断。
第四步:看结果,而不只是看总分
除了统计命中数,更要看哪些问题在所有参数下都失败。这类问题往往不是分块的问题,而是:
- 文档本身没有写清楚答案
- 问题用词和文档用词差别大(可考虑同义词扩展或查询改写)
- 答案在表格或图片里,切分时丢失了结构
实用建议
- 结构化切分常常比固定长度更好:按标题、条款、问答对切,能保持语义完整。
- 给块加上元数据:文档标题、章节名,可以在检索时过滤或拼接到块前面。
- 参数改了要重建索引,并保留旧索引方便回退。
- 新增文档类型时重新测一次,合同和 FAQ 的最佳切法往往不同。
记录模板
实验日期:
嵌入模型:
参数组:A / B / C / D
测试问题数:
命中情况:(每组命中数 / 总数)
全部失败的问题:
结论与下一步:
延伸阅读:表格文档的分块方法、RAG 元数据过滤模式,也可以看看示例 文档分块入门。