当前位置: 首页 > news >正文

RAG工程化实践:混合检索双剑合璧,打造高鲁棒性信息检索系统!

本文深入探讨了RAG检索阶段优化中的混合检索方式,通过结合传统关键词匹配(如BM25)与向量语义相似度计算,实现“字面匹配搜索”与“语义相似度理解”的双重优势。文章详细解析了混合检索的核心思想、实现原理及具体代码示例,展示了如何通过并行检索、结果融合与权重分配,提升检索的全面性、鲁棒性,有效抑制模型幻觉并适应新术语。


二、混合检索

2.1 简介

混合检索 (Hybrid Search)指的是在同一RAG系统中,并行采用多种不同类型的检索算法进行信息获取(常见的组合方式为:传统关键词匹配 + 向量语义相似度计算)。该方法通过多条检索路径协同工作,从多个维度全方位捕捉文档内容与用户查询意图之间的匹配关系。

2.2 核心思想

其核心理念可概括为**“字面匹配搜索”“语义相似度理解”**的双剑合璧:

  • 关键字检索 (如 BM25):侧重精准定位,擅长捕捉专有名词、型号代码、缩写等特定词汇。例如搜索“iPhone 17”,能够有效筛除与“iPhone 16”相关的内容。
  • 向量检索 (Vector Search):侧重语义理解,能够感知用户提问背后的意图,即使查询中未出现原文的精确用词,也能召回语义相近的信息。
  • 结果融合 (Fusion):将多路检索返回的候选结果汇总整合,并借助重排序算法筛选出综合质量最优的文本片段。

2.3 实现原理

混合检索的实现通常遵循以下标准工作流:

A. 并行检索 (Parallel Retrieval)

系统接收到问题查询请求后,将其同时发送至两个(或多个)独立的检索模块:

  • 关键字检索模块 (BM25):基于词频和逆文档频率算法,筛选出包含相关关键字的文档内容。
  • 向量检索模块 (Embedding):将查询问题转换为向量表示,在向量数据库中检索距离最近的文本片段。

B. 结果整合与生成

将多路检索返回的文档汇集融合后,输入大语言模型生成最终答案。

2.4 优势

  • **高鲁棒性:**能够有效应对多种提问形式,无论是表述简略还是语义模糊,均能保持稳定表现。
  • **幻觉抑制:**通过精准的关键词匹配,将模型限定在正确的信息源范围内,减少内容张冠李戴的风险。
  • **冷启动支持:**对于新出现的专有名词或术语(向量模型可能尚未学习),关键词检索可快速填补这一空白。
  • **召回更全面:**兼顾“语义相关”与“字面匹配”两方面,整体召回效果显著优于单一检索路径。

三、混合实现方式

3.1 数据准备

在实现混合检索之前,我们首先准备待分割的文档,接着初始化向量数据库,并将分割后的文档存入向量库。此处仍沿用前文所使用的新闻稿news.txt,实现代码如下:

from langchain_community.document_loaders import TextLoaderfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_chroma import Chroma# 加载文档path = "news.txt"loader = TextLoader(path,encoding='utf-8')docs = loader.load()# 分割文档text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50)chunks = text_splitter.split_documents(docs)vectorstore = Chroma.from_documents(documents=chunks, embedding=embeddings_model, collection_name="mix-query")# 初始化检索器retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

3.2 向量检索

在混合检索前,先做向量检索测试一下效果,代码如下:

query = "OpenClawd是什么"# 向量检索vector_retriever_doc = vector_retriever.invoke(query)pretty_print_docs(vector_retriever_doc)

运行结果如下,向量检索能够从检索出相关数据:

3.2 关键字检索

这里关键字检索使用BM25(Best Matching 25)方式来检索,BM25是一种衡量文档与查询相关性的排序函数,通过考虑词频、逆文档频率和文档长度归一化来计算文本匹配得分。代码如下:

from langchain_community.retrievers import BM25Retriever# BM25关键词检索BM25_retriever = BM25Retriever.from_documents(chunks,k=3)BM25Retriever_doc = BM25_retriever.invoke(query)pretty_print_docs(BM25Retriever_doc)

运行结果如下,BM25能够检索出相关数据:

3.3 混合检索

把上面的两种检索方式进行融合,并设置权重,把检索的结果进行融合后再交给大模型来总结回答。相关代码如下:

from langchain.retrievers import EnsembleRetriever# 向量检索和关键词检索的权重各0.5,两者赋予相同的权重retriever = EnsembleRetriever(retrievers=[BM25_retriever, vector_retriever], weights=[0.5, 0.5])pretty_print_docs(retriever.invoke(query))

运行结果如下,结果返回4个文档块,对比发现是前两种方式检索出来的6个文档块有两个是重合的,融合后保留了4个:

把以上融合后的结果交给LLM进行总结,最终即可生成答案。

  1. 总结
    =====

混合检索通过并行使用多种检索方式,将“字面精准定位”与“语义意图理解”有机结合,有效弥补了单一检索模式的局限性。该方法利用多路召回与权重融合策略,不仅提升了检索的全面性和鲁棒性,还能抑制模型幻觉、增强对新术语的适应能力。

2026年AI行业最大的机会,毫无疑问就在应用层

字节跳动已有7个团队全速布局Agent

大模型岗位暴增69%,年薪破百万!

腾讯、京东、百度开放招聘技术岗,80%与AI相关……

如今,超过60%的企业都在推进AI产品落地,而真正能交付项目的大模型应用开发工程师**,**却极度稀缺!

