3 RAG 的完整工作流程是什么
1️⃣ 考察意图
面试官真正想看的不是你会背“检索-生成”四个字,而是你对RAG pipeline中每个环节的工程细节和取舍有手感。这是一道系统设计+工程取舍题,刁钻点在于:很多人只答出“召回→排序→生成”的骨架,但说不出每个环节的具体方法名、参数、坑。答好了能展示你对RAG的端到端掌控力——从query改写、多路召回、rerank到上下文窗口管理、幻觉检测,以及如何用BEIR/MTEB等benchmark量化效果。面试官会据此判断你能否独立搭建一个生产级RAG系统。
2️⃣ 标准答
RAG完整工作流程分为6个阶段,每个阶段都有明确的工程选择:
1. 输入处理与Query改写
- 拼写纠正:用SymSpell或基于编辑距离的词典匹配,对中文用pycorrector。
- 实体识别:用spaCy或BERT-NER抽取出人名、地名、产品名,用于后续结构化检索。
- Query改写:这是关键优化点。直接用原始query检索往往效果差,因为用户query短、歧义多。常用方法:
- HyDE (2022):先用LLM生成一个“假设文档”,再用这个文档去检索,提升召回率。
- Step-back prompting:让LLM生成更抽象的问题(如“苹果的营收”→“苹果公司2023年财务表现”)。
- 多轮改写:对历史对话用LLM生成独立query,避免指代消解问题。
- 工程取舍:改写会引入延迟(1-2秒),对实时场景(如客服)需权衡。通常只在首轮或用户query长度<5词时触发。
2. 多路召回
- 向量检索:用DPR或ColBERT-v2生成query和文档embedding,用HNSW索引(efConstruction=200, efSearch=256)做近似最近邻搜索,召回top-100。
- 关键词检索:用BM25(k1=1.5, b=0.75)做稀疏检索,对长尾词和精确匹配效果好。BM25+向量检索的混合召回是标配,比例通常为0.3:0.7(权重可调)。
- 知识图谱检索:如果领域有结构化知识(如医疗、金融),用SPARQL或Cypher查询实体关系,补充结构化信息。
- 合并去重:用MinHash或SimHash对多路结果去重,保留top-50。注意:向量检索和BM25的结果重叠率通常只有20-30%,所以多路召回能明显提升召回率(Recall@100从70%提到85%+)。
3. 重排序
- 召回阶段用双编码器(bi-encoder)做粗筛,速度快但精度低。重排序用交叉编码器(cross-encoder),如Cohere rerank-v3或BGE-reranker-v2,对query和每个候选文档做全连接打分,精度高但慢(O(n))。
- 工程取舍:交叉编码器推理成本高,通常只对top-50做rerank,取top-5到top-10。如果文档数>100,先做一次粗筛(如用向量距离+BM25分数加权),再rerank。
- 实际落地的坑:交叉编码器对长文档(>512 tokens)会截断,导致丢失尾部信息。解法:用滑动窗口或段落级rerank——把长文档切分成段落,每个段落独立打分,取段落级分数最高的文档。
4. 上下文构建
- 选择top-k:通常k=3到10,取决于LLM的上下文窗口(如GPT-4 128k可以取更多,但成本线性增长)。
- 拼接策略:按相关性降序排列,或按文档在原文中的位置(如时间顺序)排列。对问答场景,相关性优先;对摘要场景,位置优先。
- Token控制:用tiktoken或HuggingFace tokenizer精确计算token数,保留20%的窗口给query和指令。如果超限,用滑动窗口或MMR(最大边际相关性) 去重——MMR在相关性和多样性之间做平衡,避免top-k全是同一来源的冗余信息。
5. 生成
- 指令模板:用结构化prompt,如“基于以下文档回答:\n[文档1]\n[文档2]\n...\n问题:{query}\n回答:”。关键点:明确要求“如果文档中没有相关信息,请说‘无法从给定文档中找到答案’”,减少幻觉。
- 引用标注:在生成时让LLM输出文档编号(如“根据文档1和3,苹果2023年营收为... [1][3]”)。这需要prompt中显式要求,并用正则或LLM后处理提取引用。
- 实际落地的坑:LLM可能忽略指令,直接用自己的知识回答。解法:用grounding prompt(如“只使用以下文档中的信息,不要添加外部知识”)+ 温度设为0,并做输出验证——用NLI模型(如TrueTeacher)检查生成内容是否被文档支持。
6. 后处理与评估
- 幻觉检测:用SelfCheckGPT或NLI模型对生成内容逐句验证,标记置信度低的句子。
- 格式美化:对列表、表格等结构化输出做后处理,确保符合前端要求。
- 离线评估:用BEIR或MTEB benchmark,指标包括NDCG@10(排序质量)、Recall@100(召回率)、F1(生成准确性)。对比不同配置(如是否用query改写、rerank与否)的效果,通常rerank能提升NDCG@10 5-10个点。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从输入处理、检索、排序、生成、后处理五个层面回答。输入处理包括query改写和实体识别;检索用多路召回(向量+BM25+知识图谱),合并去重后取top-50;重排序用交叉编码器对top-50打分,取top-5;上下文构建时用MMR去重并控制token;生成时用指令模板+引用标注,最后做幻觉检测。总结一句:RAG不是简单的检索+生成,每个环节都有工程取舍,比如query改写提升召回但增加延迟,rerank提升精度但成本高。”
4️⃣ 高频追问 & 应对
追问 1:如果用户query是“苹果的营收”,但文档里只有“Apple Inc.”,怎么处理?
这是query-文档语义鸿沟问题。解法:在query改写阶段,用LLM或实体链接(如Wikidata)把“苹果”映射到“Apple Inc.”。如果不想引入LLM延迟,可以用同义词词典(如WordNet或领域自定义词典)做扩展。另一个方案:在向量检索时,用query expansion——用LLM生成query的多个变体(如“苹果公司营收”、“Apple revenue”),分别检索后合并结果。工程取舍:扩展会增加召回成本,通常只对高频实体做。
追问 2:如果top-5文档里没有正确答案,怎么处理?
这是召回失败场景。解法:1)在生成阶段,prompt中明确要求“如果文档中没有相关信息,请说‘无法回答’”,避免幻觉。2)在检索阶段,增加fallback机制:如果top-5的BM25分数都低于阈值(如0.3),则扩大召回范围(如从top-50改为top-100),或触发query改写(如用LLM生成更宽泛的query)。3)离线优化:用负样本挖掘(如从BM25低分文档中采样)训练更好的embedding模型,提升召回率。
追问 3:如何评估RAG系统的端到端效果?
用RAGAS框架,包含三个指标:1)Faithfulness:生成内容是否被检索文档支持,用NLI模型计算。2)Answer Relevance:生成答案是否与query相关,用embedding相似度。3)Context Precision:检索到的文档中,有多少是真正相关的,用NDCG@k。实际落地时,还需要人工评估(如5分制打分),因为自动指标与人类判断的相关性只有0.6-0.7。工程取舍:自动评估快但不准,人工评估准但慢,通常用自动指标做A/B测试,人工评估做最终验收。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“RAG就是检索+生成,用向量数据库查一下,然后丢给LLM” → ✅ 正确切入:要详细说明每个环节的具体方法(如query改写用HyDE,检索用BM25+向量混合,排序用cross-encoder),并给出工程取舍(如rerank只对top-50做,因为成本高)。
- ❌ 说“检索用向量数据库就够了,BM25过时了” → ✅ 正确切入:BM25对精确匹配和长尾词效果优于向量检索,两者互补。实际系统中混合召回是标配,能提升Recall@100 10-15个点。
- ❌ 说“生成时用默认prompt就行” → ✅ 正确切入:prompt设计是关键,需要显式要求引用标注、限制使用外部知识、设置温度=0。还要做输出验证,防止LLM忽略指令。
6️⃣ 简历呼应
- 如果你有RAG项目:从“我在项目中遇到了query改写和rerank的坑”切入,具体说明你用了HyDE和BGE-reranker,并对比了NDCG@10的提升。
- 如果你只做过传统NLP:用“信息检索+文本生成”的类比迁移,强调BM25和向量检索的互补性,以及如何用NLI模型做幻觉检测。
- 如果你是校招无项目:聚焦“我复现了RAGAS评估框架,在BEIR数据集上对比了不同配置”,展示你对benchmark和指标的熟悉度。
- 《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》(Lewis et al., 2020)——RAG原始论文
- 《HyDE: Precise Zero-Shot Dense Retrieval without Relevance Labels》(Gao et al., 2022)——query改写方法
- 《ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT》(Khattab & Zaharia, 2020)——多路召回中的向量检索
- 《RAGAS: Automated Evaluation of Retrieval Augmented Generation》(Es et al., 2023)——评估框架
- BEIR benchmark(Thakur et al., 2021)——检索评估标准数据集