跳到主要内容

五种切法 —— 从数字符到让模型重写

这一章讲三件事: 刀口落在哪里为什么要紧、五种切法各怎么切、 以及它们的钱差多少(从几乎免费到一份文档几十美元)。

它在全书链条上的位置:第 02 章那条走查的第 1 步。 第 06 章补的是「块里的内容」,这一章补的是「块的边界」。

1. 这一章讲什么

三句话:

  1. 切块看着是个技术细节,但刀口落在哪里,决定了这一块还能不能回答问题;
  2. 五种切法从笨到聪明,而最聪明的那一种根本不是在切——它在重写;
  3. 这五种的价钱跨了三个数量级,而书没有给「该切多大」的通用建议——只给了一个上限。

2. 顶层全景:五种切法,一条成本阶梯

① 定长切分 每 N 个字符切一刀,完全不看内容
├ 成本:几乎为零
└ 坏在:从中间撕开词和句子

② 递归切分 按优先级找分隔符:先找空行,再找单换行,再找标点,最后才硬切
├ 成本:几乎为零
└ 格式未知时的默认选择

③ 文档感知切分 照格式自身的语法切:标题符号、函数定义、标签
├ 成本:几乎为零(但要先认出格式、配上对应的解析器)
└ 只有当文件本身带语法时才可用

④ 语义切分 每句都换算成一串数,相近程度掉得最狠的地方断开
├ 成本:每段文字要换算两遍
└ 用在完全没有格式的文本上

⑤ 代理式切分 让模型把文本重写成一条条独立的陈述
├ 成本:每块要 2–3 次模型调用,比 ④ 贵 10 到 20 倍
└ 唯一一种主动把代词换成实体全名的方法

图说:①②③ 几乎不花钱,④ 花一点,⑤ 花很多。
而 ①→⑤ 不是"越往下越好",是"越往下越贵、适用面越窄"。

上面第 ② 种里的「递归」,就是「一层不行就退一层再试」: 先试最高优先级的那种断法,断不了就退到下一级,一级级往下试。

3. 承重词一:重叠 —— 以及书没讲的那条上限

这一章第一个承重词。一句话先给结论:重叠就是让相邻两块共享一小段重复的文字, 好让「跨在刀口上」的那句话在两块里都完整存在一次。

先看现象:刀口切坏了会怎样

原文: "…新的索引算法把搜索效率提高了 40%。这一改动在 v3.2 版本随灰度发布上线,
覆盖了全部海外机房。…"

刀口正好落在句号后:
块 A 结尾: "…新的索引算法把搜索效率提高了 40%。"
块 B 开头: "这一改动在 v3.2 版本随灰度发布上线…"

用户问:"40% 的提升是哪个版本上线的?"
→ 块 A 有 40%,没有版本号
→ 块 B 有版本号,没有 40%
→ 两块单独拿出来都答不了这个问题

图说:这个例子是为演示编的。要看清的是形状——
一刀下去,一条完整的信息被劈成了两半,而检索是按块取的。

重叠怎么救它

做法朴素:下一块的起点,从上一块的终点往回退 N 个字符。

重叠 = 0
块 A: [………………40%。]
块 B: [这一改动在 v3.2…]

重叠 = 60 个字符
块 A: [………………40%。]
块 B: [提高了 40%。这一改动在 v3.2…]
↑ 这 60 个字符在两块里各存了一份

→ 块 B 现在同时含有 40% 和 v3.2,能答了。

图说:代价是库变大了(重复的部分要存两遍),而且检索时
相邻两块会一起被命中(因为它们内容重复)。

书对它的说法是:设一个重叠,意味着相邻两块在边界处共享文字。 这帮助保住跨越块边界的上下文,但增加了存储和冗余1

书里的缺口:四个值,一次没解释

书在四个例子里给了四个不同的重叠值2:

在哪块大小重叠
第 1 章那个哈利波特例子1 000 字符200
4.4 定长切分100 字符20
4.5 递归切分200 字符0
4.6 文档感知切分500 字符50

