news 2026/5/7 8:02:45

【AI面试临阵磨枪-43】检索优化:多路召回、混合检索(向量 + 关键词)、重排序(Reranker)作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【AI面试临阵磨枪-43】检索优化:多路召回、混合检索(向量 + 关键词)、重排序(Reranker)作用

一、面试题目

面试官:请解释 RAG 检索优化三大核心手段:多路召回、混合检索(向量 + 关键词)、重排序 Reranker的原理、作用、解决什么问题、标准落地流程。

二、知识储备

1. 整体背景

纯向量检索存在短板:

  • 关键词精确匹配容易丢
  • 语义相近但主题不相关容易被误召
  • 单次召回靠前结果不一定最优

所以工业级 RAG 标配三层优化:多路召回 → 混合检索 → Reranker 重排序

2. 多路召回 Multi-way Recall

原理

同时用多种检索策略各自独立召回一批结果,再合并去重。常见多路:

  1. 向量语义召回
  2. 关键词分词召回
  3. 标题 / 摘要精确匹配
  4. 历史相关上下文召回
  5. 元数据过滤召回

作用

  • 单一路检索总有盲区,多路互补
  • 扩大候选池,不漏掉相关文档
  • 提升高相关文档进入候选集合的概率

解决问题

  • 单一检索策略召回不全
  • 专业术语、专有名词向量匹配不准
  • 语义相近但不相关内容混入

工程做法

每路召回 Top10~Top20,合并去重后得到候选池 Top30~Top50。

3. 混合检索 Hybrid Search(向量 + 关键词)

原理

向量语义检索+关键词倒排检索(BM25)结合:

  • 向量:抓语义相似
  • BM25 / 关键词:抓词精确匹配、专有名词、专业术语

再通过分数加权融合、归一化后排序。

作用

  • 向量擅长语义,不擅长精确词条
  • 关键词擅长精确命中,不擅长语义理解
  • 两者互补,兼顾语义 + 精准

解决问题

  • 专业名词、编号、合同号、工单号向量召回不准
  • 纯向量容易召回语义相似但无关内容
  • 纯关键词无法理解同义问句

常用融合方式

  1. 分数归一化 + 权重加权
  2. 各取 TopN 合并,再交给 Reranker

4. 重排序 Reranker

原理

多路 / 混合检索出来的粗排候选集(30~50 条),送入专门的Reranker 模型,逐一对「问题 - 段落」做相关性打分,重新精确排序。

和 Embedding 区别

  • Embedding:粗粒度全局语义匹配
  • Reranker:细粒度精细相关性判别,理解问句和段落细节逻辑

作用

  • 剔除语义相近但实际无关的噪声
  • 把真正高相关片段顶到前排
  • 大幅减少 RAG 幻觉,提升问答精准度

解决问题

  • 向量粗排靠前但实际不相关
  • 候选集冗余多、干扰信息多
  • 大模型拿到劣质上下文容易乱答

工程落地标准流程

用户问题→ 多路召回(向量 + 关键词 + 标题)→ 混合检索合并去重(候选 30~50)→ Reranker 精排打分→ 截取 Top3~Top7 优质上下文→ 送入 LLM 生成答案

5. 三者关系 & 面试必背总结

  1. 多路召回:广撒网,保证不漏,扩大候选池
  2. 混合检索:向量 + 关键词互补,兼顾语义 + 精准
  3. Reranker 重排:精筛精选,保证不杂、不乱,给 LLM 高质量上下文

工业级 RAG 标准架构:多路召回 → 混合检索融合 → Reranker 重排序 → 切片上下文组装 → LLM 生成

三、破局之道(面试满分话术)

检索优化的核心逻辑是:先多招、再融合、后精排。多路召回负责兜底不遗漏,混合检索解决向量和关键词各自短板,Reranker 做细粒度精准筛选。三者组合,是解决 RAG 召回不准、幻觉严重的标配方案,也是企业生产级 RAG 必须落地的标准架构。

四、极简伪代码 Python / JS

Python

# 1. 多路召回 def recall_multi_way(query): vec_res = vector_search(query, top=20) bm25_res = bm25_search(query, top=20) title_res = title_search(query, top=10) # 合并去重 return deduplicate(vec_res + bm25_res + title_res) # 2. 混合检索分数融合 def hybrid_merge(vec_list, bm25_list): # 归一化 + 加权 return weighted_sort(vec_list, bm25_list, w1=0.6, w2=0.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);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 8:00:19

别再手动调色了!用Python+Wasserstein Barycenter实现纹理混合,效果惊艳

用Python实现Wasserstein质心纹理混合:超越传统插值的艺术 在数字艺术和计算机视觉领域,纹理混合一直是个令人着迷的挑战。传统方法如线性插值或alpha混合往往产生模糊或失真的结果,而基于Wasserstein质心的技术却能创造出视觉上连贯且富有艺…

作者头像 李华
网站建设 2026/5/7 7:59:31

Prism模块化实战:手把手教你用DirectoryModuleCatalog实现WPF插件化开发

Prism模块化实战:用DirectoryModuleCatalog构建可插拔的WPF应用架构 在开发企业级WPF应用时,我们常常面临一个核心矛盾:如何平衡系统的稳定性和功能的可扩展性?传统单体架构虽然部署简单,但每次新增功能都需要重新编译…

作者头像 李华
网站建设 2026/5/7 7:58:31

AI智能体究竟是什么?从Chatbot到AGI,一文带你彻底搞懂!

本文通过一个生活小故事,引出对AI智能体的探讨。作者以Chatbot和AI智能体的区别为例,解释了智能体如何通过理解、分析、拆解任务并调用工具来完成任务。文章还介绍了智能体的四大关键要素:大脑(大语言模型)、工具、循环…

作者头像 李华
网站建设 2026/5/7 7:58:30

API安全检测工具:从原理到实践,构建自动化漏洞扫描器

1. 项目概述:API安全检测工具的价值与定位在当今的软件开发和运维实践中,API(应用程序编程接口)已经成为了系统间通信和数据交换的绝对核心。无论是微服务架构下的内部调用,还是面向合作伙伴或公众的开放平台&#xff…

作者头像 李华