写在前面
最近在学习使用 Langchain 开发一个 AI Agent,其中使用了 Qdrant 向量数据库来作为 AI Agent 的知识库,本篇主要是写关于 Qdrant 在 Langchain 里的一些基本操作,以及遇到的一些问题。
内容
前置准备
首先我们用 docker 的形式来安装,参照官方的 docker 教程即可:
# 拉取镜像
docker pull qdrant/qdrant
# 运行容器,并挂载到当前目录下的 qdrant_storage 文件夹
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
qdrant/qdrant
# 想要在 Langchain 里使用 Qdrant,还需要进行以下安装
pip install langchain-qdrant
Qdrant 提供了三种访问方式:
- REST API: localhost:6333
- Web UI: localhost:6333/dashboard
- GRPC API: localhost:6334
初始化
QdrantClient 里面有几个跟地址有关的参数:
- url
- host
- path
- location
它们只能选择一个填写,不能有多于1个有值。它们被分为 Qdrant 的两种模式:本地模式
和远端模式
。
本地模式
本地模式也就是不需要 Qdrant 服务端的形式存在,它有内存形式
和磁盘形式
。
内存形式
内存形式就是在你的客户端运行期间,数据会存在,一旦客户端被销毁了,这些数据也就没了。
qdrant = QdrantVectorStore.from_documents(
docs,
embeddings,
location=":memory:", # 需要设置这个值
collection_name="my_documents",
)
磁盘形式
磁盘形式则是你可以指定一个本地路径来存放数据。
qdrant = Qdrant.from_documents(
docs,
embeddings,
path="/tmp/local_qdrant",
collection_name="my_documents",
)
远端模式
如果我们在远端部署了 Qdrant,想以 C/S 的形式来连接,则应该使用远端模式,也就是填写 url
或 host
url = "<---qdrant url here --->"
qdrant = QdrantVectorStore.from_documents(
docs,
embeddings,
url,
prefer_grpc=True, # 这里最好设置为 true
collection_name="my_documents",
)
遇到的一些问题
- 在使用
远端模式
的时候,如果没有设置prefer_grpc=True
,走 REST 的形式,在一些例如耗时比较久的场景下(例如上传一个文件到 Qdrant 里),容易触发超时。
参考
How to Get Started with Qdrant Locally
Langchain-Qdrant
Requests Timed out