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进行总结,最终即可生成答案。
- 总结
=====
混合检索通过并行使用多种检索方式,将“字面精准定位”与“语义意图理解”有机结合,有效弥补了单一检索模式的局限性。该方法利用多路召回与权重融合策略,不仅提升了检索的全面性和鲁棒性,还能抑制模型幻觉、增强对新术语的适应能力。
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商业落地白皮书