判断(我们的,不是书里的):这四个值,书一次都没解释过它们是怎么定的, 也没有给「重叠该设多少」的任何通用建议。 从数上看,前三个例子里重叠都是块大小的 20%、20%、10%,只有 4.5 是 0—— 但这个规律是我们数出来的,书没有这么说过,所以它可能只是巧合。 如果错,会错在: 如果作者心里确实有一条「重叠取块大小的 10%–20%」的经验规则、 只是没写出来,那我们这条批评就只是「他漏写了」,不是「他没想过」。 无论哪一种,读者拿不到这条规则这件事是真的

但有一条上限,书写在了别的章节

这是这一章最容易被漏掉的一条,而它是全书关于「块该多大」唯一的硬约束3:

一块文字的最大长度,不能超过后面那个换算模型能吃的最大 token 数。

具体是多少,书在第 5 章那张表里给了四个真实的数4:

text-embedding-3-small (OpenAI) 最多 8 191 个 token
voyage-large-2 instruct 最多 16 000 个 token
text-embedding-005 (Google) 最多 2 048 个 token
all-MiniLM-L6-v2 (开源) 最多 512 个 token

图说:差了 30 多倍。选了最后那个模型,你的块就不能超过 512 个 token ——
按第 03 章那个换算,大约是三四百个英文词。

超了会怎样:超出的部分被截断——而且它不会报错。 你的块看着好好地存进去了,实际上后半截从来没有参与过比较。

所以「切多大」不是纯自由的:上限由你选的那个换算模型定,常见是八千 token 上下。 (选型时该看的另一个参数是它输出几个数,第 08 章第 6 节把这两个参数放在一起讲。)

4. 主走查:一段 600 字符的说明文,五种切法各切一遍

这是本章的主走查。 输入是一段带小标题、中间有一次明显话题转折的说明文。

(下面这段文字和所有切分结果都是为演示编的,不是书里的例子; 书里给的参数——100/20、200/0、500/50、第 90 百分位——是真的。)

输入

## 索引重建

新的索引算法把搜索效率提高了 40%。这一改动在 v3.2 版本随灰度发布上线,
覆盖了全部海外机房。重建过程持续了 6 小时,期间读请求走旧索引,写请求双写。

## 计费调整

从 2026 年 1 月起,存储按实际占用计费,不再按预留容量计费。
已有合同在续约时自动切换到新口径,不需要客户操作。

── 共约 600 字符,一个明显的话题转折在"## 计费调整"这里 ──

切法 ①:定长切分(每 100 字符一刀,重叠 20)

书给的做法就是一个滑动窗口:每次前进「块大小 − 重叠」个字符,完全不看内容5

块 1 "## 索引重建\n\n新的索引算法把搜索效率提高了 40%。这一改动在 v3.2 版本随灰度发布上线,覆盖了全部海"
块 2 "上线,覆盖了全部海外机房。重建过程持续了 6 小时,期间读请求走旧索引,写请求双写。\n\n## 计费调"
块 3 "写请求双写。\n\n## 计费调整\n\n从 2026 年 1 月起,存储按实际占用计费,不再按预留容量计费。已有合"


坏在哪:
· 块 1 尾部 "覆盖了全部海" —— 词被从中间撕开
· 块 2 里,"索引重建"和"计费调整"两个完全无关的话题被塞进了同一块
· 那个 "## 计费调整" 小标题被劈成两半

图说:块 2 是最典型的坏块 —— 一块装了两条信息,
正好违反第 06 章那条"每块恰好装一条信息"。

它什么时候仍然是对的6:原始的音视频转写稿(没有任何自然边界)、 拼起来的日志、以及快速搭个原型看看效果。

切法 ②:递归切分(块 200,重叠 0)

它不是「按段落切」。 先说清那个叫「分隔符」的东西——就是用来断句断段的那些记号: 空行、单个换行、标点、空格。这一种切法,靠的是一张把这些分隔符按优先级排好的表7:

