项目简介:qdrant-client
qdrant-client
是一个用于 Qdrant 向量搜索引擎的 Python 客户端库。Qdrant 是一个专注于处理与大规模向量检索相关任务的搜索引擎,而 qdrant-client
则为开发人员提供了一套简单易用的工具库,使其能够轻松地与 Qdrant 交互。
功能特色
-
同步与异步请求:
qdrant-client
支持同步和异步方式调用所有 Qdrant 的 API 方法,开发人员可以根据项目需求选择适合的调用方式。 -
类型提示:该库为所有 API 方法提供了类型定义,使得使用过程中可以由编辑器提供代码补全等便利功能,提高开发效率。
-
本地模式:在不启动 Qdrant 服务器的情况下,用户可以以本地模式运行代码,非常适合用于开发、原型制作和测试。可以在 CI/CD 管道中运行测试,或者在 Colab 或 Jupyter Notebook 中使用。
-
REST 与 gRPC 支持:支持通过 REST 和 gRPC 两种协议进行数据通信,提供灵活的集成选项。
-
最小化依赖:项目依赖简单,易于与其他项目集成,不用担心复杂的依赖管理问题。
-
广泛的测试覆盖率:确保代码的稳定性和可靠性。
安装方式
使用 pip 可以轻松安装 qdrant-client
:
pip install qdrant-client
连接 Qdrant 服务器
对接 Qdrant 服务器非常简单,开发者只需指定服务器的主机地址与端口:
from qdrant_client import QdrantClient
client = QdrantClient(host="localhost", port=6333)
# 或者使用 URL 连接
client = QdrantClient(url="http://localhost:6333")
如需在本地运行 Qdrant 服务器,可以使用 Docker:
docker run -p 6333:6333 qdrant/qdrant:latest
本地模式示例
以下是如何在本地模式下初始化客户端的示例:
from qdrant_client import QdrantClient
client = QdrantClient(":memory:") # 使用内存数据库
# 或指定路径,数据会被持久化到磁盘
client = QdrantClient(path="path/to/db")
快速嵌入与简化 API
qdrant-client
还提供了 FastEmbed 库支持,这是一种基于 ONNX Runtime 的快速向量嵌入生成库,可以在 CPU 上实现类似 GPU 的高效性能。安装方法如下:
pip install qdrant-client[fastembed]
使用 FastEmbed 可以简化 API,使操作更为直观。在需要 GPU 支持时,可以切换到 fastembed-gpu
:
pip install 'qdrant-client[fastembed-gpu]'
创建与管理集合
创建新集合的示例:
from qdrant_client.models import Distance, VectorParams
client.create_collection(
collection_name="my_collection",
vectors_config=VectorParams(size=100, distance=Distance.COSINE),
)
插入向量数据:
import numpy as np
from qdrant_client.models import PointStruct
vectors = np.random.rand(100, 100)
client.upsert(
collection_name="my_collection",
points=[
PointStruct(
id=idx,
vector=vector.tolist(),
payload={"color": "red", "rand_number": idx % 10}
)
for idx, vector in enumerate(vectors)
]
)
异步客户端
从 1.6.1 版本起,所有 qdrant-client
方法均支持异步操作。使用异步客户端的示例如下:
from qdrant_client import AsyncQdrantClient, models
import numpy as np
import asyncio
async def main():
client = AsyncQdrantClient(url="http://localhost:6333")
await client.create_collection(
collection_name="my_collection",
vectors_config=models.VectorParams(size=10, distance=models.Distance.COSINE),
)
await client.upsert(
collection_name="my_collection",
points=[
models.PointStruct(
id=i,
vector=np.random.rand(10).tolist(),
)
for i in range(100)
],
)
res = await client.search(
collection_name="my_collection",
query_vector=np.random.rand(10).tolist(),
limit=10,
)
print(res)
asyncio.run(main())
总结
qdrant-client
提供了丰富且便利的功能集,使开发者可以高效地使用 Qdrant 向量搜索引擎。通过本地模式、Async 支持以及简化的 API 方法,该库成为数据科学和工程团队进行快速原型制作和生产部署的理想选择。