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

RAG 效果不好时,应该先查检索还是先查 Prompt

1 RAG 效果不好时,应该先查检索还是先查 Prompt

P1 · rag

🏷 标签:rag, debugging, retrieval, prompt, optimization

1️⃣ 考察意图

面试官想看的不是“先查A还是先查B”的简单二选一,而是你是否有系统化的RAG调试方法论。这道题属于工程取舍+系统设计类型,刁钻点在于:候选人容易陷入“先查检索”或“先查Prompt”的教条,而忽略了并行隔离变量的工程思维。答好了能展示你具备定位瓶颈的直觉和数据驱动的优化能力,知道如何用最小成本快速区分是“没找到”还是“没用好”。

2️⃣ 标准答

核心原则:先隔离变量,再定位瓶颈。 不要凭感觉选,而是用两个快速实验锁定问题域。

第一步:快速检查检索质量(5分钟)

  • 方法:拿一个典型bad case,把检索返回的top-k文档(比如k=5)直接打印出来,人工阅读。
  • 判断标准:这些文档里是否明确包含回答用户问题所需的事实或逻辑?是 → 问题大概率出在生成环节(Prompt/模型)。
  • 否 → 问题出在检索环节(索引/embedding/查询)。 为什么这么做:这是成本最低的隔离方式。人工判断比跑任何自动化指标都快,能直接排除“信息缺失”这个最大变量。

第二步:如果检索缺失,优化检索

  • 常见坑:embedding模型对领域术语不敏感。比如医疗问答中“阿司匹林”和“布洛芬”在通用embedding(如text-embedding-ada-002)里余弦相似度可能很高,但实际答案不同。
  • 解法:混合检索:BM25(稀疏检索)+ Dense Retrieval(稠密检索)加权融合。BM25能精准匹配关键词,弥补embedding的语义模糊。默认BM25参数k1=1.5, b=0.75,可先调b(文档长度归一化因子)到0.5,减少长文档惩罚。
  • 查询改写:用LLM把用户query改写成更利于检索的形式。例如用户问“苹果股价”,改写为“苹果公司(AAPL)最新股票价格”。
  • 索引优化:检查chunking策略。如果chunk太小(<100 tokens),可能丢失上下文;太大(>500 tokens),噪声增多。建议用语义分块(Semantic Chunking),按段落边界切分,而非固定token数。

第三步:如果检索充分,优化Prompt/模型

  • 固定检索结果:把第二步中检索到的top-5文档硬编码到Prompt里,然后测试不同Prompt模板。
  • 调试方法:Prompt结构:检查是否明确指定了“仅基于以下文档回答”。常见错误是Prompt里没加约束,模型会依赖自身知识编造。
  • 上下文长度:如果文档总token数超过模型上下文窗口(如GPT-4的8K),需要截断或摘要。坑:截断时可能丢掉关键信息,建议用滑动窗口或重排序(Rerank)把最相关的文档放前面。
  • 模型选择:如果Prompt没问题但回答仍差,可能是模型能力不足。比如用GPT-3.5处理复杂推理,换成GPT-4或Claude 3.5 Sonnet可能明显提升。

第四步:并行实验,数据驱动

  • 设计实验:固定检索器,测试5种Prompt模板;固定Prompt,测试3种检索器(BM25、Dense、Hybrid)。记录每种组合的准确率或F1。
  • 工具:用LangSmith或LangFuse追踪每次调用的输入/输出/检索结果,可视化瓶颈。
  • 工程取舍:不要同时改多个变量。一次只改一个,否则无法归因。比如先改检索器,再改Prompt,最后改模型。

总结:先人工检查检索结果,快速区分是“没找到”还是“没用好”;然后分别优化检索或Prompt;最后用并行实验验证最佳组合。

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

“这个问题我从三个层面回答。第一,快速隔离:拿一个bad case,人工阅读检索到的文档,看是否包含答案所需信息。如果缺失,问题在检索;如果充分,问题在Prompt。第二,针对性优化:检索缺失时,用混合检索(BM25+Dense)和查询改写;Prompt有问题时,检查指令约束和上下文长度。第三,数据验证:固定一个变量,测试另一个,用LangSmith记录结果。总结一句:先人工隔离,再变量优化,最后数据驱动。”

4️⃣ 高频追问 & 应对

追问 1:如果人工检查发现检索结果充分,但模型还是答错,你怎么进一步排查?

首先,检查Prompt是否明确要求“仅基于文档回答”。如果没加,模型会混入预训练知识。其次,看上下文是否被截断:如果文档总token数超过模型窗口,用Rerank把最相关文档放前面,或对长文档做摘要。最后,测试不同模型:同一个Prompt,GPT-3.5可能错,GPT-4或Claude 3.5可能对。如果都错,可能是文档本身有歧义,需要优化chunking或增加文档多样性。

追问 2:你提到混合检索,具体怎么实现?有什么trade-off?

实现上,BM25和Dense Embedding分别检索,然后加权融合分数。权重可以动态调整:比如对长尾关键词,提高BM25权重(0.7 vs 0.3);对语义查询,提高Dense权重。Trade-off:混合检索增加了延迟和存储成本(需要维护两个索引),但能明显提升召回率。如果对延迟敏感(如实时问答),可以只用Dense,但需要更精细的embedding微调。

追问 3:如果用户query很短(比如“苹果”),检索结果很差,怎么处理?

这是典型的查询模糊问题。解法:1)查询改写:用LLM把“苹果”扩展为“苹果公司(AAPL)股票价格”或“苹果水果营养价值”,根据上下文判断。2)多轮检索:先检索一次,用结果生成澄清问题,再检索第二次。3)索引侧优化:在chunking时加入实体链接,比如把“苹果”关联到“Apple Inc.”和“Malus domestica”,提高匹配精度。

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

  • ❌ “先查Prompt,因为Prompt是直接控制模型输出的。” → ✅ “先查检索,因为如果信息都没找到,Prompt再好也白搭。人工检查检索结果是成本最低的隔离方式。”
  • ❌ “同时优化检索和Prompt,并行改。” → ✅ “一次只改一个变量,否则无法归因。先固定检索测Prompt,再固定Prompt测检索,用实验数据说话。”
  • ❌ “用自动化指标(如Recall@k)判断检索质量。” → ✅ “自动化指标有滞后性,且无法反映具体缺失了什么。先用人工看一个bad case,快速定位,再用指标量化。”

6️⃣ 简历呼应

  • 如果你有RAG项目:从“我在项目中遇到检索缺失导致回答错误,通过混合检索和查询改写提升了20%准确率”切入,强调你用过LangSmith做调试。
  • 如果你只做过传统NLP:用“传统QA系统里,检索和生成是分开的,RAG类似,但多了Prompt控制。我可以用类似A/B测试的方法,固定检索器测不同Prompt”类比迁移。
  • 如果你是校招无项目:聚焦“我复现过一篇RAG调试论文,用人工隔离+变量实验的方法,在公开数据集上验证了检索优先于Prompt”的demo经验。
  • 《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》(Lewis et al., 2020)
  • 《Lost in the Middle: How Language Models Use Long Contexts》(Liu et al., 2023)
  • LangSmith官方文档:Debugging RAG Applications
  • 《Hybrid Search: Combining BM25 and Dense Retrieval》(Pradeep et al., 2021)
  • 《Query Rewriting for Retrieval-Augmented Generation》(Ma et al., 2023)

—— 本场面试完 ——

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