RAG 中的文档分块策略?

RAG 面试题发布于

一、为什么要分块

文档太长无法直接向量化(Embedding 有 token 限制),且 LLM 上下文有限。分块后每块独立检索。

二、分块方法

1. 固定长度分块

按 token 数切分,如每块 500 token,重叠 50 token。 - 优点:简单。 - 缺点:可能切断语义。

2. 按结构分块

按标题、段落、章节切分。 - 优点:保留语义。 - 缺点:实现复杂。

3. 语义分块

用语义相似度判断切分点。 - 优点:语义完整。 - 缺点:开销大。

4. 父子分块

小块用于检索,大块用于 LLM 生成。

三、分块大小选择

  • 太小:丢失上下文。
  • 太大:噪声多,检索不精准。
  • 经验:500-1000 token,重叠 10-20%。

四、注意

  • 保留元数据(来源、标题、页码),便于溯源。
  • 结构化文档(表格、代码)需特殊处理。