一、面试题目面试官请解释 RAG 检索优化三大核心手段多路召回、混合检索向量 关键词、重排序 Reranker的原理、作用、解决什么问题、标准落地流程。二、知识储备1. 整体背景纯向量检索存在短板关键词精确匹配容易丢语义相近但主题不相关容易被误召单次召回靠前结果不一定最优所以工业级 RAG 标配三层优化多路召回 → 混合检索 → Reranker 重排序2. 多路召回 Multi-way Recall原理同时用多种检索策略各自独立召回一批结果再合并去重。常见多路向量语义召回关键词分词召回标题 / 摘要精确匹配历史相关上下文召回元数据过滤召回作用单一路检索总有盲区多路互补扩大候选池不漏掉相关文档提升高相关文档进入候选集合的概率解决问题单一检索策略召回不全专业术语、专有名词向量匹配不准语义相近但不相关内容混入工程做法每路召回 Top10Top20合并去重后得到候选池 Top30Top50。3. 混合检索 Hybrid Search向量 关键词原理向量语义检索关键词倒排检索BM25结合向量抓语义相似BM25 / 关键词抓词精确匹配、专有名词、专业术语再通过分数加权融合、归一化后排序。作用向量擅长语义不擅长精确词条关键词擅长精确命中不擅长语义理解两者互补兼顾语义 精准解决问题专业名词、编号、合同号、工单号向量召回不准纯向量容易召回语义相似但无关内容纯关键词无法理解同义问句常用融合方式分数归一化 权重加权各取 TopN 合并再交给 Reranker4. 重排序 Reranker原理把多路 / 混合检索出来的粗排候选集3050 条送入专门的Reranker 模型逐一对「问题 - 段落」做相关性打分重新精确排序。和 Embedding 区别Embedding粗粒度全局语义匹配Reranker细粒度精细相关性判别理解问句和段落细节逻辑作用剔除语义相近但实际无关的噪声把真正高相关片段顶到前排大幅减少 RAG 幻觉提升问答精准度解决问题向量粗排靠前但实际不相关候选集冗余多、干扰信息多大模型拿到劣质上下文容易乱答工程落地标准流程用户问题→ 多路召回向量 关键词 标题→ 混合检索合并去重候选 3050→ Reranker 精排打分→ 截取 Top3Top7 优质上下文→ 送入 LLM 生成答案5. 三者关系 面试必背总结多路召回广撒网保证不漏扩大候选池混合检索向量 关键词互补兼顾语义 精准Reranker 重排精筛精选保证不杂、不乱给 LLM 高质量上下文工业级 RAG 标准架构多路召回 → 混合检索融合 → Reranker 重排序 → 切片上下文组装 → LLM 生成三、破局之道面试满分话术检索优化的核心逻辑是先多招、再融合、后精排。多路召回负责兜底不遗漏混合检索解决向量和关键词各自短板Reranker 做细粒度精准筛选。三者组合是解决 RAG 召回不准、幻觉严重的标配方案也是企业生产级 RAG 必须落地的标准架构。四、极简伪代码 Python / JSPython# 1. 多路召回 def recall_multi_way(query): vec_res vector_search(query, top20) bm25_res bm25_search(query, top20) title_res title_search(query, top10) # 合并去重 return deduplicate(vec_res bm25_res title_res) # 2. 混合检索分数融合 def hybrid_merge(vec_list, bm25_list): # 归一化 加权 return weighted_sort(vec_list, bm25_list, w10.6, w20.4) # 3. Reranker 重排 def rerank(query, candidate_list): return reranker_model.score_sort(query, candidate_list) # 完整链路 query 公司报销流程是什么 candidates recall_multi_way(query) hybrid_list hybrid_merge(candidates, candidates) final_top rerank(query, hybrid_list)[:5]JavaScript// 多路召回 function recallMultiWay(query) { const vecRes vectorSearch(query, 20); const bm25Res bm25Search(query, 20); const titleRes titleSearch(query, 10); return deduplicate([...vecRes, ...bm25Res, ...titleRes]); } // 混合加权 function hybridMerge(vecList, bm25List) { return weightedSort(vecList, bm25List, 0.6, 0.4); } // 重排序 function rerank(query, candidateList) { return rerankerModel.scoreSort(query, candidateList); } // 完整链路 const query 公司报销流程是什么; const candidates recallMultiWay(query); const hybridList hybridMerge(candidates, candidates); const finalTop rerank(query, hybridList).slice(0,5);