Appearance
6.4.2 什么是分层检索(Hierarchical Retrieval)?
先给结论:分层检索可以先理解成:系统不是在所有最小碎片里一次性平面搜索,而是先在上层结构里找到相关范围,再逐层往下定位更细粒度内容。
它的核心不是“层次很多”,而是:
- 检索顺序和知识结构对齐了
为什么会需要“分层”
因为很多知识本来就不是平面的。
例如一份复杂文档,天然就可能有这些层次:
- 文档
- 章节
- 小节
- 段落
- 句子
如果系统跳过这些层次,直接把所有 chunk 平铺在一个池子里检索,常见问题就是:
- 相关范围找不稳
- 局部命中缺上下文
- 长文档内部碎片互相竞争
分层检索的思路就是:
- 让检索过程也尊重这个层级结构
它的基本工作方式是什么
一个最常见的分层检索流程通常像这样:
- 先按文档或章节级别召回
- 选出更相关的上层节点
- 再在这些节点下面召回更细粒度内容
- 最后把细粒度结果送入后续链路
所以它和普通 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
- 而是先找“相关结构单元”,再往下找细节
分层检索最适合什么场景
它尤其适合这些场景:
- 文档结构清晰,层级明显
- 问题既需要局部答案,也需要知道答案属于哪个大范围
- 一篇文档很长,平面检索太容易碎片化
- 文档内部存在目录、章节、小节这种天然组织关系
这类场景里,分层检索通常比简单 top-k chunk 更稳。
它和普通文档级 + chunk 级检索有什么关系
可以先这样理解:
- 文档级 + chunk 级检索,是最简单的一种分层检索
更完整的分层检索则可能继续往下细化,比如:
- 文档 -> 章节 -> chunk
- 父节点 -> 子节点
所以“分层检索”不是某一个固定实现,而是一类设计思路。
分层检索的代价是什么
它当然也有代价。
常见代价包括:
- 系统实现更复杂
- 索引结构更复杂
- 需要维护层级关系
- 检索链路可能更长
所以它通常不是所有场景都值得一上来就做。
更适合的场景往往是:
- 简单平面检索已经明显开始失稳
一个常见误区
很多人会把分层检索理解成:
- 只是再多加一层 rerank
这不准确。
更稳的理解是:
- rerank 是在已有候选里重新排序
- 分层检索是在构建候选时就按层级缩范围
两者都重要,但解决的问题不一样。
一句话总结
分层检索就是让系统先在上层结构里找到相关范围,再逐层往下定位细节内容。它适合长文档和层级结构明显的知识场景,本质上是在让检索顺序更贴近知识本身的组织方式。