當前位置: 妍妍網 > 碼農

Rust 實作下一代人工智慧的高效能向量資料庫

2024-03-21碼農

Qdrant(讀作:象限)是一個為下一代人工智慧套用而生的向量相似性搜尋引擎和向量資料庫。它不僅提供了一個生產就緒的服務,還有一套方便的API用於儲存、搜尋和管理向量點——附加了額外載荷的向量。Qdrant專門針對擴充套件篩選支持進行了最佳化,使其適用於各種基於神經網路或語意的匹配、分面搜尋和其他套用。Qdrant用Rust語言編寫,保證即使在高負載下也能快速且可靠。現在,讓我們深入了解Qdrant,以及如何開始使用它。

快速入門

Python 客戶端

透過 Python 客戶端快速開始體驗Qdrant,您可以用如下命令進行安裝:

pip install qdrant-client

Python 客戶端範例:

from qdrant_client import QdrantClient
# 建立記憶體中的Qdrant例項,用於測試、CI/CD
qdrant = QdrantClient(":memory:")
# 或者使用磁盤持久化數據,快速原型制作
client = QdrantClient(path="path/to/db")

客戶端-伺服器模式

推薦用於生產環境的方法是用客戶端-伺服器模式。您可以使用如下命令來執行容器:

docker run -p 6333:6333 qdrant/qdrant

現在,您可以用任何客戶端連線到這個服務了,包括Python:

qdrant = QdrantClient("http://localhost:6333"# 用於生產的Qdrant例項連線

客戶端庫支持

Qdrant 提供以下官方及社群客戶端庫,以便簡易整合到您的應用程式棧中:

  • 官方客戶端:Go、Rust、JavaScript/TypeScript、Python、.NET/C#、Java

  • 社群貢獻:Elixir、PHP、Ruby、Java

  • 核心特性

    篩選與載荷

    Qdrant可以將任意JSON載荷附加到向量上,這不僅可以儲存數據,還可以根據這些載荷中的值進行數據篩選。載荷支持多種數據型別和查詢條件,包括關鍵詞匹配、全文篩選、數值範圍、地理位置等。篩選條件可以以各種方式組合,如 should must must_not 條件,確保您可以在相似度匹配之上實作任何期望的業務邏輯。

    使用稀疏向量的混合搜尋

    針對向量嵌入在特定關鍵詞搜尋上的局限性,Qdrant 引入了對稀疏向量的支持,除了常規的密集向量。稀疏向量可以被看作是BM25或TF-IDF排名的泛化。它們使您能夠有效地利用基於變壓器的神經網路對單個令牌進行加權。

    向量量化與磁盤儲存

    Qdrant提供多種選項,使向量搜尋更加經濟和資源高效。內建的向量量化可以將RAM使用率降低高達97%,並動態管理搜尋速度和精度之間的權衡。

    分布式部署

    Qdrant透過兩種關鍵機制提供全面的水平延伸支援:

  • 透過分片進行大小擴充套件和透過復制進行吞吐量增強

  • 零停機捲動更新和無縫動態擴充套件集合的能力

  • 高亮功能

  • 查詢規劃和載荷索引 - 利用儲存的載荷資訊來最佳化查詢執行策略。

  • SIMD硬體加速 - 利用現代CPU x86-x64和Neon架構提供更好的效能。

  • 異步I/O - 使用io_uring即使在網路附加儲存上也能最大化磁盤吞吐量利用。

  • 預寫式日誌 - 即使在停電期間也能確保數據永續性並確認更新。

  • 整合計畫

    以下是一些Qdrant整合範例和/或文件:

  • Cohere:使用 Cohere 嵌入和 Qdrant 構建 QA 套用的部落格文章

  • DocArray:將 Qdrant 用作 DocArray 中的文件儲存

  • Haystack:將 Qdrant 用作 Haystack 的文件儲存以及相關部落格文章

  • LangChain:使用 Qdrant 作為 LangChain 的記憶體後端

  • LlamaIndex:將 Qdrant 用作 LlamaIndex 的向量儲存

  • OpenAI - ChatGPT 檢索外掛程式:使用 Qdrant 作為 ChatGPT 的記憶體後端

  • Microsoft Semantic Kernel:將 Qdrant 用作 Semantic Kernel 的持久記憶體

  • 完整文件與例項

    為了深入理解和套用Qdrant,您可以參考以下資源:

  • 快速開始指南 [1]

  • 帶有 SentenceBERT 和 Qdrant 的 End to End Colab 筆記本演示 [2]

  • 詳細文件 [3]

  • 步驟教程建立您的第一個神經網路計畫與Qdrant [4]

  • 實際套用案例

  • 發現語意文本搜尋 🔍 [5] :超越基於關鍵詞的搜尋,找到短文本中有意義的聯系。只需幾分鐘就可以使用預訓練的神經網路部署神經搜尋體驗文本搜尋的未來。

  • 探索相似影像搜尋 - 食品發現 🍕 [6] :當談到食物時,發現遠不止文本搜尋。人們常常基於外觀而不是描述和成分選擇餐點。即使他們不知道菜名,Qdrant也可以幫助使用者透過視覺搜尋找到他們的下一頓美餐。

  • 精通極端分類 - 電子商務產品分類 📺 [7] :進入極端分類的前沿領域,這是一個處理具有數百萬標簽的多類別和多標簽問題的新興機器學習領域。體驗預訓練變換模型和Qdrant如何革新電子商務產品分類。

  • API介面

  • REST API :您可以透過 線上OpenAPI 3.0文件 [8] 存取,OpenAPI方便地為幾乎任何框架或程式語言生成客戶端。

  • gRPC介面 :Qdrant同樣提供了gRPC介面,您可以在 這裏 [9] 找到相應文件。

  • 結論

    Qdrant是一個開創性的向量資料庫,它為我們開啟了利用強大的向量搜尋功能的大門,以支持我們的AI套用。無論您是在構建推薦引擎、實施語意搜尋還是探索影像辨識任務,Qdrant都提供了一個強大而靈活的平台來實作您的目標。隨著AI和機器學習技術的不斷成熟和普及,利用Qdrant等工具,我們能夠為所欲為地探索和創新。

    參考資料

    [1]

    快速開始指南: https://github.com/qdrant/qdrant/blob/main/QUICK_START.md

    [2]

    帶有 SentenceBERT 和 Qdrant 的 End to End Colab 筆記本演示: https://colab.research.google.com/github/qdrant/qdrant/blob/main/examples/grpc/colab/Qdrant + sentence-transformers.ipynb

    [3]

    詳細文件: https://qdrant.tech/docs/

    [4]

    步驟教程建立您的第一個神經網路計畫與Qdrant: https://github.com/qdrant/qdrant/blob/main/QUICK_START.md

    [5]

    發現語意文本搜尋 🔍: https://live.qdrant.tech

    [6]

    探索相似影像搜尋 - 食品發現 🍕: https://live.qdrant.tech/food_discovery

    [7]

    精通極端分類 - 電子商務產品分類 📺: https://live.qdrant.tech/ecomerce_products

    [8]

    線上OpenAPI 3.0文件: https://qdrant.github.io/qdrant/redoc/index.html

    [9]

    這裏: https://qdrant.github.io/qdrant/grpc/index.html

    文章精選

    「Rust