为什么切分影响这么大
检索的基本单位就是「块」。块太大,一次召回会把大量无关内容带进上下文,模型容易答偏,也浪费上下文预算;块太小,一句「如上所述」脱离前提,检索到也没法用。
三种主流做法
固定长度切分(例如每 500 字一块,重叠 50 字)
- 优点:实现最简单,任何文本都能切,块大小可控;
- 缺点:会在句子中间断开,标题与正文可能分家;
- 适用:格式杂乱的原始文本、日志、转录稿。
按结构切分(按标题层级、按段落、按列表项)
- 优点:块与人的阅读单位一致,检索命中后上下文自洽;
- 缺点:依赖文档本身有清晰结构,长段落仍需再切;
- 适用:技术文档、说明书、有规范标题的手册。
按语义切分(按语义相似度找「话题转折点」再切)
- 优点:块内主题一致性最好,长文效果通常最好;
- 缺点:需要额外一次向量计算,成本与延迟都更高,切点也不完全可预测;
- 适用:长文、访谈、没有明显结构的叙述性内容。
可落地的默认选择
多数项目用「先按结构、结构内再按长度」的两段式最划算:
- 先按标题切成大段,把标题文本一并写进块内(检索时标题往往是最强的信号);
- 大段超过阈值(常见 600~1000 字)再按句子边界切,保留 10%~15% 重叠;
- 块内保留来源标识(文档名、章节号),便于回答时给出处。
三个容易忽略的细节
- 重叠不是越多越好:重叠会放大索引体积,也会让同一内容被多次召回,取 10%~15% 通常够;
- 切分要与检索方式匹配:用混合检索时,两路必须共用同一套块,否则合并去重会失效;
- 表格与代码块单独处理:按字切会把表格切碎,最好整块保留或转成结构化描述。
怎么验证切分是否合适
不要凭感觉。挑 20~50 条真实查询,逐条看「该段落的块是否出现在前 K 条里」,统计命中率;再挑切得最差的几条回去看原始文本,通常一眼就能看出是切分问题还是检索问题。切分调整的收益,往往比换更贵的重排模型更明显。