Q1900RAG 检索增强真题解析RAG(检索增强生成)AgentAlpha 社区真题库约 7 分钟更新 2026-09-29

什么是递归检索(Recursive Retrieval)

2 什么是递归检索(Recursive Retrieval)

1️⃣ 考察意图

面试官想考察你对“迭代式检索”策略的工程化理解,而非单纯背诵定义。核心在于:你能否设计出递归触发条件、终止机制,并权衡计算开销与召回增益。刁钻点在于,很多人只会说“多轮检索”,但讲不清何时递归、何时停止、如何避免信息爆炸。答好了能展示你对 RAG 系统整条链路(检索-生成-控制流)的掌控力,以及处理复杂多跳查询(Multi-Hop QA)的实战经验。

2️⃣ 标准答

递归检索(Recursive Retrieval)不是简单的“查两次”,而是一种基于前一轮检索结果动态生成下一轮查询的迭代策略。它常用于解决单轮检索无法覆盖的多跳问题(如“Transformer 的注意力机制如何影响长文本生成?”需要先查 Transformer 架构,再查注意力机制,最后查长文本优化)。

核心流程拆解:

  • 初始检索:用 BM25(k1=1.5, b=0.75)或 Dense Embedding(如 bge-large)从文档库中召回 Top-K 结果(K=5-10)。
  • 递归触发条件:不是每次都要递归,必须设置条件:
  • 置信度阈值:LLM 对当前答案的 logit 概率低于 0.6,或 Reranker(如 Cohere rerank-v3)打分低于 0.5。
  • 信息缺失检测:用 LLM 判断当前结果是否包含“关键实体缺失”(如查询“苹果公司 2023 年营收”但结果只提到“iPhone 销量”),缺失则触发递归。
  • 多跳探测:对初始结果做实体抽取(用 SpaCy 或 LLM),提取未覆盖的子概念(如“自注意力”、“位置编码”),作为下一轮查询。
  • 递归执行:将子查询与原始查询拼接(如“Transformer 架构 + 自注意力机制”),用相同检索器再查一轮。注意:检索器参数可调整,比如第二轮降低 BM25 的 k1 到 1.2,减少对高频词的惩罚,因为子查询通常更具体。
  • 终止机制:必须硬性限制,否则会死循环:
  • 最大深度:3 轮(经验值,超过后边际收益骤降,且计算成本翻倍)。
  • 结果收敛:连续两轮检索结果的 Jaccard 相似度 > 0.8,说明信息已饱和。
  • LLM 自判:让 LLM 输出“是否继续”的布尔值,但需设置超时(如 5 秒无响应则终止)。

实际落地的坑 + 解法:

  • 坑:递归导致上下文爆炸,第二轮检索结果可能与第一轮高度重复,浪费 token。
  • 解法:引入去重缓存(如用 SimHash 对每轮结果去重),并设置结果上限(每轮最多保留 5 个新片段,合并后总片段不超过 15 个)。
  • 坑:LLM 生成的子查询质量差,比如把“苹果公司”拆成“苹果”和“公司”,导致检索到水果和公司注册信息。
  • 解法:用查询重写模块(如 Query2Doc 或 HyDE)将子查询扩展为完整句子,再用 NER 过滤掉无关实体。

工程取舍(Trade-off):

  • 递归 vs. 并行检索:递归适合深度探索(如法律案例推理),但延迟高(每轮多一次 LLM 调用 + 检索)。并行检索(如同时查 5 个子问题)适合广度覆盖,但召回率可能低。选型依据:如果查询是链式推理(如“A 导致 B,B 导致 C”),用递归;如果是并列子问题(如“A 和 B 的区别”),用并行。
  • 深度 vs. 精度:深度 3 轮时,召回率提升约 15-20%(在 MultiHopQA 上实测),但延迟增加 3 倍。业务场景中,如果对延迟敏感(如实时问答),建议深度 ≤ 2 轮,并用 Reranker 补偿精度。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从三个层面回答:定义上,递归检索是基于前一轮结果动态生成下一轮查询的迭代策略,解决多跳问题;设计上,关键在触发条件(置信度阈值/实体缺失检测)和终止机制(最大深度 3 轮/结果收敛);工程取舍上,递归适合链式推理但延迟高,需用去重缓存和查询重写避免信息爆炸。总结一句:递归检索不是无脑多轮,而是有状态、有边界的探索性检索。”

