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

传统的 RAG 流程是“先检索后生成”,你是否了解一些更复杂的 RAG 范式,比如在生成过程中进行多次检索或自适应检索

传统的 RAG 流程是“先检索后生成”,你是否了解一些更复杂的 RAG 范式,比如在生成过程中进行多次检索或自适应检索

P2 · rag

🏷 标签:rag, iterative-retrieval, adaptive-retrieval, multi-hop, self-rag

1️⃣ 考察意图

面试官想看你是否真正理解 RAG 的演进逻辑,而非只会调 API 跑个“检索+生成”流水线。考察类型是系统设计 + 工程取舍,刁钻点在于:传统 RAG 在复杂多跳问答或长尾知识场景下,单次检索的信息覆盖度不足,而盲目多次检索又会导致延迟爆炸和噪声引入。答好了能展示你对检索时机、融合策略和计算预算的掌控力,以及读过 Self-RAG、IRCoT 等前沿论文的深度。

2️⃣ 标准答

**1. 迭代检索(Iterative Retrieval)**核心思想:生成过程中多次检索,每次基于当前已生成内容补充新信息。典型方法是 IRCoT(Interleaving Retrieval with Chain-of-Thought):在 CoT 推理的每一步,先检索相关文档,再继续推理。例如回答“爱因斯坦的出生地是哪个国家的首都?”时,第一步检索“爱因斯坦出生地”得“乌尔姆”,第二步检索“乌尔姆是哪个国家的城市”得“德国”,第三步检索“德国首都”得“柏林”。

  • 工程取舍:检索次数与推理步数绑定,信息覆盖度提升,但延迟线性增长。实际落地时需设置最大步数(如 5 步)防止死循环。
  • 坑 + 解法:多步检索容易引入重复或矛盾文档。解法是引入去重机制(如 MinHash 对文档指纹去重)和冲突消解(用 LLM 对矛盾信息做置信度投票)。

**2. 自适应检索(Adaptive Retrieval)**核心思想:让 LLM 自己决定何时检索,避免无效检索。Self-RAG 是代表作:在生成每个 token 前,LLM 输出一个反思标记(如 [Retrieve] 或 [NoRetrieve]),只有标记为 [Retrieve] 时才触发检索。标记由一个小型分类器(如基于 RoBERTa 的 2 分类模型)或 LLM 自身生成。

  • 工程取舍:自适应检索能减少 30%-50% 的检索次数(【通用知识】),但需要额外训练一个检索决策模型,增加训练成本。
  • 坑 + 解法:决策模型可能过度保守(总选 [NoRetrieve])导致幻觉。解法是设置硬阈值:当生成 token 的 logit 置信度低于 0.6 时强制检索,作为兜底。

**3. 多步推理(Multi-hop Retrieval)**核心思想:将复杂问题分解为多个子问题,依次检索并推理。MuSiQue 和 HotpotQA 是典型 benchmark。实现时常用 DPR(Dense Passage Retrieval) 做子问题检索,再用 FiD(Fusion-in-Decoder) 融合多步文档。

  • 工程取舍:子问题分解依赖 LLM 的推理能力,分解错误会导致级联失败。实际中常用两阶段策略:先用小模型(如 7B)做粗分解,再用大模型(如 70B)验证子问题质量。
  • 坑 + 解法:多步检索的文档可能来自不同领域,拼接后上下文长度爆炸。解法是动态截断:按文档与当前子问题的 BM25 相关性排序,只保留 top-3 文档,其余丢弃。

4. 对比与选型

  • 迭代检索:适合需要逐步推理的复杂问答(如法律条文解释),但延迟高。
  • 自适应检索:适合实时场景(如客服对话),检索次数可控。
  • 多步推理:适合多跳知识问答(如百科类),但对 LLM 推理能力要求高。
  • 通用实现要点:所有范式都需要设计检索触发条件(如置信度阈值)、融合机制(如加权平均或 LLM 重排序)和停止策略(如最大步数或生成结束标记)。

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