规则:目标每块 200 字符。到了上限时,用"当前还能用的最高优先级分隔符"下刀。

优先级: 段落断(空行) > 单个换行 > 标点 > 空格

切出来:
块 1 "## 索引重建"
块 2 "新的索引算法把搜索效率提高了 40%。这一改动在 v3.2 版本随灰度发布上线,覆盖了全部海外机房。"
块 3 "重建过程持续了 6 小时,期间读请求走旧索引,写请求双写。"
块 4 "## 计费调整"
块 5 "从 2026 年 1 月起,存储按实际占用计费,不再按预留容量计费。已有合同在续约时自动切换到新口径,不需要客户操作。"

好了什么:没有一个词被撕开,两个话题被分在了不同的块里。
还坏在哪:块 1 和块 4 是光秃秃的标题,单独存进库几乎没有检索价值;
而块 2、块 3 也不知道自己属于"索引重建"这一节。

书说它是「格式未知时的默认选择」8,适合有清楚段落结构的文章、报告、书。

一处必须注意的边界9:

默认的那张分隔符表,对中文、日文、泰文这类没有词边界的语言可能切错词。 这类语言要自己定制分隔符表。

这是全书唯一一处提到中文的地方。

切法 ③:文档感知切分(照格式的语法切)

这一种不看长度,看语法10:

「语法」在这里就是这种格式自己规定的那一套记号。 比如 Markdown—— 一种用纯文本写带格式文档的写法,# 开头表示标题、* 开头表示列表项; 再比如 Python,def 开头表示一个函数从这里开始。

格式它认什么
Markdown###### 这些标题记号
Python函数定义和类定义
HTML标签
LaTeX章节命令
照 Markdown 的标题切,而且把标题作为标注挂在块上:

块 1 文字 = "新的索引算法把搜索效率提高了 40%。这一改动在 v3.2 版本随灰度发布上线,
覆盖了全部海外机房。重建过程持续了 6 小时,期间读请求走旧索引,写请求双写。"
标注 = { 二级标题: "索引重建" }

块 2 文字 = "从 2026 年 1 月起,存储按实际占用计费,不再按预留容量计费。
已有合同在续约时自动切换到新口径,不需要客户操作。"
标注 = { 二级标题: "计费调整" }

好了什么:
· 两个话题干净分开
· 标题没有变成孤零零的块,而是变成了第 06 章说的那种标注
· 于是"这一块属于哪一节"这个信息保住了

图说:这就是第 04 章第 4 节说的"保住结构能换到什么"在切块这一步的落地。

代价与反面判据11:要先认出格式、要按格式配上对应的解析器(多一层复杂度); 而纯文本(没有任何标记)、从 PDF 或 Word 抽出来的纯文字、聊天记录和转写稿, 这一种全都用不上——它们没有语法可以依靠。

切法 ④:语义切分(相近程度掉得最狠的地方断开)

前三种切法都在看「文本长什么样」。第四种开始看「文本在说什么」。

做法12:

① 先把整段切成句子
② 每一句各自换算成一串数
③ 算每一对相邻句子的相近程度
④ 相近程度掉得特别狠的地方,就是话题换了 —— 在那儿断开

用我们这段文字走一遍(相近程度是为演示编的):

句1 "## 索引重建" ─┐
│ 0.71
句2 "新的索引算法…提高了 40%。" ─┤
│ 0.68
句3 "这一改动在 v3.2…海外机房。"─┤
│ 0.65
句4 "重建过程持续了 6 小时…" ─┤
│ 0.12 ← 掉得最狠
句5 "## 计费调整" ─┤
│ 0.74
句6 "从 2026 年 1 月起…" ─┘

→ 只在句4 和句5 之间断开,切成两块。

阈值怎么定——这是这一步最精巧的地方13:

先算出全文所有相邻句对的距离,把阈值定在这些距离的第 90 百分位。 只有当相近程度的下降幅度超过全文 90% 的下降时,才断开。

(「第 90 百分位」的意思是:把全部的下降幅度从小到大排队,取排在 90% 位置上的那个值。 比它还大的,只有全部的 10%。)

为什么用百分位而不是一个固定的数: 因为「掉多少算掉得狠」在不同的文档里完全不同。 一篇学术论文通篇术语,句与句之间的相近程度普遍很高;一份聊天记录则普遍很低。 定一个绝对阈值(比如 0.5),在前者上会一刀不切,在后者上会切成碎片。 用百分位,阈值自动跟着这份文档的分布**——也就是「这份文档里的下降幅度都长什么样、 集中在哪一带」——自己走。**

代价说得很实在14:

每段文字要换算两遍——切的时候一遍(为了找边界),入库的时候还要一遍。 按每百万个 token 0.02 美元的典型价算,这笔多出来的钱「可测量」。

切法 ⑤:代理式切分(它根本不是在切)

前四种都是「在已有文本的某处下刀」。第五种是把文本换成新的句子。

书自己把这个区别写成了四句话,它是这条线的收束15:

其他所有切法在边界上切开已有的文本
这一种把文本变成新的独立陈述
语义切分做的是按话题分组
这一种做的是去掉语境依赖 + 拆成最小单位
而且它是唯一一种主动消解指代和代词的方法

那两句话:这一章另起的一处走查

书给的最小例子只有两句,但它把整件事说清楚了16:

原文: "Sarah bought a new book. She enjoys reading fantasy novels."
(Sarah 买了一本新书。她喜欢读奇幻小说。)

模型拆出来:
① "Sarah bought a new book."
② "Sarah enjoys reading fantasy novels."
↑↑↑↑↑
注意:"She" 变成了 "Sarah"。

图说:第 ② 条现在可以被单独取出来、单独理解 ——
而原来那句 "She enjoys…" 一旦离开第一句,就不知道 She 是谁了。
这正是第 06 章那条独立性判据。

5. 承重词二:命题 —— 每条只讲一件事,而且不靠上下文

这一章第二个承重词。一句话先给结论:命题就是一条「只讲一件事、 而且脱离上下文也能被完整理解」的陈述句。

书的定义是:代理式切分用模型把文本拆成独立的命题—— 每条命题传达一条清楚的信息,不依赖周围的语境17

那四条拆解规则

书说这段提示词出自「最早描述这个概念的论文之一」,完整版放在一个公开的提示词库里18。 它的四条规则是:

  1. 把复合句拆成简单句,尽量保留原文的措辞;
  2. 给带描述的命名实体单独立一条(比如「1969 年阿波罗 11 号登月」要拆出「阿波罗 11 号是一次登月任务」);
  3. 把代词换成实体全名——这就是上面 She → Sarah 那一步;
  4. 输出成一个字符串列表。

补充(不在书里):书没有给出那篇论文的名字。 把「命题(proposition)」当作检索单位正式提出来的,是 2023 年 12 月的论文 《Dense X Retrieval: What Retrieval Granularity Should We Use?》(Tong Chen 等)。 它的摘要把命题定义为「文本里的原子表达,各自封装一个独立的事实, 以简洁、自足的自然语言形式呈现」——和书里这四条规则是同一件事。 来源:https://arxiv.org/abs/2312.06648(查阅于 2026-08-29)。

拆完之后还有一步:合并

拆得太碎会产生冗余,所以书还给了一个合并步骤。 里面会用到一个叫余弦的量—— 它是三角函数里用来量夹角的那个东西;而 余弦相似度:就是第 08 章要讲透的那个 「量两串数方向偏了多少」的算法,值越大说明方向越接近19:

① 给所有命题各算一串数
② 两两比相近程度
③ 余弦相似度超过 0.9 的,当成待合并的候选
④ 把候选交给模型,让它生成合并后的那一句
⑤ 不相似的,各自留着