落地AI应用绝对不是写几个prompt,调几个API就能搞定的,企业真正需要的,是能搞定这三项核心能力的人:

✅RAG:融入外部信息,修正模型输出,给模型装靠谱大脑

✅Agent智能体:让AI自主干活,通过工具调用(Tools)环境交互,多步推理完成复杂任务。比如做智能客服等等……

✅微调:针对特定任务优化,让模型适配业务

目前,脉脉上有超过1000家企业发布大模型相关岗位,人工智能岗平均月薪7.8w!实习生日薪高达4000!远超其他行业收入水平!

技术的稀缺性,才是你「值钱」的关键!

具备AI能力的程序员,比传统开发高出不止一截!有的人早就转行AI方向,拿到百万年薪!👇🏻👇🏻

AI浪潮,正在重构程序员的核心竞争力!现在入场,仍是最佳时机!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

⭐️从大模型微调到AI Agent智能体搭建

剖析AI技术的应用场景,用实战经验落地AI技术。从GPT到最火的开源模型,让你从容面对AI技术革新!

大模型微调

  • 掌握主流大模型(如DeepSeek、Qwen等)的微调技术,针对特定场景优化模型性能。

  • 学习如何利用领域数据(如制造、医药、金融等)进行模型定制,提升任务准确性和效率。

RAG应用开发

  • 深入理解检索增强生成(Retrieval-Augmented Generation, RAG)技术,构建高效的知识检索与生成系统。
  • 应用于垂类场景(如法律文档分析、医疗诊断辅助、金融报告生成等),实现精准信息提取与内容生成。

AI Agent智能体搭建

  • 学习如何设计和开发AI Agent,实现多任务协同、自主决策和复杂问题解决。
  • 构建垂类场景下的智能助手(如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等)。

如果你也有以下诉求:

快速链接产品/业务团队,参与前沿项目

构建技术壁垒,从竞争者中脱颖而出

避开35岁裁员危险期,顺利拿下高薪岗

迭代技术水平,延长未来20年的新职业发展!

……

那这节课你一定要来听!

因为,留给普通程序员的时间真的不多了!

立即扫码,即可免费预约

「AI技术原理 + 实战应用 + 职业发展

「大模型应用开发实战公开课」

👇👇

👍🏻还有靠谱的内推机会+直聘权益!!

完课后赠送:大模型应用案例集、AI商业落地白皮书

http://www.jsqmd.com/news/760546/

相关文章:

  • 深圳行,面试笔记!
  • Flappy框架:生产级LLM应用开发实战与架构解析
  • 基于NoneBot与LLM的智能聊天机器人插件部署与调优指南
  • 基于Vercel AI SDK与Next.js App Router构建企业级AI聊天机器人全栈方案
  • 如何用统一接口接入 Claude / Codex / OpenAI:一套更省事的方案
  • R 4.5中latticeExtra与spatstat 3.2耦合失效?3行代码修复+2个CRAN未收录的时空点模式诊断补丁
  • 告别向量池! Parkway AI用“文档树“重构信息检索,精准度飙升!
  • RevokeMsgPatcher终极指南:Windows平台聊天消息防撤回与多开解决方案
  • 从“重力势能”到“电势能”:一个高中物理老师没讲透的类比,帮你5分钟理解电势概念
  • 新手友好组合:快马搭建Python待办事项项目,Cursor辅助理解每一行代码
  • 基于人工势场 (APF) 与控制障碍函数 (CBF) 的避障路径规划算法研究(Matlab代码实现)
  • 终极Mac应用清理方案:Pearcleaner开源工具深度解析
  • 禹鼎工业无线遥控器天车卷扬机三防遥控电动葫芦YU-4起重机遥控器
  • 用Python和Librosa搞定语音情感识别:从RAVDESS数据集到MLP模型实战
  • 告别DMA困惑:手把手教你用AXI-Stream搞定摄像头数据流(附跨时钟域处理方案)
  • 如何判断是自己prompt写的不够好还是基座模型的能力不够达不到预期的效果,才需要做模型微调?
  • 月薪30K起!揭秘AI Agent工程师:AI时代最抢手的“新全栈”岗位!
  • 实战指南:基于快马平台快速开发全栈个人博客系统,释放vscode codex式生产力
  • League Akari:基于LCU API的英雄联盟客户端自动化工具技术架构深度解析
  • Docker Compose 如何实现容器间通信网络模式 network_mode 配置
  • 如何在 Docker Compose 中配置 Nginx 反向代理多个服务
  • 基于AI与爬虫的个性化投资日报生成器:从知乎大V观点到持仓分析
  • 2026年无动力游乐设备技术解析:塑料组合滑梯、大型游乐设备、室内游乐设备、攀爬网游乐设备、木质滑滑梯、游乐设备定制选择指南 - 优质品牌商家
  • TMS320F28xxx DSP开发踩坑记:手把手教你解决‘内存放不下’的#10099-D报错
  • 南京厂房漏水修缮实测:老牌服务商的现场交付全记录 - 奔跑123
  • Windows任务栏美化革命:TranslucentTB透明化工具完全指南
  • 2026年5月新发布:郑州视力养护加盟优选品牌——视立美视光中心深度解析 - 2026年企业推荐榜
  • 2026自动洗车机技术分享:全自动洗车机定做、全自动洗车机定制、公交车洗车机定制、四川工地洗车机厂家、四川洗车机厂家选择指南 - 优质品牌商家
  • 工业软件的开发难度在哪儿?
  • MRIcroGL:跨平台医学影像可视化终极指南