← 返回目录
ap4.2实操⏱ 约 10 分钟

切分策略:四种切法,实测差 30 个百分点

按结构切 10/10,按行切 7/10——切分是 RAG 的第一道分水岭

🔎 最后验证 2026-08📚 来源:本节四种切分对比为 ECS 实测(2026-08,deepseek-chat,10 条评测问题,脚本与原始输出见本节代码)🧰 DeepSeek API、Python
为什么学这个

RAG 的第一步就能决定成败:你的文档怎么切成块

很多人随手写个"每 500 字切一刀"就过去了。这一节用实测告诉你这一刀的代价:同一份文档、同一套问题,按结构切能到 10/10,按行切只有 7/10——30 个百分点的差距,只因为切法不同

💡 打个比方

把一本菜谱剪成小卡片方便查阅。按菜名剪,每张卡片是一道完整的菜;按尺子每 10 厘米剪一刀,可能把"盐 3 克"和"糖 5 克"剪到两张卡上——查的时候只拿到半份配方。

块的边界,决定了你检索回来的是"完整信息"还是"半句话"。

四种切法,一份实测

同一份店铺制度(5 个章节),10 个问题,都取 top-3:

【按结构切(【标题】分段)】块数 5,平均 107 字
  检索命中率 10/10 (100%)   回答准确率 10/10 (100%)   ← 最佳

【定长切 120 字(无重叠)】块数 5,平均 108 字
  检索命中率 10/10 (100%)   回答准确率 9/10 (90%)

【定长切 120 字(重叠 40)】块数 7,平均 112 字
  检索命中率 10/10 (100%)   回答准确率 10/10 (100%)   ← 重叠救回了那 1 分

【按行切(最细)】块数 17,平均 28 字
  检索命中率 7/10 (70%)     回答准确率 9/10 (90%)     ← 最差

三条能带走的规律

① 按结构切 > 按长度切。 文档天然有结构(标题、章节、条款、Q&A 对),顺着结构切,每块都是语义完整的。这是最省事也最有效的一招——先看看你的文档有没有结构可用,有就别自己发明切法。

② 重叠(overlap)能救回被切断的信息。 定长切 120 字无重叠时丢了 1 分,加 40 字重叠后回到满分。原理:每块和前一块共享一段内容,即使一句话被切断,总有一块包含完整版。代价是块数变多(5→7)、存储和检索成本上升。

③ 切太细会毁掉检索。 按行切只有 28 字一块,命中率掉到 7/10。原因很实在:块太短,信息量不足以和问题匹配——"退款在收到退货并验收后 3 个工作日内原路退回"这一行,和问题"退款多久到账"的字面重合度太低,分数排不进 top-3。

注意一个反直觉现象:按行切的检索只有 7/10,回答却有 9/10——因为 top-3 里就算没有"正确来源",也可能有相邻的相关行,模型连蒙带猜答对了。这正是 4.4 要讲的:回答准确率会掩盖检索的问题

怎么给你的文档定切分策略

你的文档建议切法
有清晰标题/条款(制度、手册、API 文档)按结构切,一节一块
长文无结构(会议记录、访谈、文章)定长切 + 10-20% 重叠
天然成对(FAQ、问答记录)一问一答一块
表格类按行切但每块带上表头(否则块里全是数字没有含义)
代码按函数/类切,别按行

块大小的经验起点:300-800 字。太小信息不足(实测 28 字惨案),太大则一次塞进太多无关内容(浪费 token,还可能稀释重点)。但一定要用你自己的评测集测——这一节的实验脚本可以直接改。

🔧 动手做:给你的文档找最优切法(15 分钟)

  1. 跑本节代码 rag_pipeline.py,看四种切法的对比。
  2. 换成你的文档和问题:把 DOC 换成你毕业方向真实的资料(至少 2000 字),EVAL 换成 10 个真实问题 + 标准答案。
  3. 跑一遍四种切法——你的文档哪种最好?和我的结论一致吗?
  4. 试块大小:把定长切的 size 改成 60 / 120 / 300 / 600,各跑一次,找到你文档的拐点。
  5. 记下你的配置:切法 + 块大小 + 重叠比例,以及对应的检索命中率。

做到这里你应该有:你自己文档的最优切分配置 + 一张四种切法的对比数据。

为什么:切分是 RAG 里最便宜的优化——不花一分钱调用费,改几行代码,实测能差 30 个百分点。而且它是所有后续优化的地基:块切错了,再好的检索模型也捞不出完整信息。

❓ 测验
实测中「按行切」检索命中率只有 7/10,但回答准确率有 9/10。这说明什么?
⚠️ 避坑切分时别丢掉「上下文锚点」

一个常见事故:把"【会员制度】年费会员 199 元/年"切成两块,第二块只剩"年费会员 199 元/年"——检索时它和"会员费多少"匹配上了没问题,但如果文档里还有"【企业客户】年费 1999 元/年",两块长得几乎一样,模型无法分辨

解法:每块带上它的"路径"——比如给每块前面加上所属章节标题("会员制度 > 年费会员 199 元/年")。这一招在长文档、多层级文档里能显著提升检索准确度,成本几乎为零。

🤖 让 AI 帮你设计切分策略
我的知识库文档是【类型:制度/FAQ/长文/表格/代码】,大致结构是【描述】,总量约【多少字】。请帮我:1) 推荐切分策略和块大小(说明理由);2) 要不要重叠、多少;3) 每块要不要带章节标题等上下文锚点;4) 写出对应的切分代码(Python)。
✅ 小结

切分三规律:按结构切最优(10/10)、定长切要加 10-20% 重叠、切太细毁检索(7/10);块大小从 300-800 字起步,用自己的评测集调。

下一节揭开"检索"的神秘面纱:把文本变成向量、比余弦相似度——这一节的代码手写了全过程,一共不到 20 行,你会发现它比想象的简单得多。

下一节 → 嵌入与检索:相似度就是一行数学
🔎 来源与核验· 1 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「同一文档 10 条评测问题实测:按结构切检索命中 10/10、回答 10/10;定长 120 字无重叠 10/10 与 9/10;定长 120 字重叠 40 为 10/10 与 10/10;按行切(平均 28 字)7/10 与 9/10」
📚 ECS 实测 rag_pipeline.py(2026-08,deepseek-chat,TF-IDF 检索,top-3)✓ 已核验 2026-08
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · ap4.3
嵌入与检索:相似度就是一行数学
继续读下一节 →