Skip to content

6.4.2 什么是分层检索(Hierarchical Retrieval)? ​

先给结论:分层检索可以先理解成:系统不是在所有最小碎片里一次性平面搜索,而是先在上层结构里找到相关范围,再逐层往下定位更细粒度内容。

它的核心不是“层次很多”,而是:

  • 检索顺序和知识结构对齐了

为什么会需要“分层” ​

因为很多知识本来就不是平面的。

例如一份复杂文档,天然就可能有这些层次:

  • 文档
  • 章节
  • 小节
  • 段落
  • 句子

如果系统跳过这些层次,直接把所有 chunk 平铺在一个池子里检索,常见问题就是:

  • 相关范围找不稳
  • 局部命中缺上下文
  • 长文档内部碎片互相竞争

分层检索的思路就是:

  • 让检索过程也尊重这个层级结构

它的基本工作方式是什么 ​

一个最常见的分层检索流程通常像这样:

  1. 先按文档或章节级别召回
  2. 选出更相关的上层节点
  3. 再在这些节点下面召回更细粒度内容
  4. 最后把细粒度结果送入后续链路

所以它和普通 flat retrieval 最大的差别在于:

  • 不是一次搜到底
  • 而是逐层缩小范围

一个最小示意 ​

python
level_1 = retrieve_sections(user_query, top_k=3)
level_2 = []

for section in level_1:
    level_2.extend(retrieve_chunks(user_query, section_id=section["id"], top_k=5))

这段代码想说明的是:

  • 分层检索不是只找 chunk
  • 而是先找“相关结构单元”,再往下找细节

分层检索最适合什么场景 ​

它尤其适合这些场景:

  1. 文档结构清晰,层级明显
  2. 问题既需要局部答案,也需要知道答案属于哪个大范围
  3. 一篇文档很长,平面检索太容易碎片化
  4. 文档内部存在目录、章节、小节这种天然组织关系

这类场景里,分层检索通常比简单 top-k chunk 更稳。

它和普通文档级 + chunk 级检索有什么关系 ​

可以先这样理解:

  • 文档级 + chunk 级检索,是最简单的一种分层检索

更完整的分层检索则可能继续往下细化,比如:

  • 文档 -> 章节 -> chunk
  • 父节点 -> 子节点

所以“分层检索”不是某一个固定实现,而是一类设计思路。

分层检索的代价是什么 ​

它当然也有代价。

常见代价包括:

  • 系统实现更复杂
  • 索引结构更复杂
  • 需要维护层级关系
  • 检索链路可能更长

所以它通常不是所有场景都值得一上来就做。

更适合的场景往往是:

  • 简单平面检索已经明显开始失稳

一个常见误区 ​

很多人会把分层检索理解成:

  • 只是再多加一层 rerank

这不准确。

更稳的理解是:

  • rerank 是在已有候选里重新排序
  • 分层检索是在构建候选时就按层级缩范围

两者都重要,但解决的问题不一样。

一句话总结 ​

分层检索就是让系统先在上层结构里找到相关范围,再逐层往下定位细节内容。它适合长文档和层级结构明显的知识场景,本质上是在让检索顺序更贴近知识本身的组织方式。