INNER 05 / RAG / 02 · ENGINE v1
文档解析与黄金分块策略(Document Chunking & Overlap)
本关练习:重构人力资源考勤制度文档的抗截断分块器。
30 SECONDS / 30 秒看懂
这一关只解决一件事:“垃圾进,垃圾出(Garbage In, Garbage Out)。”在 RAG Zero to Hero Guide 与 RAG All-in-One 的生产实践中,80% 的 RAG 回答错误源于粗暴的固定字符切分(Fixed-size Chunking)——比如把一句关键免责条款从中间劈成两半,或者把表格的表头切在第 1 块、第 15 行数据切在第 2 块,导致检索出来的第 2 块完全丢失了表头上下文与所属章节标题!
- 设定分层切分优先级分隔符列表(优先按二级/三级标题、段落换行、句号切分,严禁在句子中间硬切) (
- 5 分);
- 配置合理的 chunk_size(如 400‒600 字符)、chunk_overlap(如 60‒80 字符)及表格整体保留策略;
3 MINUTES / 3 分钟拆解
先看来源里的例子:PDF 本关任务(来源)
公司《员工手册》第 4 章“带薪年假与病假管理”长达 3,000 字,包含多级子标题和一张薪资扣减比例表。直接按每 300 字硬切后,员工问“司龄满 5 年请病假怎么发工资”,系统搜出的片段只有 “按 80% 发放”,却不知道这属于产假还是病假。
发生了什么
来源要求:设定分层切分优先级分隔符列表(优先按二级/三级标题、段落换行、句号切分,严禁在句子中间硬切) ( / 5 分); / 配置合理的 chunk_size(如 400‒600 字符)、chunk_overlap(如 60‒80 字符)及表格整体保留策略;
输出
参考答案:参考答案:抗截断递归分块与章节面包屑注入器 CHUNK_CONFIG = { "separators": ["\n## ", "\n### ", "\n\n", "。", ";", " "], "chunk_size": 500, "chunk_overlap": 75, # 15% 滑动重叠,确保跨块句子语义不断裂 "keep_tables_intact": True # 检测 Markdown 表格语法 |---| 时整体保留不拆行
术语拆开
- chunk
- 检索时使用的一段文本。
- overlap
- 相邻块之间保留的重叠内容,用来保住边界上下文。
为什么有效
来源核心原理:“垃圾进,垃圾出(Garbage In, Garbage Out)。”在 RAG Zero to Hero Guide 与 RAG All-in-One 的生产实践中,80% 的 RAG 回答错误源于粗暴的固定字符切分(Fixed-size Chunking)——比如把一句关键免责条款从中间劈成两半,或者把表格的表头切在第 1 块、第 15 行数据切在第 2 块,导致检索出来的第 2 块完全丢失了表头上下文与所属章节标题!高手的黄金分块法则是:按 Markdown 章节层级递归切分 + 保留 10%‒15% 滑动窗口重叠(Chunk Overlap) + 为每个分块头部自动注入所属文档名与章节面包屑路径 (Metadata Header Injection)。
结构长什么样
设定分层切分优先级分隔符列表(优先按二级/三级标题、段落换行、句号切分,严禁在句子中间硬切) ( 5 分); 配置合理的 chunk_size(如 400‒600 字符)、chunk_overlap(如 60‒80 字符)及表格整体保留策略; 设计分块元数据注入模板:在每个 Chunk 文本开头自动拼接 【来源文档:员工手册v2 | 所属章节:第四章 > 2 病假薪资标准】。 第二阶段:核心引擎篇(第 3‒4 关)——语义检索引擎、混合检索与重排序
chunk 太小和太大分别会损失什么?
SOURCE READING / 来源精读
“垃圾进,垃圾出(Garbage In, Garbage Out)。”在 RAG Zero to Hero Guide 与 RAG All-in-One 的生产实践中,80% 的 RAG 回答错误源于粗暴的固定字符切分(Fixed-size Chunking)——比如把一句关键免责条款从中间劈成两半,或者把表格的表头切在第 1 块、第 15 行数据切在第 2 块,导致检索出来的第 2 块完全丢失了表头上下文与所属章节标题!
逐点读懂
- 设定分层切分优先级分隔符列表(优先按二级/三级标题、段落换行、句号切分,严禁在句子中间硬切) (
- 5 分);
- 配置合理的 chunk_size(如 400‒600 字符)、chunk_overlap(如 60‒80 字符)及表格整体保留策略;
怎么对应本关练习
先读 30 秒与 3 分钟拆解,再读本关原文与实验,最后做客观题和实操题;答案在下方。
例子在哪
本关任务与参考答案见页面下方;来源为本册 PDF 对应关卡。
本关先记住:设定分层切分优先级分隔符列表(优先按二级/三级标题、段落换行、句号切分,严禁在句子中间硬切) (
核心原理
“垃圾进,垃圾出(Garbage In, Garbage Out)。
”在 RAG Zero to Hero Guide 与 RAG All-in-One 的生产实践中,80% 的 RAG 回答错误源于粗暴的固定字符切分(Fixed-size Chunking)——比如把一句关键免责条款从中间劈成两半,或者把表格的表头切在第 1 块、第 15 行数据切在第 2 块,导致检索出来的第 2 块完全丢失了表头上下文与所属章节标题!
高手的黄金分块法则是:按 Markdown 章节层级递归切分 + 保留 10%‒15% 滑动窗口重叠(Chunk Overlap) + 为每个分块头部自动注入所属文档名与章节面包屑路径 (Metadata Header Injection)。
第 2 关实操练习题:重构人力资源考勤制度文档的抗截断分块器
任务背景
公司《员工手册》第 4 章“带薪年假与病假管理”长达 3,000 字,包含多级子标题和一张薪资扣减比例表。直接按每 300 字硬切后,员工问“司龄满 5 年请病假怎么发工资”,系统搜出的片段只有 “按 80% 发放”,却不知道这属于产假还是病假。
通关硬性要求(满分 12.5 分)
1. 设定分层切分优先级分隔符列表(优先按二级/三级标题、段落换行、句号切分,严禁在句子中间硬切) (
4.5 分);
2. 配置合理的 chunk_size(如 400‒600 字符)、chunk_overlap(如 60‒80 字符)及表格整体保留策略(4 分);
3. 设计分块元数据注入模板:在每个 Chunk 文本开头自动拼接 【来源文档:员工手册v2 | 所属章节:第四章 >
4.2 病假薪资标准】(4 分)。 第二阶段:核心引擎篇(第 3‒4 关)——语义检索引擎、混合检索与重排序
PRACTICE / 本关练习 · 本地规则 + 覆盖检查
重构人力资源考勤制度文档的抗截断分块器
本地检查在你的浏览器里完成,不上传。覆盖检查需要先登录(免费注册),并把这段答案发送到服务器计算一次,算完即弃、不存档,需你点同意;只核对本关评分项覆盖的方向,不在评分项里的题目不会被检查。
评分项
结构分 — / 12.5 分
查看参考答案与得分点 先自己写,再打开+
参考答案与得分要点
参考答案:抗截断递归分块与章节面包屑注入器 CHUNK_CONFIG = { "separators": ["\n## ", "\n### ", "\n\n", "。", ";", " "], "chunk_size": 500, "chunk_overlap": 75, # 15% 滑动重叠,确保跨块句子语义不断裂 "keep_tables_intact": True # 检测 Markdown 表格语法 |---| 时整体保留不拆行 } def inject_breadcrumb_header(doc_title: str, section_path: str, raw_chunk: str) -> str: """在每个分块头部注入文档与章节层级上下文,再送入 Embedding 模型编码""" header = f"【来源文档:{doc_title} | 所属章节:{section_path}】\n" return header + raw_chunk.strip() # 注入后效果示例: # 【来源文档:员工手册2026版.pdf | 所属章节:第四章考勤与休假 > 4.2 病假薪资发放标准】 # 员工连续司龄满 5 年不满 10 年的,病假期间基础工资按本人标准薪资的 80% 计发。 得分要点拆解:按标题、段落、句号层级递归切分且不拆散表格(4.5 分);设置 `chunk_size=500` 与 `15% overlap`(4 分);在文本块头部显式拼接文档名与章节路径(4 分)。 第 3 关
网页永久免费。完整 PDF 会按顺序发给留邮箱的读者,不转售、不群发广告。
留邮箱,获取完整 PDF ↗