图说:0.9 这个阈值是书给的。注意它和第 4 节那个第 90 百分位不同 ——
那个是相对的(跟着这份文档走),这个是绝对的(写死 0.9)。

6. 代价:它比上一级贵 10 到 20 倍

这是全书最大的一个成本对照。 下面那句里的 GPT——就是 OpenAI 那一系列模型的名字, 后面的数字是代次;书拿它当一个价格档位的参照20:

代理式切分每一块要 2 到 3 次模型调用(生成,以及可选的合并)。 一份 500 块的文档,用 GPT-4 那一档的模型,要花 30 到 60 分钟、15 到 40 美元。 这是语义切分的 10 到 20 倍。

把这个数放回第 06 章那个参照物上:

让模型给 1 000 份文档生成标注(第 06 章) 几分钟 1–5 美元
代理式切分 1 份 500 块的文档 30–60 分钟 15–40 美元

图说:两个都是"让模型多干一遍活",差了三个数量级。
原因:一个是每份文档调一次,一个是每块调两三次。

所以书给的判据是:只有当检索质量至关重要时才用20。 它点名的两类文档是有大量交叉引用的法律合同、以及技术规格书—— 这两类的共同点是满篇代词和隐含指代,而这正是第五种切法唯一能干、别的都干不了的事。

7. 五种切法怎么选

把五种放在一起,判据其实只有两个问题:

问题一:这份文件有没有可以依靠的语法?
有(Markdown / 代码 / HTML / LaTeX) → ③ 文档感知切分
没有 → 往下问

问题二:话题边界和段落边界重合吗?
重合(文章、报告、书) → ② 递归切分 ← 默认选这个
不重合(转写稿、拼接的邮件、聊天记录) → ④ 语义切分
根本没有任何边界(原始转写、日志) → ① 定长切分

例外:这份文件满是代词和交叉引用(合同、规格书),
而且检索质量至关重要 → ⑤ 代理式切分,并接受那个价钱

图说:注意"默认"落在 ② 上,不落在最贵的 ⑤ 上 ——
这是全书"先简后繁"那条形状在这一章的样子。

8. 作者的判断与证据

说法它是什么
「刀口决定这块还能不能回答问题」是机制推导,由第 06 章那条独立性判据直接推出
重叠的作用与代价是事实描述,而且成立
四个不同的重叠值书没有解释过任何一个。 见第 3 节判断块
「块不能超过换算模型的最大 token 数」是硬约束,由那个模型的输入上限决定。书把它写在第 5 章,不在这一章
五种切法各自的适用面作者的经验归纳。 每一条都合理,但没有任何一条有对照数据
「递归切分是格式未知时的默认选择」作者的推荐,和全书「先简后繁」一致
中日泰会切错词是事实,由那张默认分隔符表的内容决定
第 90 百分位那个阈值是那个库的默认参数,书解释了它的道理(跟着这份文档的分布走),但没有说 90 是怎么定的
「余弦相似度 > 0.9 当作待合并候选」书给的一个示例阈值,同样没有来源
「贵 10 到 20 倍、500 块要 15–40 美元」作者给的经验数,注明了是 GPT-4 那一档的模型;换一档模型这个数会大幅变化
「它是唯一一种主动消解代词的方法」是事实描述,而且是这一节最该记住的一句

判断(我们的,不是书里的):这「五级」框架不是公认的行业术语, 而书没有说清这一点。 书自己在两处的延伸阅读里点名了它的来源:一份叫「文本切分的五个层级」的教程, 作者是 Greg Kamradt21也就是说,「代理式切分(agentic chunking)」这个叫法出自一份教程, 不是某个标准或者某篇论文里的定义。 我们照实标出来,是因为读者出门去查这个词时,查到的会是同一份教程和它的转述, 而不是一个有共识的定义。 如果错,会错在: 如果这个叫法在这本书出版之后已经被广泛采用、 成了事实上的通用叫法,那「不是公认术语」这条批评就过时了。 但即便如此,书没有交代它的来历这件事仍然成立。

