来源:互联网 更新时间:2026-05-30 14:03
在RAG(检索器增强生成)系统中,混合搜索并不是什么花哨的新名词,它本质上是将两种截然不同的检索思路——传统的关键字匹配与基于语义的向量搜索——结合起来,以达到更高的准确率和召回率。说白了,就是既看关键词,又看语义,两边的好处都要占。
那么,混合搜索到底是怎么实现的?我们一步步拆开看。
稀疏检索就是我们最熟悉的“关键词匹配”那一套。它依赖TF-IDF、BM25这类算法,根据查询词在文档中间出现的频率和分布来打分。优点是简单直接,对于有明确术语的查询特别高效。在LangChain里要实现BM25检索,可以使用rank_bm25库。下面是一个集成示例:
pip install rank_bm25 langchain
from langchain import VectorstoreRetriever
from rank_bm25 import BM25Okapi
from langchain.document_loaders import SimpleDocumentLoader
from langchain.embeddings import BM25Embeddings
documents = [
"The quick brown fox jumps over the lazy dog.",
"Never jump over the lazy dog quickly.",
"The quick red fox leaps over the lazy dog."
]
# 分词
tokenized_docs = [doc.split(" ") for doc in documents]
bm25 = BM25Okapi(tokenized_docs)
query = "quick fox"
tokenized_query = query.split(" ")
doc_scores = bm25.get_scores(tokenized_query)
top_n = 3
top_docs = bm25.get_top_n(tokenized_query, documents, n=top_n)
print("Top documents:", top_docs)
为了更方便地在LangChain中使用,可以把它封装成自定义检索器:
class BM25Retriever(VectorstoreRetriever):
def __init__(self, documents):
self.documents = documents
tokenized_docs = [doc.split(" ") for doc in documents]
self.bm25 = BM25Okapi(tokenized_docs)
def get_relevant_documents(self, query):
tokenized_query = query.split(" ")
doc_scores = self.bm25.get_scores(tokenized_query)
top_docs = self.bm25.get_top_n(tokenized_query, self.documents, n=3)
return top_docs
retriever = BM25Retriever(documents)
query = "quick fox"
relevant_docs = retriever.get_relevant_documents(query)
print("Relevant documents:", relevant_docs)
密集检索则是另一条路子——它把文本变成高维向量(嵌入),然后通过余弦相似度或欧几里得距离来比较查询和文档的语义接近程度。即使查询里没有出现文档中的任何一个词,只要能捕捉到语义上的关联,照样能把相关文档捞出来。这背后依赖BERT、Sentence Transformer等预训练模型。
混合搜索的执行流程大致分四步:
hybrid_score = (1−α)·sparse_score + α·dense_score要落地一个混合检索的RAG系统,通常需要以下几个组成部分:

下面是一段完整的Python示例,展示如何结合BM25和LangChain做一次混合检索风格的测试(这里仅演示稀疏检索部分,密集检索需要额外使用向量存储):
#!pip install rank_bm25 langchain scikit-learn
from rank_bm25 import BM25Okapi
from langchain.vectorstores import SimpleVectorStore
from langchain.retrievers import VectorstoreRetriever
documents = [
"向量数据库:FAISS、Milvus、Weviate或Pinecone等工具用于高效处理密集向量搜索。",
"预训练模型:BERT、RoBERTa或Sentence Transformer等模型用于生成密集检索的嵌入。",
"密集检索技术:利用嵌入和向量相似度量来查找语义相关的文档。",
"稀疏检索技术:使用传统的关键字匹配和布尔运算符,根据精确的关键字匹配检索文档。",
"RAG框架:如LangChain等框架可以将这些组件整合到一个有凝聚力的RAG系统中。",
]
tokenized_docs = [doc.split(" ") for doc in documents]
bm25 = BM25Okapi(tokenized_docs)
query = "混合搜索 RAG 优势"
tokenized_query = query.split(" ")
doc_scores = bm25.get_scores(tokenized_query)
top_n = 3
top_docs = bm25.get_top_n(tokenized_query, documents, n=top_n)
print("检索到的相关文档:")
for idx, doc in enumerate(top_docs):
print(f"{idx + 1}. {doc}")
class BM25Retriever(VectorstoreRetriever):
def __init__(self, documents):
self.documents = documents
tokenized_docs = [doc.split(" ") for doc in documents]
self.bm25 = BM25Okapi(tokenized_docs)
def get_relevant_documents(self, query):
tokenized_query = query.split(" ")
return self.bm25.get_top_n(tokenized_query, self.documents, n=3)
retriever = BM25Retriever(documents)
query = "混合搜索 RAG 优势"
relevant_docs = retriever.get_relevant_documents(query)
print("通过LangChain集成的BM25检索到的相关文档:")
for idx, doc in enumerate(relevant_docs):
print(f"{idx + 1}. {doc}")
输出结果:
检索到的相关文档:
1. RAG框架:如LangChain等框架可以将这些组件整合到一个有凝聚力的RAG系统中。
2. 向量数据库:FAISS、Milvus、Weviate或Pinecone等工具用于高效处理密集向量搜索。
3. 稀疏检索技术:使用传统的关键字匹配和布尔运算符,根据精确的关键字匹配检索文档。
通过LangChain集成的BM25检索到的相关文档:
1. RAG框架:如LangChain等框架可以将这些组件整合到一个有凝聚力的RAG系统中。
2. 向量数据库:FAISS、Milvus、Weviate或Pinecone等工具用于高效处理密集向量搜索。
3. 稀疏检索技术:使用传统的关键字匹配和布尔运算符,根据精确的关键字匹配检索文档。
可以看到,通过混合稀疏与密集两种检索技术,RAG系统能大幅提升检索结果的质量和相关性,尤其在面对复杂、多变的查询时,这种组合策略几乎是不可或缺的。它让系统既保留了关键词匹配的精准度,又拥有了语义理解的灵活性——这才是现代信息检索中真正好用的“组合拳”。
下饭影视APP下载安装指南
灵宝派对手游下载安装地址推荐
和平精英如何做到压枪稳-和平精英怎样才能压枪稳
下载浏览器app下载安装选择推荐
初中英语同步课文跟读APP推荐|免费下载高口碑跟读软件排行榜
BuuPo官网在哪下载 最新官方下载安装地址
4D采矿者官网在哪下载 最新官方下载安装地址
阅读app安卓版下载推荐
碎片人偶Vragmeet官网在哪下载 最新官方下载安装地址
Elysium Above 履云录官网在哪下载 最新官方下载安装地址
无尽花界时装合辑
免费影视剧APP推荐
喧哗番长乙女 2nd Rumble !!官网在哪下载 最新官方下载安装地址
纸嫁衣9官网在哪下载 最新官方下载安装地址
萌神契约手游下载安装
好用的手环阅读app下载安装
儿子穿新中式现身大会堂 马斯克罕见用中文回应:他正在学习普通话
人声接近真人!OpenAI一口气更新三款超强语音AI
名单曝光!库克、马斯克等将随团到访中国 黄仁勋不在其中
短视频软件推荐
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc