近来,RAG成了大语言模型的“救命稻草”,可让大语言模型回答更准确、更靠谱。可问题来了,很多 RAG 应用的检索系统还是有点“笨”:要么漏掉关键信息,要么抓回一堆无关紧要的“噪声”,搞得最终答案质量参差不齐。
那么,我们该怎么优化 RAG 的检索算法,让它既精准又高效呢?今天就来聊聊这个话题,带你一步步解锁 RAG 检索的“进阶玩法”!
为什么非得优化检索算法不可?
RAG 的工作流程其实很简单:
用户丢出一个问题(Query)
系统去“翻箱倒柜”找相关文档(Retriever)
把文档塞给 LLM,让它生成答案(Generator)
听起来挺顺畅,对吧?但关键就在第二步——检索。如果翻出来的文档不靠谱,哪怕 LLM 再聪明,也只能“巧妇难为无米之炊”。所以,检索算法就是 RAG 的命门,优化它,才能让整个系统“起飞”!
传统检索方法介绍
我们先来看看常见的检索方法,各自有啥优缺点:
BM25(关键词搜索)
优点:擅长精准匹配,像查字典一样适合结构化数据。
缺点:完全不理解语义,同义词、变体词一概不认,漏掉的信息可不少。
向量搜索(语义搜索)
优点:能“读懂”句子意思,非常适合非结构化数据。
缺点:有时候太“脑洞大开”,抓回一堆似是而非的东西,误召回让人头疼。
单独靠 BM25 或向量搜索,总觉得差点火候。要不信息丢了,要不噪声太多。所以,咱们得玩点更高级的——混合搜索(Hybrid Search)!
Hybrid Search简介
混合搜索就是把 BM25 和向量检索“捏”在一起,既能抓住关键词,又能理解语义,简直是“鱼和熊掌兼得”。具体怎么操作呢?
第一步:BM25 出马
根据关键词锁定一批相关文档,精准打击!
第二步:向量搜索补刀
用 Embedding 计算语义相似度,再捞一批“深藏不露”的好文档。
第三步:结果融合
加权融合:给 BM25 和向量搜索的分数加个权重,算个平均值。
交集/并集策略:要么取两者的“重合部分”(求稳),要么全收下(求全),看需求灵活调整。
Reranker:给结果来个“大洗牌”
Hybrid Search 虽然厉害,但偶尔还是会混进一些“杂牌军”。这时候,Reranker 就该登场了!它的任务是把检索结果重新排个序,让最靠谱的文档站到“C位”。
Reranker 怎么玩?
先用 BM25 和向量搜索召回一堆文档。
然后请 Reranker 出马,逐一打分,把最贴合问题的文档顶到前面。
Query Expansion:让查询更“会说话”
有时候,用户的问题太简短或模糊,检索系统“摸不着头脑”。这时候可以用 Query Expansion,帮查询“充实”一下,提高召回率。
扩展招式:
WordNet 同义词扩展:给关键词找“兄弟姐妹”,适合 BM25。
LLM 生成扩展:让大模型直接改写查询,适合语义搜索。
锦上添花的优化小技巧
除了上面的大招,还有几招“小而美”的优化方法:
MetaData 过滤:用文档的时间、分类等元数据,筛掉不相关的“路人甲”。
动态调权重:在 Hybrid Search 里,根据场景调整 BM25 和向量搜索的比重。
多轮对话优化:让用户多聊几句,提供更多上下文,查询自然更精准。
支持Hybrid Search的开源库
目前,有许多支持 Hybrid Search 的开源库,它们结合了 BM25 关键词搜索 和 向量搜索,并支持各种后处理优化(如 Reranking)。以下是几款常见的 Hybrid Search 开源库:
01、LlamaIndex
Github地址:https://github.com/run-llama/llama_index
简介:LlamaIndex 是一个流行的 RAG 框架,支持 Hybrid Search(BM25 + 向量检索),并且能够与 LLM 结合。
特点:
内置 BM25 + 向量检索融合(可调权重)
支持 FAISS、Weaviate、Qdrant、ChromaDB 等
支持 Reranker(如 Cohere Rerank)提升精准度
02、Jina AI
Github地址:https://github.com/jina-ai/serve
简介:Jina AI 提供一个强大的 Hybrid Search 解决方案,支持结合 BM25 和向量搜索,并内置多种 Reranker。
特点:
支持 FAISS、HNSW、Qdrant、Weaviate 等
可结合 Reranker 提高搜索质量
可用于 RAG、推荐系统等场景
03、Weaviate
Github地址:https://github.com/weaviate/weaviate
简介:Weaviate 是一个企业级的向量数据库,内置 Hybrid Search,允许同时使用 BM25 + 向量搜索 进行检索。
特点:
支持 OpenAI、Hugging Face 的 Embedding
内置 BM25 搜索,可进行关键词匹配
支持 GraphQL 查询,可扩展性强
04、Qdrant
Github地址:https://github.com/qdrant/qdrant
简介:Qdrant 是一个高性能的向量数据库,支持 Hybrid Search,能够结合 BM25 + 向量搜索 进行检索。
特点:
轻量级,适合本地或云端部署
支持 Reranker
05、ElasticSearch
Github地址:https://github.com/elastic/elasticsearch
简介:ElasticSearch 结合 BM25 和 kNN 向量检索,实现 Hybrid Search,适用于企业级应用。
特点:
支持 BM25 关键词搜索 + kNN 语义搜索
可与 OpenAI、Hugging Face 的 Embedding 结合
适用于大规模数据检索