9. 边界与局限

  • 没有「块该多大」的通用建议。 除了那条上限(不能超过换算模型能吃的长度), 书从头到尾没给过取值。示例里出现过 100、200、500、1 000 四个值,一个都没解释;
  • 没有「重叠该设多少」的建议。 四个值,零解释(第 3 节讲过);
  • 没有比较过五种切法的检索效果。 书给了适用面和成本, 但没有任何一处说「用了 ④ 之后准确率从多少涨到多少」;
  • 一处工程忠告值得单独记22:书说生产别依赖那个实验性的包, 照它的源码自己实现一份,免得实验性接口的破坏性变更把你的流水线打断;
  • 没有讲切完之后怎么验。 你怎么知道这次切得比上次好? 答案在第 16、17 两章,而这一章一个字没提。

10. 可带走的

  1. 刀口落在哪里,决定了这一块还能不能回答问题。 一刀切在信息中间,两半单独拿出来都答不了;
  2. 重叠 = 让相邻两块共享一小段重复文字,救的正是「跨在刀口上」的那条信息; 代价是库变大、相邻块会一起被命中;
  3. 书给了四个不同的重叠值(0、20、50、200),一次都没解释过;
  4. 块长度有一条硬上限:不能超过后面那个换算模型能吃的最大 token 数, 四个真实的数是 8 191 / 16 000 / 2 048 / 512。超了会被截断,而且不报错;
  5. 定长切分 —— 每 N 个字符一刀,完全不看内容。会撕开词、会把两个话题塞进一块; 但对原始转写稿、日志、快速原型仍然成立;
  6. 递归切分 —— 一张按优先级排的分隔符表(空行 > 单换行 > 标点 > 空格), 格式未知时的默认选择;注意它对中日泰可能切错词;
  7. 文档感知切分 —— 照格式自身的语法切,而且能把标题变成标注挂在块上。 前提是文件本身带语法,从 PDF 抽出来的纯文字用不上;
  8. 语义切分 —— 每句换算成数,相近程度掉得最狠的地方断开; 阈值取全文所有下降幅度的第 90 百分位,所以它跟着每份文档自己的分布走; 代价是每段文字要换算两遍;
  9. 代理式切分根本不是在切,它在重写:把文本变成一条条只讲一件事、 且把代词换成实体全名的陈述(命题)。它是唯一一种主动消解指代的方法;
  10. 它贵 10 到 20 倍:一份 500 块的文档要 30–60 分钟、15–40 美元; 只有法律合同、技术规格书这类满是交叉引用的文档才值;
  11. 选法只有两问:有没有语法可依靠?话题边界和段落边界重不重合? 默认落在递归切分上,不落在最贵的那一种上;
  12. 「五个层级」这个框架和「代理式切分」这个叫法出自一份教程,不是公认术语。

11. 原文地图

