Hybrid Search
混合搜索

向量说「意思对」,关键词说「词匹配」,两者结合才是王道

RAG系统的「双引擎」——语义理解+精确匹配

🤔 什么是 Hybrid Search?

一句话定义:Hybrid Search 是将向量搜索(语义匹配)和关键词搜索(BM25精确匹配)结合起来的检索策略,通过融合两种分数获得更准确的搜索结果。

世界上有一种技术叫 Hybrid Search,它就像谈恋爱——你不能只看「感觉对不对」(向量搜索),也不能只看「条件合不合」(关键词搜索),两个都得看

向量搜索:找到「意思差不多」的文档
关键词搜索:找到「确实提到这个词」的文档
Hybrid Search:两个都给你,加权融合

🎓 周星驰式理解

想象你要找一个对象,有两种方法:

纯向量搜索像「看眼缘」——你告诉系统「我喜欢有趣的」,系统给你推荐一堆「有趣的人」。但你要的是「有趣的程序员」,系统给你推荐了「有趣的厨师」,因为在「有趣」的语义上它们是相似的。

纯关键词搜索像「相亲条件筛选」——你搜「程序员」,系统给你一堆程序员,但可能没一个有趣的。

Hybrid Search是「眼缘+条件都要」——既要有趣(语义),又要程序员(关键词),最后给你的是「有趣的程序员」。

⚙️ 工作原理

两种搜索引擎的优缺点

维度 向量搜索(Dense) 关键词搜索(Sparse/BM25)
匹配方式 语义相似度 词频+逆文档频率
擅长 理解意图、同义词 精确匹配、专业术语
弱点 漏掉精确关键词匹配 不理解同义词和意图
典型模型 BGE、OpenAI embeddings BM25、TF-IDF

融合策略

混合搜索的核心是「分数融合」,常见策略:

1. Reciprocal Rank Fusion (RRF) - 最常用

# RRF 分数融合公式
def rrf_score(rankings, k=60):
    scores = {}
    for ranking in rankings:
        for rank, doc_id in enumerate(ranking):
            if doc_id not in scores:
                scores[doc_id] = 0
            scores[doc_id] += 1 / (k + rank + 1)
    return sorted(scores.items(), key=lambda x: x[1], reverse=True)

# 向量搜索结果:[doc_a, doc_c, doc_b]
# BM25搜索结果:[doc_b, doc_a, doc_d]
# RRF融合后:[doc_a, doc_b, doc_c, doc_d]
# doc_a同时在两路排名靠前,综合得分最高

2. 加权线性融合

# 简单加权融合
def weighted_fusion(vector_score, bm25_score, alpha=0.7):
    # alpha控制权重:0.7偏向向量,0.3偏向关键词
    return alpha * vector_score + (1 - alpha) * bm25_score

🎯 OpenClaw实战应用

在 OpenClaw 的 RAG Skills 中配置混合搜索:

# OpenClaw RAG + 混合搜索
from openclaw import Agent, Skills

agent = Agent(
    name="企业知识库助手",
    skills=[
        Skills.rag(
            knowledge_base="company_docs",
            search={
                type: "hybrid",
                vector_weight: 0.7,    # 向量搜索权重
                keyword_weight: 0.3,  # 关键词搜索权重
                fusion_method: "rrf",  # 使用RRF融合
                top_k: 10
            }
        )
    ]
)

为什么技术文档搜索需要混合搜索?

场景演示

用户搜索:「GPT-4o mini 的 token 限制是多少?」

  • 纯向量搜索:可能找到「GPT-4 介绍」和「mini模型概述」,因为语义相关,但漏掉了精确的数据表格
  • 纯BM25:精确匹配到了「GPT-4o mini 128K tokens」的文档,但可能漏掉了同义词的「token限制」说法
  • 混合搜索:两者兼得!既找到了语义相关的概述文档,也精确匹配了数据表格

💡 最佳实践

权重调优

场景 向量权重 关键词权重 原因
客服FAQ 0.8 0.2 用户表达多样,语义更重要
技术文档 0.5 0.5 技术术语精确匹配很重要
法律合同 0.3 0.7 法律条文必须精确匹配
产品问答 0.6 0.4 折中方案

⚠️ 注意事项

  • 性能开销:混合搜索需要同时执行两种查询,延迟比单一搜索高
  • 分数归一化:向量分数和BM25分数的scale不同,需要归一化
  • 存储成本:需要同时维护向量索引和倒排索引

📊 效果对比

在企业知识库测试(10万篇文档,500条测试query)中:

方法 NDCG@10 Recall@10 MRR
纯BM25 0.52 0.48 0.61
纯向量 0.58 0.55 0.65
Hybrid (RRF) 0.71 0.68 0.78

📚 相关链接

🎉 总结

Hybrid Search 是RAG搜索的「双保险」——向量搜索保证你不会因为用户换个说法就找不到东西,关键词搜索保证你不会因为语义相似就给了个不精确的结果。

纯向量是「大概对」,纯关键词是「也许对」,混合搜索是「大概率对」。在AI搜索这个事上,大概率对已经是很大的进步了。