AI Agent混合搜索:关键词+向量双管齐下,召回率翻倍
🩺 摘要
向量搜索找到意思相近的结果,但可能漏掉精确匹配的关键词。混合搜索两种都用——找不到人,至少找得到字。
📝 详情
一个真实案例:用户搜"MacBook Pro 2026",向量搜索返回了一堆"笔记本电脑"相关的内容——意思没错,但用户想要的只是那个特定产品页。
为什么纯向量搜索不够
向量搜索擅长找"意思相近"的内容,但不擅长"精确匹配"。搜"iPhone 15 价格"时,它可能找到"手机售价"的内容,但漏了包含精确报价的页面。
混合搜索怎么工作
用户搜索 → 同时跑两种检索
├─ 关键词搜索(BM25/Elasticsearch)→ 精确匹配
└─ 向量搜索(Embedding + 相似度)→ 语义匹配
↓
合并结果 → 去重 → 重排序 → 给LLM
实现
# 关键词搜索
keyword_results = bm25_search(query)
# 向量搜索
vector_results = vector_store.similarity_search(query)
# 合并(加权平均)
hybrid_results = merge_results(keyword_results, vector_results, alpha=0.3)
总结
混合搜索的配置不复杂,效果却很明显。关键词部分是保险——至少能精确命中。向量部分是扩展——能找到更多相关。
权重调优
混合搜索的关键是关键词检索和向量检索的权重分配。
def hybrid_search(query, alpha=0.3):
# alpha=0: 纯向量搜索, alpha=1: 纯关键词搜索
keyword_results = bm25_search(query)
vector_results = vector_search(query)
# 加权融合
combined = {}
for doc, score in keyword_results:
combined[doc['id']] = score * alpha
for doc, score in vector_results:
combined[doc['id']] = combined.get(doc['id'], 0) + score * (1 - alpha)
return sorted(combined.items(), key=lambda x: -x[1])[:10]
alpha值需要根据你的数据调。一般0.2-0.4效果最好。
💬 评论 (0)