主题原书章原文位置
定长切分的滑动窗口Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:471(搜「step = max(1, chunk_size - overlap)」) · text/06-ch04-chapter-4-data-preparation.txt:481(搜「chunk_size=100, overlap=20」)
重叠的作用与代价Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:503(搜「Overlap considerations」) · text/06-ch04-chapter-4-data-preparation.txt:617(搜「last sentence of one chunk also appears」)
定长切分什么时候仍然对Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:512(搜「raw audio transcriptions」)
递归切分的优先级表Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:589(搜「paragraph breaks first」)
它是默认选择Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:605(搜「As a default choice when document format is unknown」)
中日泰可能切错词Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:585(搜「Chinese, Japanese, and Thai」)
一块塞进两篇文章的风险Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:613(搜「politics, sports, and healthcare articles」)
文档感知切分认什么Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:683(搜「Markdown splitters recognize heading markers」)
标题变成标注Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:675(搜「header_1, header_2, and header_3」)
它什么时候用不上Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:709(搜「Plain text without markup」)
语义切分的机制Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:790(搜「measures similarity between consecutive pieces」)
第 90 百分位阈值Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:792(搜「90th percentile」)
要换算两遍的代价Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:820(搜「embedding each piece of text twice」)
别依赖实验性的包Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:824(搜「avoids potential breaking changes in experimental APIs」)
命题的定义Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:922(搜「standalone propositions」)
四条拆解规则Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:856(搜「clear and simple propositions」)
提示词来自哪Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:854(搜「one of the first papers that described the concept」)
它和别的切法的区别Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:956(搜「transforms text into new standalone statements」) · text/06-ch04-chapter-4-data-preparation.txt:960(搜「actively resolves references and pronouns」)
Sarah 那两句Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:962(搜「Sarah bought a new book」) · text/06-ch04-chapter-4-data-preparation.txt:970(搜「making it self-contained」)
合并步骤与 0.9 阈值Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:974(搜「Generate embeddings for all propositions」) · text/06-ch04-chapter-4-data-preparation.txt:982(搜「cosine similarity > 0.9」)
贵 10–20 倍Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:988(搜「10 to 20 times more expensive」)
五个层级那份教程Chapter 4. Data Preparationtext/06-ch04-chapter-4-data-preparation.txt:992(搜「5 Levels of Text Splitting」)

