Skip to content

6.4.3 什么是递归检索(Recursive Retrieval)? ​

先给结论:递归检索可以先理解成:系统不是一次把所有候选都找完,而是先检索一层结果,再根据当前结果继续往下追,直到找到更具体或更有用的信息。

所以它更像:

  • 沿着当前线索继续检索

而不是:

  • 一次性把所有相关内容都平铺出来

为什么会需要“递归” ​

因为有些问题并不是一次检索就能直接定位。

常见情况包括:

  • 先找到相关文档,再需要继续找文档内部细节
  • 先找到摘要节点,再要继续展开子节点
  • 先找到父块,再继续追到更细的子块

这时如果系统只做一次检索,常见问题是:

  • 找到上层线索,但没追到真正细节
  • 直接找细节,又不知道该从哪里开始缩范围

递归检索的价值就在于:

  • 让系统根据第一轮结果继续往下走

它和分层检索有什么区别 ​

这两个概念很接近,但可以先这样区分:

  • 分层检索 更强调知识结构是分层的
  • 递归检索 更强调检索动作是逐步展开的

也就是说:

  • 分层检索更像结构设计
  • 递归检索更像执行过程

两者经常会一起出现,但不是完全同一个概念。

一个最小示意 ​

python
parent_nodes = retrieve_parent_nodes(user_query, top_k=3)
child_nodes = []

for node in parent_nodes:
    child_nodes.extend(retrieve_child_nodes(user_query, parent_id=node["id"], top_k=5))

这段代码想说明的是:

  • 第一步结果不是终点
  • 系统会根据已有结果继续向下追

递归检索最适合什么问题 ​

它尤其适合这些场景:

  1. 一个答案依赖多级结构信息
  2. 需要先找大范围,再追细节
  3. 文档、章节、chunk 之间有清晰父子关系
  4. 单轮平面检索很容易抓到上层但抓不到真正答案

这类问题里,递归检索往往比一次性 flat retrieval 更自然。

为什么它对复杂知识特别有价值 ​

因为复杂知识常常不是单层可见的。

例如:

  • 目录节点告诉你大致主题
  • 小节节点告诉你相关范围
  • 具体 chunk 才给出真正细节

如果系统不会递归往下追,就经常只能停在:

  • “大方向找到了”

但还没真正拿到可以回答问题的证据。

它的代价是什么 ​

递归检索也不是白拿的。

常见代价包括:

  • 检索链路更长
  • 状态管理更复杂
  • 错误传播风险更高

如果第一步方向就偏了,后面递归可能会沿着错误线索继续走下去。

所以它更适合:

  • 知识结构清楚
  • 父子关系明确
  • 检索路径可解释

的场景。

一个常见误区 ​

很多人会把递归检索理解成:

  • 把 top_k 调大,多拿几轮结果

这不一样。

top_k 调大还是同一层平面扩张。
递归检索则是在:

  • 根据当前结果,继续进入下一层或下一阶段检索

它解决的不是“候选不够多”,而是“检索过程本来就该分步展开”。

一句话总结 ​

递归检索就是让系统先拿到一层结果,再沿着当前结果继续往下追到更具体的信息。它适合多级结构明显、答案需要逐步定位的复杂知识场景,比一次性平面检索更适合做逐步缩范围。