4️⃣ 高频追问 & 应对

追问 1:递归检索和 RAPTOR(Tree of Documents)有什么区别?

应对策略:RAPTOR 是离线构建文档树(聚类 + 摘要),检索时直接走树路径,是静态结构;递归检索是动态迭代,每轮查询由 LLM 实时生成。RAPTOR 适合长文档(如论文),递归适合多跳推理(如 QA)。工程上,RAPTOR 的构建成本高(需预计算),但检索延迟低;递归的构建成本低,但每轮多一次 LLM 调用。可以结合:用 RAPTOR 做第一轮粗检索,再用递归做细粒度探索。

追问 2:如何评估递归检索的效果?具体指标是什么?

应对策略:用 MultiHopQA 或 HotpotQA 数据集。核心指标:召回率@K(递归后比单轮提升多少,通常 15-20%)、答案准确率(LLM 生成答案的 F1)、平均递归轮数(控制 1.5-2.5 轮为佳)。还要监控计算成本:每轮检索的延迟(ms)和 token 消耗(输入 + 输出)。一个坑:如果递归轮数多但准确率没提升,说明触发条件太宽松,需收紧置信度阈值。

追问 3:如果递归检索结果冗余,怎么优化?

应对策略:用MMR(最大边际相关性) 对每轮结果重排序,平衡相关性与多样性。具体:第一轮用 BM25 召回 Top-10,第二轮用 MMR(lambda=0.7)从新结果中选 5 个与已有结果差异大的片段。还可以用滑动窗口去重:对每轮结果的文本做 MinHash 签名,相似度 > 0.85 的直接丢弃。

5️⃣ 避坑 · 常见错误答法

  • ❌ 说“递归检索就是查多次,直到找到答案” → ✅ 必须强调触发条件和终止机制,否则面试官会追问“那你怎么知道什么时候停?”
  • ❌ 说“递归检索比单轮检索好,所以都用递归” → ✅ 要指出取舍:递归延迟高,适合多跳查询;单轮适合简单事实查询。业务中通常混合使用(先单轮,置信度低再递归)。
  • ❌ 说“递归检索的查询由 LLM 生成,质量很高” → ✅ 要承认LLM 生成子查询可能跑偏,需要查询重写和实体过滤来兜底。

6️⃣ 简历呼应

  • 如果你有 RAG 项目:从“我在项目中用递归检索解决了多跳问题”切入,具体说用了什么触发条件(如置信度阈值 0.6)和终止机制(最大深度 3 轮),并给出在内部数据集上的召回率提升数据。
  • 如果你只做过传统 NLP:用“信息检索中的相关反馈(Relevance Feedback)”类比,说明递归检索是自动化的相关反馈,但多了 LLM 的查询生成和终止控制。
  • 如果你是校招无项目:聚焦“在 MultiHopQA 上复现递归检索 Demo”,说明你理解了递归的工程细节(如去重、MMR 排序),并对比了单轮检索的 F1 分数。
  • 论文:“Multi-Hop Retrieval-Augmented Generation: A Survey”(2024)
  • 论文:“REPLUG: Retrieval-Augmented Black-Box Language Models”(2023)
  • 工具:LlamaIndex 的 RecursiveRetriever 模块(源码可读)
  • 博客:“Building a Recursive Retrieval System with LangChain”(LangChain 官方教程)
  • 论文:“Query Rewriting for Retrieval-Augmented Generation”(2024)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。