RAG 进阶 高级

文档切分深入:从固定长度到语义与父子切分

切分质量决定 RAG 上限。系统梳理递归切分、结构感知切分、语义切分与父子块(小查大回)策略。

为什么切分是 RAG 的第一瓶颈

切得太大 → 片段含噪多、浪费 token、相似度被稀释;切得太小 → 语义不完整、答案碎片化。大量"RAG 效果差"的根因都在切分,先调它再谈换模型。

四种切分策略,按工程投入排序

  • 固定长度 + 重叠:最简单,chunk_size 300~800 字符、overlap 10%~20%,作为基线;
  • 结构感知切分:按文档天然边界(Markdown 标题、代码函数、表格行)切,LangChain 的 MarkdownHeaderTextSplitterRecursiveCharacterTextSplitter(按 \n\n → \n → 。 递归降级)属于此类 —— 首选方案
  • 语义切分:对句子做 Embedding,在语义突变处下刀(相邻句相似度骤降点),贵但边界最准,适合高质量语料;
  • 父子块(Parent-Document / Small-to-Big)用小块检索、返回其所属大块 —— 小块向量更聚焦(检索准),大块上下文完整(回答好),兼顾两头,强烈推荐。

切分时的元数据习惯

  • 每块带上:来源文件、章节标题、页码/位置 —— 检索时可过滤,回答时可引用;
  • 表格、代码块整块保留不切开;
  • 给每块拼一段"上下文前缀"(如"《产品手册》第 3 章·退款政策:")再 Embedding,能显著改善指代类片段的召回。

怎么知道切得好不好

不要凭感觉:用《RAG 评估》课的方法跑 Hit Rate,对 2~3 组切分参数(如 400/80 vs 800/120)做对比实验,用数据选参

📝 课后练习

quiz-1 "用小块检索、返回其所属大块"描述的是哪种切分策略?