什麼是Qdrant?理解這個向量搜索引擎的最終指南
Published on
你可能聽說過向量搜索引擎的光彩,但你是否曾想過是什麼使一個搜索引擎脫穎而出?那就是Qdrant,一個在高維數據搜索領域帶來革命性變革的存在。本文旨在揭開Qdrant是什麼、它如何運作以及你為什麼應該關注它的神秘面紗。
無論您是數據科學家、開發人員還是對搜索技術的最新進展感興趣的人,本指南都將對您有所幫助。我們將深入探討技術層面,將其與Faiss等其他引擎進行比較,甚至指導您進行安裝和使用。那麼,讓我們開始吧!
想要了解最新的LLM新聞嗎?請查看最新的LLM排行榜!
什麼是Qdrant?
以技術術語來說,什麼是Qdrant?
Qdrant是一個開源的向量搜索引擎,旨在處理高維數據。它採用了先進的算法,如分層導航小世界(Hierarchical Navigable Small World,HNSW)圖和產品量化(Product Quantization)。這些算法使其在索引和搜索向量時非常高效,即使處理大型數據集也能輕鬆應對。
-
HNSW圖: 這些圖用於高效的索引。它們使得Qdrant能夠迅速篩選高維數據,減少尋找相關結果所需的時間。
-
產品量化: 這是壓縮向量的一種技術。它確保引擎不僅快速,而且占用內存空間更少。
用通俗的語言來說,什麼是Qdrant?
把Qdrant想象成您數字內容的超級智能組織者。假設您擁有大量的照片、文章甚至歌曲。在這麼多資料中尋找特定內容就像在一堆草堆中尋找一根針。Qdrant利用其智能,快速找到您需要的內容。就像擁有一個了解您的收藏品的個人助理,甚至可能比您更了解!
什麼使Qdrant獨特?
-
HNSW圖: 這些圖是一種數據結構形式,允許Qdrant高效地索引高維數據。它們降低了計算複雜度,使搜索過程更加快速。
-
產品量化: 這種技術壓縮了數據庫中的向量。就像壓縮文件一樣,內容一樣,但占用的空間更少。這在處理大型數據集時非常重要,而且不會影響搜索速度。
-
語義搜索: 這是理解查詢的上下文和細微差別的能力。
傳統搜索引擎僅限於基於關鍵字的搜索。然而,Qdrant採用語義搜索。這意味著它理解查詢背後的含義,而不僅僅是您使用的詞語。
例如,如果您搜索“蘋果”,基於關鍵詞的搜索可能會帶出與水果和科技公司相關的結果。語義搜索能夠理解上下文並提供更相關的結果。
Qdrant以多種方式脫穎而出:
-
開源: 開源意味著任何人都可以為其開發做出貢獻。這創造了一個以社區驅動的環境,促進創新和透明。
-
高效性: Qdrant旨在提供快速和精確的搜索結果。它使用了先進的算法,確保在速度和可靠性方面脫穎而出。
Qdrant vs Faiss: 基準比較
在向量搜索引擎領域,Qdrant和Faiss通常並列進行評估。然而,由於缺乏統一的基準,很難進行明確的比較。本分析旨在從技術和數據驅動的角度比較Qdrant和Faiss以及其他競爭對手的表現。
下表列出了一個基準測試的關鍵性能指標。測試是在“deep-image-96-angular”數據集上進行的,每個引擎的配置不同。
引擎 | 配置名稱 | 數據集 | 上傳時間 (s) | 上傳 + 索引時間 (s) | P95 (s) | RPS | 并行 | P99 (s) | 延遲時間 (s) | 精度 | 引擎參數 |
---|---|---|---|---|---|---|---|---|---|---|---|
Qdrant | qdrant-rps-m-64-ef-512 | deep-image-96-angular | 845.78 | 8959.44 | 0.055 | 1541.86 | 100 | 0.063 | 0.024 | 0.96 | {"search_params":{"hnsw_ef":64}} |
Weaviate | weaviate-m-16-ef-128 | deep-image-96-angular | 8922.25 | 8922.25 | 0.35 | 507.33 | 100 | 0.41 | 0.19 | 0.94 | {"vectorIndexConfig":{"ef":256}} |
Milvus | milvus-m-16-ef-128 | deep-image-96-angular | 364.46 | 2116.90 | 0.22 | 339.44 | 100 | 0.23 | 0.17 | 0.97 | {"params":{"ef":128}} |
Elastic | elastic-m-16-ef-128 | deep-image-96-angular | 5252.68 | 6069.67 | 1.11 | 95.90 | 100 | 1.67 | 0.92 | 0.97 | {"num_candidates":128} |
參數解釋:
-
上傳時間: Qdrant的上傳時間為845.78秒,屬於中等速度,比Weaviate快但比Milvus慢。
-
索引時間: Qdrant的上傳和索引總時間為8959.44秒,是測試引擎中最長的。
-
延遲時間: Qdrant在延遲方面表現出色,僅為0.024秒,明顯優於其他所有引擎。
-
每秒請求數 (RPS): Qdrant以1541.86的RPS領先,表示更高的吞吐量。
-
Precision:Qdrant和Milvus的精度得分都很高,Qdrant为0.96,Milvus为0.97。
-
P95和P99延迟:Qdrant具有最低的P95和P99延迟,表明具有更好的性能一致性。
从数据中获取的技术见解:
-
Qdrant使用了HNSW(Hierarchical Navigable Small World)图,
hnsw_ef
参数设置为64,优化了搜索性能。 -
Weaviate使用了不同的
ef
参数设置为256,这可能解释了其较高的延迟和较低的RPS。 -
Milvus也使用
ef
参数设置为128,但成功实现了0.97的高精度得分。
根据数据,Qdrant在延迟和吞吐量(RPS)方面表现出色,尽管上传和索引需要更长时间。其高精度得分使其成为相似性搜索任务的可靠选择。
安装Qdrant的详细指南
使用Docker安装Qdrant
Docker是一个流行的容器化平台,也是最简单的运行Qdrant的方式之一。以下是逐步指南:
-
安装Docker:如果尚未在您的计算机上安装Docker,请从官方网站下载并安装它。
-
拉取Qdrant镜像:打开终端并执行以下命令,从Docker Hub上拉取最新的Qdrant镜像。
docker pull qdrant/qdrant
- 运行Qdrant容器:基于已拉取的镜像启动一个新的容器,运行:
docker run -p 6333:6333 qdrant/qdrant
- 验证安装:为了确保Qdrant正在运行,打开一个新终端并执行:
curl http://localhost:6333
如果您收到一个JSON响应,则Qdrant安装成功。
在云上安装Qdrant
Qdrant Cloud为那些不愿处理基础设施的用户提供了托管服务。以下是入门方法:
-
注册:访问Qdrant Cloud网站并创建一个帐户。
-
创建实例:按照屏幕上的说明设置一个新的Qdrant实例。
-
API密钥:在创建实例之后,将提供API密钥和终端节点。请将其安全地存储。
-
测试实例:使用API密钥进行一个测试查询。如果收到成功的响应,表示您的云实例正在运行。
使用Python安装Qdrant
对于Python开发人员,Qdrant提供了一个Python客户端库。以下是安装它的方法:
-
安装Python和pip:如果尚未安装,请下载并安装Python和pip。
-
安装Qdrant客户端:打开一个终端并运行:
pip install qdrant-client
- Python脚本:为了与Qdrant交互,可以使用以下样例代码:
from qdrant_client import QdrantClient
client = QdrantClient(host='localhost', port=6333)
Qdrant教程:使用Qdrant构建问答系统
第1步:初始化变量并导入库
在进入代码之前,初始化变量并导入必要的库。
import openai
from qdrant_client.http.models import PointStruct
points = []
i = 1
第2步:循环遍历文本块
遍历每个文本块以生成嵌入。文本块应该已经先前创建并存储在一个名为chunks
的列表中。
for chunk in chunks:
i += 1
第3步:生成嵌入
在循环内,调用OpenAI的ada002模型为每个文本块创建嵌入。
response = openai.Embedding.create(
input=chunk,
model="text-embedding-ada-002"
)
embeddings = response['data'][0]['embedding']
第4步:存储嵌入
生成嵌入后,将其与ID和原始文本一起存储在一个列表中。
points.append(PointStruct(id=i, vector=embeddings, payload={"text": chunk}))
为什么使用ada002模型?
ada002模型专为捕捉文本的语义细微差别而设计,非常适合语义搜索或问答系统等应用程序。它以文本块作为输入,并输出一个数值向量,封装了该文本的含义。
第5步:初始化Qdrant客户端
首先,使用适当的主机和API密钥初始化Qdrant客户端。
from qdrant_client import QdrantClient
qdrant_client = QdrantClient(
host="<HOSTNAME>",
api_key="<API_KEY>",
)
第6步:创建或重新创建集合
在Qdrant中创建一个新集合以存储嵌入。如果集合已经存在,可以重新创建它。
qdrant_client.recreate_collection(
collection_name="mycollection",
vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
)
第7步:索引嵌入
现在,将嵌入索引在刚创建的集合中。
operation_info = qdrant_client.upsert(
collection_name="mycollection",
wait=True,
points=points
)
为什么使用Qdrant进行索引?
Qdrant提供了一个稳定且可靠的适合扩展过滤支持的生产就绪服务。其API方便用于存储、搜索和管理点,这些点在这种情况下就是嵌入。通过在Qdrant中索引嵌入,您可以根据用户输入执行高效的相似性搜索。
结论
总而言之,数据驱动的分析表明,Qdrant在延迟、RPS和精度等关键性能指标方面表现优异。尽管数据上传和索引可能需要更长时间,但这种权衡带来了高吞吐量、低延迟的引擎,提供准确的结果。这些特性使Qdrant成为那些在向量搜索引擎需求中优先考虑搜索性能和结果准确性的组织的有力选择。
常见问题(FAQ)
- Qdrant在延迟和RPS方面有何特点?
title: Qdrant 优化的 HNSW 图和性能特点 language: zh
Qdrant 使用了优化的 Hierarchical Navigable Small World (HNSW) 图进行搜索,这有助于降低延迟并提高 RPS。引擎参数,特别是 hnsw_ef
设置为 64,经过优化以达到这种性能。
- 为什么 Qdrant 的数据上传和索引需要更长时间?
Qdrant 在数据上传和索引方面所需的时间较长,是为了在搜索查询中获得高性能的一种权衡。该引擎专注于创建一个优化的索引结构,虽然耗时较长,但能在后续搜索中实现更快和更准确的结果。
- Qdrant 的精确度与其他引擎相比如何?
Qdrant 的精确度得分为 0.96,与 Milvus 的 0.97 相当。这表明 Qdrant 在相似性搜索任务中具有非常高的可靠性,大多数情况下返回准确的结果。
- Qdrant 是否适用于大规模部署?
鉴于其高 RPS 和低延迟,Qdrant非常适合需要高吞吐量和快速响应时间的大规模部署。然而,组织在规划其数据流水线时应考虑更长的上传和索引时间。
想要了解最新的LLM新闻吗?请查看最新的LLM排行榜!