Appearance
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))这段代码想说明的是:
- 第一步结果不是终点
- 系统会根据已有结果继续向下追
递归检索最适合什么问题
它尤其适合这些场景:
- 一个答案依赖多级结构信息
- 需要先找大范围,再追细节
- 文档、章节、chunk 之间有清晰父子关系
- 单轮平面检索很容易抓到上层但抓不到真正答案
这类问题里,递归检索往往比一次性 flat retrieval 更自然。
为什么它对复杂知识特别有价值
因为复杂知识常常不是单层可见的。
例如:
- 目录节点告诉你大致主题
- 小节节点告诉你相关范围
- 具体 chunk 才给出真正细节
如果系统不会递归往下追,就经常只能停在:
- “大方向找到了”
但还没真正拿到可以回答问题的证据。
它的代价是什么
递归检索也不是白拿的。
常见代价包括:
- 检索链路更长
- 状态管理更复杂
- 错误传播风险更高
如果第一步方向就偏了,后面递归可能会沿着错误线索继续走下去。
所以它更适合:
- 知识结构清楚
- 父子关系明确
- 检索路径可解释
的场景。
一个常见误区
很多人会把递归检索理解成:
- 把
top_k调大,多拿几轮结果
这不一样。
top_k 调大还是同一层平面扩张。
递归检索则是在:
- 根据当前结果,继续进入下一层或下一阶段检索
它解决的不是“候选不够多”,而是“检索过程本来就该分步展开”。
一句话总结
递归检索就是让系统先拿到一层结果,再沿着当前结果继续往下追到更具体的信息。它适合多级结构明显、答案需要逐步定位的复杂知识场景,比一次性平面检索更适合做逐步缩范围。