Footnotes

  1. 出处:「Chapter 4. Data Preparation」第 503 段(text/06-ch04-chapter-4-data-preparation.txt:503,搜「Overlap considerations」);另一处更直白的说法见第 617 段(text/06-ch04-chapter-4-data-preparation.txt:617,搜「last sentence of one chunk also appears」)——让一块的最后一句同时出现在下一块的开头。

  2. 出处:定长切分那个例子见同章第 481 段(text/06-ch04-chapter-4-data-preparation.txt:481,搜「chunk_size=100, overlap=20」);递归切分见第 571 段(text/06-ch04-chapter-4-data-preparation.txt:571,搜「chunk_size=200」);文档感知见第 661 段(text/06-ch04-chapter-4-data-preparation.txt:661,搜「chunk_size=500, chunk_overlap=50」);哈利波特那个见「Chapter 1. Getting Started with RAG」第 388 段(text/03-ch01-chapter-1-getting-started-with-rag.txt:388,搜「size=1000, overlap=200」)。

  3. 出处:「Chapter 5. Embeddings」第 33 段(text/07-ch05-chapter-5-embeddings.txt:33,搜「cannot exceed the maximum token length」)。这句写在第 5 章,不在讲切块的第 4 章——这是书的编排把一条硬约束放错了地方。

  4. 出处:同章第 33 段(text/07-ch05-chapter-5-embeddings.txt:33,搜「maximum token window」)是表 5-1 的引出句;四个模型的数分列其后。补充(不在书里,来自通用知识):被截断时接口通常不报错,只按上限截掉后面的内容——所以这类问题在日志里看不见,只体现为「某些块怎么都搜不到」。

  5. 出处:同章第 471 段(text/06-ch04-chapter-4-data-preparation.txt:471,搜「step = max(1, chunk_size - overlap)」)。原文的说明是它完全无视文档结构。

  6. 出处:同章第 512 段(text/06-ch04-chapter-4-data-preparation.txt:512,搜「raw audio transcriptions」)。这是表 4-2 里「该用定长切分」的那一行。

  7. 出处:同章第 589 段(text/06-ch04-chapter-4-data-preparation.txt:589,搜「paragraph breaks first」)。原文:按优先级找自然边界——先段落断,再单个换行,再标点,最后空格;到了大小上限时,用当前可用的最高优先级分隔符。

  8. 出处:同章第 605 段(text/06-ch04-chapter-4-data-preparation.txt:605,搜「As a default choice when document format is unknown」)。

  9. 出处:同章第 585 段(text/06-ch04-chapter-4-data-preparation.txt:585,搜「Chinese, Japanese, and Thai」)。

  10. 出处:同章第 683 段(text/06-ch04-chapter-4-data-preparation.txt:683,搜「Markdown splitters recognize heading markers」)。标题被存成标注这件事见第 675 段(text/06-ch04-chapter-4-data-preparation.txt:675,搜「header_1, header_2, and header_3」)。

  11. 出处:同章第 731 段(text/06-ch04-chapter-4-data-preparation.txt:731,搜「requires format detection and format-specific parsers」)与第 709 段(text/06-ch04-chapter-4-data-preparation.txt:709,搜「Plain text without markup」)起的四条反面判据。

  12. 出处:同章第 790 段(text/06-ch04-chapter-4-data-preparation.txt:790,搜「measures similarity between consecutive pieces」)。原文说它先给小片文字(通常是句子)生成向量,再量相邻片段的相似度,掉到阈值以下就开一个新块。

  13. 出处:同章第 792 段(text/06-ch04-chapter-4-data-preparation.txt:792,搜「90th percentile」)。示例代码里的两个参数是 breakpoint_threshold_type="percentile"breakpoint_threshold_amount=90

  14. 出处:同章第 820 段(text/06-ch04-chapter-4-data-preparation.txt:820,搜「embedding each piece of text twice」)。

  15. 出处:同章第 956 段(text/06-ch04-chapter-4-data-preparation.txt:956,搜「transforms text into new standalone statements」)与第 960 段(text/06-ch04-chapter-4-data-preparation.txt:960,搜「actively resolves references and pronouns」)。

  16. 出处:同章第 962 段(text/06-ch04-chapter-4-data-preparation.txt:962,搜「Sarah bought a new book」),拆出来的两条在第 966、968 段,那句「She 变成了 Sarah,这一块才真正独立」见第 970 段(text/06-ch04-chapter-4-data-preparation.txt:970,搜「making it self-contained」)。

  17. 出处:同章第 922 段(text/06-ch04-chapter-4-data-preparation.txt:922,搜「standalone propositions」)。

  18. 出处:同章第 854 段(text/06-ch04-chapter-4-data-preparation.txt:854,搜「one of the first papers that described the concept」),四条规则见第 856 段(text/06-ch04-chapter-4-data-preparation.txt:856,搜「clear and simple propositions」)起;那个公开提示词库的条目名见第 893 段(text/06-ch04-chapter-4-data-preparation.txt:893,搜「wfh/proposal-indexing」)。补充(不在书里):把命题当作检索单位提出来的论文是《Dense X Retrieval: What Retrieval Granularity Should We Use?》(Tong Chen 等,2023-12-11 提交),摘要里对命题的定义是「文本里的原子表达,各自封装一个独立的事实,以简洁、自足的自然语言形式呈现」。来源:https://arxiv.org/abs/2312.06648(查阅于 2026-08-29)。

  19. 出处:同章第 974 段(text/06-ch04-chapter-4-data-preparation.txt:974,搜「Generate embeddings for all propositions」)起的四步;0.9 那个阈值见第 982 段(text/06-ch04-chapter-4-data-preparation.txt:982,搜「cosine similarity > 0.9」)。

  20. 出处:同章第 988 段(text/06-ch04-chapter-4-data-preparation.txt:988,搜「10 to 20 times more expensive」)。该用在哪两类文档见第 984 段(text/06-ch04-chapter-4-data-preparation.txt:984,搜「A 100-page contract with clauses referencing other sections」)。 2

  21. 出处:同章第 992 段(text/06-ch04-chapter-4-data-preparation.txt:992,搜「5 Levels of Text Splitting」)。这条延伸阅读在 4.7 和 4.8 各出现了一次;书在正文里没有说明这个五级框架和「代理式切分」这个叫法都来自这份教程,是我们从延伸阅读里对出来的。

  22. 出处:同章第 824 段(text/06-ch04-chapter-4-data-preparation.txt:824,搜「avoids potential breaking changes in experimental APIs」)。