核心要点

  • chunk 太大:噪声多、语义被稀释,还可能超出 embedding 模型输入上限

  • chunk 太小:语义不完整、上下文被割裂,单块难以支撑作答

  • 常用 256-512 token,overlap 取 10-20% 以保留跨块上下文

  • 按文档结构(段落/标题/句子)与语义切分更好,并用检索指标在验证集上调优

标准回答

chunk_size 与 overlap 没有放之四海皆准的值,本质是在「语义完整」与「信息密度」之间找平衡,并要结合文档类型和 embedding 模型。

chunk_size 的权衡

  • 太大:一个块塞进多个主题,embedding 向量被「平均」稀释,相关信息被无关内容淹没;噪声多、检索精度下降,还可能超出 embedding 模型的最大输入长度被截断。
  • 太小:语义被割裂,单块缺乏足够上下文,LLM 拿到碎片难以作答,相关信息也可能分散在多个块里增加召回负担。

经验起点

  • 常用 256~512 token 作为起步,具体取决于内容类型与所用 embedding 模型的最佳输入长度(密集技术文档可偏小,叙述性长文可偏大)。
  • overlap 取块大小的 10~20%:相邻块保留部分重叠,防止关键句正好落在边界被切断、跨块上下文丢失。overlap 太小仍可能丢边界信息,太大则增加冗余存储与重复召回。

比固定长度更好的做法

  • 结构感知切分:优先按文档自然边界切——按标题/章节、段落、句子,保持语义单元完整,而非机械按字符数硬切。
  • 语义分块(semantic chunking):用句向量相似度判断语义是否连续,在语义发生跳变处断开,使每块主题内聚。
  • 对 Markdown、表格、代码等保留结构,避免破坏格式。

怎么定最终值
不要凭感觉拍板。在固定验证集上测不同 chunk_size / overlap 组合的检索质量:Context Recall、Context Precision、命中率/MRR,再看端到端的答案正确率与 Faithfulness,选指标最优的配置。

常见误区

⚠️ 常见踩坑

误以为存在一个「最优固定 chunk_size」(比如固定 512)适用于所有场景。最佳值高度依赖文档类型、embedding 模型与问题粒度;只按字符数机械硬切、不考虑语义和结构边界,容易把完整语义拦腰切断,必须用检索指标实测调优。

追问

追问 1overlap 设成 0 行不行?它到底解决什么问题?

可以但有风险。overlap 的作用是防止关键信息正好落在两个块的边界处被切断,导致任一块都不完整、检索时两边都召不全。设为 0 在边界连续性强的文档里容易丢上下文;通常取块大小的 10-20%。如果用的是按句子/段落的语义切分、边界本身就在自然停顿处,overlap 可以适当减小。

追问 2固定长度切分和语义分块各有什么优缺点,怎么选?

固定长度切分实现简单、速度快、块大小可控,但会无视语义把句子或段落拦腰切断。语义分块按内容相似度在主题跳变处断开,块内更内聚、检索更准,但计算成本更高、块大小不固定。工程上常折中:先按结构(标题/段落)粗切,再在过长段落内按固定长度加 overlap 细切,兼顾质量与成本。

追问 3如果同一块要兼顾「精确召回」和「足够上下文」,有什么办法?

用父子块(small-to-big)策略解耦这对矛盾:用细粒度小块做向量匹配以提高召回精度,命中后不直接把小块给 LLM,而是返回它所属的父块(更大段落)作为上下文。这样既保留小块的精确定位,又给模型完整上下文,避免被迫在「chunk 太小丢上下文」和「太大引噪声」之间二选一。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习