AI Agent混合搜索:关键词+向量双管齐下,召回率翻倍

📘 AI教程 💬 🔥 Trending

🩺 摘要

向量搜索找到意思相近的结果,但可能漏掉精确匹配的关键词。混合搜索两种都用——找不到人,至少找得到字。

📝 详情

一个真实案例:用户搜"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效果最好。