vectordb
是一個 Pythonic 向量資料庫,提供一整套 CRUD(建立、讀取、更新、刪除)操作和強大的可擴充性選項,包括分片和複製。它可以輕鬆部署在從本地到本地和雲端的各種環境中。 vectordb
正是您所需要的-不多也不少。它證明了有效的 Pythonic 設計,無需過度設計,使其成為滿足您所有需求的精益且強大的解決方案。
vectordb
利用了 DocArray 強大的檢索能力以及 Jina 的可擴展性、可靠性和服務能力。神奇之處在於:DocArray 充當驅動向量搜尋邏輯的引擎,而 Jina 則保證高效且可擴展的索引服務。這種協同作用最終帶來了強大且用戶友好的向量資料庫體驗 - 這就是適合您的vectordb
。
pip 安裝向量資料庫
vectordb
入門首先使用 DocArray 資料類語法定義文件模式:
from docarray import BaseDocfrom docarray.typing import NdArrayclass ToyDoc(BaseDoc): text: str = '' 嵌入:NdArray[128]
選擇預先建置的資料庫(例如InMemoryExactNNVectorDB
或HNSWVectorDB
),並套用架構:
from docarray import DocListimport numpy as npfrom v? doc) {i}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# 執行搜尋查詢query = ToyDoc(text= 'query ', embedding=np.random.rand(128))results = db.search(inputs=DocList[ToyDoc]([query]), limit=10)# 印出results[0].matches 中m 的匹配項: print (米)
由於我們發出了單一查詢,因此results
僅包含一個元素。最近鄰搜尋結果方便地儲存在.matches
屬性中。
vectordb
作為服務vectordb
被設計為可以輕鬆地作為服務使用,支援gRPC
、 HTTP
和Websocket
通訊協定。
在伺服器端,您將如下啟動服務:
使用 db.serve(protocol='grpc', port=12345,replicas=1, shards=1) 作為服務:service.block()
此指令使用具有1
副本和1
分片的gRPC
協定在連接埠12345
上將vectordb
作為服務啟動。
在客戶端,您可以使用以下命令存取該服務:
from vectordb import Client# 實例化連接到伺服器的客戶端。實際中,將0.0.0.0替換為伺服器IP位址。 ([查詢]),限制=10)
這允許您執行搜尋查詢,直接從遠端vectordb
服務接收結果。
vectordb
您可以將您的vectordb
實例無縫部署到智納AI雲,這可確保從任何位置存取您的資料庫。
首先將資料庫執行個體或類別嵌入 Python 檔案:
# example.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # 注意 `db` 是我們想要服務的實例 if __name__ == 'main__ _main__ Guardwith db.serve() as service:service.block() 來保護這部分程式碼
接下來,請按照以下步驟部署您的實例:
如果您還沒有註冊,請註冊 Jina AI Cloud 帳戶。
使用jc
命令列登入您的Jina AI Cloud帳戶:
登入
部署您的實例:
vectordb部署--db範例:db
部署完成後,使用vectordb
Client存取指定的端點:
from vectordb import Client# 將 ID 替換為您部署的資料庫的 ID,如上面的螢幕截圖所示 c = Client(address='grpcs://ID.wolf.jina.ai')
然後,您可以使用jc
命令列出、暫停、還原或刪除已部署的資料庫:
jcloud list ID
jcloud pause ID
或jcloud resume ID
jcloud remove ID
向量資料庫充當複雜的嵌入儲存庫,捕捉不同物件之間語義相似性的本質。這些資料庫促進了跨多種多模式資料類型的相似性搜索,為資訊檢索的新時代鋪平了道路。透過提供上下文理解和豐富生成結果,向量資料庫大大增強了語言學習模型(LLM)的效能和實用性。這強調了它們在數據科學和機器學習應用的發展中的關鍵作用。
vectordb
中的本機庫使用和客戶端-伺服器互動共享相同的 API。這提供了index
、 search
、 update
和delete
功能:
index
:接受DocList
進行索引。
search
:將批次查詢的DocList
或單一BaseDoc
作為單一查詢。它會傳回單一或多個結果,每個結果都具有按relevance
排序的matches
和scores
屬性。
delete
:接受要從索引中刪除的文件的DocList
。只有id
屬性是必需的,因此如果需要刪除文檔,請確保追蹤indexed
IDs
。
update
:接受索引中要更新的文檔的DocList
。 update
操作將使用輸入文件中的屬性和有效負載來取代具有相同索引的indexed
文件。
您可以使用以下參數提供vectordb
並從客戶端存取它:
協議:服務協議。它可以是gRPC
、 HTTP
、 websocket
或它們的組合,以列表形式提供。預設是gRPC
。
port:服務存取埠。可以是每個提供的協定的連接埠清單。預設值為 8081。
工作空間:VectorDB保存所需資料的路徑。預設為“.” (目前目錄)。
使用vectordb
提供或部署向量資料庫時,您可以設定兩個縮放參數:
分片:數據分片的數量。這可以改善延遲,因為vectordb
確保文件僅在其中一個分片中建立索引。搜尋請求被傳送到所有分片並且結果被合併。
副本:資料庫副本的數量。 vectordb
使用RAFT演算法來同步每個分片的副本之間的索引。這提高了服務可用性和搜尋吞吐量,因為多個副本可以並行回應更多搜尋請求,同時允許 CRUD 操作。注意:在 JCloud 部署中,副本數設定為 1。
以下是每個VectorDB
類型的參數:
該資料庫對嵌入執行詳盡的搜索,並且具有有限的配置設定:
workspace
:保存所需資料的資料夾。
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
該資料庫採用 HNSWLib 中的 HNSW(分層可導航小世界)演算法進行近似最近鄰搜尋。它提供了幾個配置選項:
workspace
:指定儲存和保留所需資料的目錄。
此外,HNSWVectorDB 提供了一組配置,允許調整最近鄰搜尋演算法的效能和準確性。這些配置的詳細描述可以在 HNSWLib README 中找到:
space
:指定用於空間的相似性量測(選項為「l2」、「ip」或「cosine」)。預設值為“l2”。
max_elements
:設定索引的初始容量,可以動態增加。預設值為 1024。
ef_construction
:此參數控制索引建置期間的速度/準確性權衡。預設值為 200。
ef
:此參數控制查詢時間/準確性的權衡。預設值為 10。
M
:此參數定義圖中傳出連線的最大數量。預設值為 16。
allow_replace_deleted
:如果設定為True
,則允許以新新增的元素取代已刪除的元素。預設值為False
。
num_threads
:這會設定index
和search
操作期間要使用的預設執行緒數。預設值為 1。
vectordb
包含一個簡單的 CLI,用於服務和部署資料庫:
描述 | 命令 |
---|---|
在本地為您的資料庫提供服務 | vectordb serve --db example:db |
將您的資料庫部署在智納AI雲端上 | vectordb deploy --db example:db |
使用者友善的介面:對於vectordb
,簡單性是關鍵。其直覺的介面旨在適應不同專業水平的用戶。
簡約設計: vectordb
包含了所有必要的功能,沒有不必要的複雜性。它確保從本地部署到伺服器和雲端部署的無縫過渡。
全面的 CRUD 支援:從索引和搜尋到更新和刪除, vectordb
涵蓋了整個 CRUD 操作範圍。
DB 即服務:透過vectordb
利用 gRPC、HTTP 和 Websocket 協定的強大功能。它使您能夠為資料庫提供服務並有效率地執行插入或搜尋操作。
可擴充性:體驗vectordb
部署功能的原始力量,包括強大的可擴充性功能,如分片和複製。透過分片改善服務延遲,同時複製提高可用性和吞吐量。
雲端部署:使用 Jina AI Cloud 在雲端部署您的服務變得輕而易舉。更多部署選項即將推出!
無伺服器功能: vectordb
可以在雲端以無伺服器模式部署,確保根據您的需求實現最佳的資源利用率和資料可用性。
多種 ANN 演算法: vectordb
提供近似最近鄰 (ANN) 演算法的多種實作。以下是當前的產品,即將推出更多整合:
InMemoryExactNNVectorDB(精確神經網路搜尋):實作簡單的最近鄰演算法。
HNSWVectorDB(基於 HNSW):利用 HNSWLib
向量資料庫的未來看起來很光明,我們有雄心勃勃的計劃!以下是我們目前正在開發的功能的概覽:
更多 ANN 搜尋演算法:我們的目標是支援更廣泛的 ANN 搜尋演算法。
增強的過濾功能:我們正在努力增強我們的 ANN 搜尋解決方案以支援進階過濾。
可自訂性:我們的目標是使vectordb
高度可自訂,使Python開發人員能夠輕鬆地根據自己的特定需求自訂其行為。
擴展無伺服器容量:我們正在努力增強雲端中vectordb
的無伺服器容量。雖然我們目前支援 0 到 1 個副本之間的擴展,但我們的目標是將其擴展到 0 到 N 個副本。
擴展的部署選項:我們正在積極致力於促進跨各種雲端平台部署vectordb
,並提供廣泛的選項。
需要vectordb
幫助嗎?有興趣使用它,但需要某些功能來滿足您的獨特需求?請隨時與我們聯繫。加入我們的 Discord 社區,與我們和其他社區成員聊天。
VectorDB 專案由 Jina AI 支援並在 Apache-2.0 下取得授權。非常感謝社區的貢獻!如果您對新功能或改進有任何想法,我們很樂意聽取您的意見。我們一直在尋找使vectordb
更加用戶友好和有效的方法。