“这个问题我从迭代检索、自适应检索和多步推理三个层面回答。迭代检索如 IRCoT,在 CoT 每一步检索,适合多跳推理但延迟高;自适应检索如 Self-RAG,用反思标记控制检索时机,效率高但需额外训练;多步推理如 MuSiQue,分解子问题依次检索,适合复杂问答但依赖 LLM 分解能力。总结一句:选型取决于场景——实时性优先用自适应,推理深度优先用迭代,多跳知识优先用多步推理。”

4️⃣ 高频追问 & 应对

追问 1:Self-RAG 的反思标记是怎么训练的?具体用什么 loss?

用强化学习训练,reward 来自检索结果的相关性(如 NDCG@10)和生成质量(如 ROUGE-L)。具体做法:先收集一批 query,对每个 query 用 BM25 检索 top-10 文档,然后让 LLM 生成答案,如果答案包含文档中的事实则给正 reward,否则负 reward。反思标记的分类器用 cross-entropy loss 训练,输入是当前 token 的 hidden state,输出是 [Retrieve] 或 [NoRetrieve]。实际中需要平衡正负样本,否则模型会偏向 [NoRetrieve]。

追问 2:迭代检索中,如果检索到的文档和当前生成内容矛盾怎么办?

用冲突消解机制:首先,对每个检索到的文档计算与当前生成内容的 cosine 相似度(用 Sentence-BERT),低于 0.5 的文档直接丢弃。其次,对剩余文档用 LLM 做二选一投票:让 LLM 判断“文档 A 和当前生成哪个更可信”,并输出置信度。最后,如果 LLM 认为文档更可信,则回滚当前生成内容,用文档信息重新生成。这个机制会增加一次 LLM 调用,但能显著降低幻觉率。

追问 3:多步推理中,子问题分解失败怎么兜底?

用回溯策略:如果某个子问题检索不到相关文档(检索结果为空或相关性低于阈值),则回退到父问题,重新分解。具体实现:维护一个子问题栈,每个子问题关联一个父问题 ID。当子问题检索失败时,从栈中弹出该子问题,并让 LLM 重新生成父问题的分解方案。同时,设置最大回溯次数(如 3 次),超过后直接返回父问题的单次检索结果,避免无限循环。

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

  • ❌ 说“自适应检索就是加个 if-else 判断,如果用户问题复杂就多检索几次” → ✅ 正确切入:自适应检索需要训练一个决策模型(如 Self-RAG 的反思标记),基于生成置信度或 token 级 logit 做动态判断,不是简单规则。
  • ❌ 说“迭代检索就是每次生成后都检索,次数越多越好” → ✅ 正确切入:迭代检索需要设置停止策略(如最大步数或生成结束标记),否则会引入噪声和延迟,实际中常用 3-5 步作为上限。
  • ❌ 说“多步推理就是让 LLM 自己分解问题,然后直接检索” → ✅ 正确切入:多步推理需要子问题验证机制(如用 DPR 检索后做相关性过滤),否则分解错误会导致级联失败。

6️⃣ 简历呼应

  • 如果你有 RAG 项目:从“我在项目中用 Self-RAG 方法,在客服场景下将检索次数减少 40% 同时保持准确率”切入,展示你理解自适应检索的工程实现细节(如反思标记训练、置信度阈值设置)。
  • 如果你只做过传统 NLP:用“传统信息检索的 query 扩展类似迭代检索,但 RAG 中需要结合生成上下文”类比迁移,强调你对检索时机和融合机制的理解。
  • 如果你是校招无项目:聚焦“我复现过 IRCoT 论文,在 HotpotQA 上对比了单次检索和多步检索的 F1 差异”,展示你对论文细节的掌握和实验能力。
  • Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection (ICLR 2024)
  • IRCoT: Interleaving Retrieval with Chain-of-Thought Reasoning for Multi-hop QA (ACL 2023)
  • MuSiQue: Multi-hop Sequential Question Answering (EMNLP 2022)
  • FiD: Fusion-in-Decoder for Open-Domain Question Answering (NeurIPS 2020)
  • DPR: Dense Passage Retrieval for Open-Domain Question Answering (EMNLP 2020)

—— 本场面试完 ——