借助混合搜索,您可以获得精确匹配的精确度以及语义理解的智能性。在许多情况下,结合这两种方法将提供更全面、更相关结果。

究竟什么是混合搜索?

混合搜索是一种检索技术,它结合了向量搜索(语义搜索)和关键字搜索(词汇搜索)的优点,以查找查询最相关结果。

  • 向量搜索使用嵌入(密集向量)来捕获文本的语义含义,使系统能够找到意义上相似的结果,即使确切的单词不匹配。
  • 关键字搜索(BM25、TF-IDF 等)根据查询中确切单词或短语的出现频率进行匹配。

混合搜索结合了这些方法,通常通过对两种方法的结果进行评分和/或排名来实现,以最大化精确度和召回率。

关键字搜索 vs 向量搜索 vs 混合搜索

特征关键字搜索向量搜索混合搜索
基于词汇匹配 (BM25, TF-IDF)嵌入相似度 (余弦, 点积)两者都有
优势精确匹配,相关性上下文含义相关性 + 含义的均衡
劣势无语义理解错过精确关键字计算量略大
示例匹配”chicken soup” = chicken soup”chicken soup” = hot broth with chicken字面意思和相关概念都匹配
最佳用例法律文档,结构化数据聊天机器人,问答,语义搜索多模态,真实的混乱用户查询

为什么混合搜索可能更适合您的应用-

  • 提高召回率: 捕获纯关键字或向量搜索遗漏的更多相关结果。
  • 平衡的精确度: 精确匹配获得优先,同时也包括语义上相关的结果。
  • 对歧义具有鲁棒性: 处理拼写变体、同义词和模糊的用户意图。
  • 两全其美: 关键字在应该的时候起作用,含义在需要的时候起作用。

非常适合食谱搜索、客户支持、法律发现等真实应用

Agno 中支持混合搜索的 Vector DB

以下向量数据库通过原生支持或配置支持混合搜索:

数据库混合搜索支持
pgvector✅ 是
milvus✅ 是
lancedb✅ 是
qdrantdb✅ 是
weaviate✅ 是
mongodb✅ 是 (Atlas Vector Search)

示例:使用 pgvector 进行混合搜索

from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.vectordb.pgvector import PgVector, SearchType

# 数据库 URL
db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"

# 初始化混合向量数据库
hybrid_db = PgVector(
    table_name="recipes",
    db_url=db_url,
    search_type=SearchType.hybrid  # 混合搜索
)

# 使用混合搜索加载 PDF 知识库
knowledge_base = PDFUrlKnowledgeBase(
    urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
    vector_db=hybrid_db,
)

# 将数据加载到数据库中(首次设置)
knowledge_base.load(recreate=True, upsert=True)

# 运行混合搜索查询
results = hybrid_db.search("chicken coconut soup", limit=5)
print("Hybrid Search Results:", results)

查看更多示例

如需实践代码和高级用法,请在此处查看每个支持的向量数据库的混合搜索示例here