RAG 的分块大小(chunk size)和重叠(overlap)没有放之四海皆准的数值,最可靠的方法是用你自己的文档和真实问题做小规模对比实验:准备一组带“标准答案出处”的问题,换几组参数,看检索结果是否包含正确段落。

为什么分块参数影响大

  • 块太小:一个完整的答案被切成几段,检索只拿到一半,模型回答不完整。
  • 块太大:一块里混入多个主题,相关度被稀释,同时占用更多上下文。
  • 重叠太少:关键句恰好落在边界上时,两边都不完整。
  • 重叠太多:重复内容增加,存储和检索结果中出现大量近似块。

第一步:准备测试问题集

从真实用户提问或客服记录中挑 20–30 个问题,每个问题记录:

问题正确答案所在文档所在段落(关键句)
退货需要几天内申请?售后政策.md“自签收之日起……”

问题要覆盖不同类型:一句话事实、需要跨段落的流程、表格里的数据。

第二步:设定几组候选参数

不必穷举,选 3–4 组差异明显的即可,例如:

  • A:较小块,少量重叠
  • B:中等块,中等重叠
  • C:较大块,少量重叠
  • D:按标题/段落结构切分(不按固定长度)

具体数值根据你的文档特点和嵌入模型的输入长度限制来定。

第三步:只测检索,不测生成

对每组参数,对每个问题取前 k 个检索结果,记录:

  • 正确段落是否出现在前 k 个中(命中/未命中)
  • 出现在第几位

先单独评估检索,避免生成环节的随机性干扰判断。

第四步:看结果,而不只是看总分

除了统计命中数,更要看哪些问题在所有参数下都失败。这类问题往往不是分块的问题,而是:

  • 文档本身没有写清楚答案
  • 问题用词和文档用词差别大(可考虑同义词扩展或查询改写)
  • 答案在表格或图片里,切分时丢失了结构

实用建议

  • 结构化切分常常比固定长度更好:按标题、条款、问答对切,能保持语义完整。
  • 给块加上元数据:文档标题、章节名,可以在检索时过滤或拼接到块前面。
  • 参数改了要重建索引,并保留旧索引方便回退。
  • 新增文档类型时重新测一次,合同和 FAQ 的最佳切法往往不同。

记录模板

实验日期:
嵌入模型:
参数组:A / B / C / D
测试问题数:
命中情况:(每组命中数 / 总数)
全部失败的问题:
结论与下一步:

延伸阅读:表格文档的分块方法、RAG 元数据过滤模式,也可以看看示例 文档分块入门。