vectordb
、Python のベクトル データベースであり、CRUD (作成、読み取り、更新、削除) 操作の包括的なスイートと、シャーディングやレプリケーションなどの堅牢なスケーラビリティ オプションを提供します。ローカルからオンプレミス、クラウドに至るまで、さまざまな環境に簡単に導入できます。 vectordb
それ以上でもそれ以下でもなく、まさに必要なものを提供します。これは過剰なエンジニアリングを行わずに効果的な Python 設計を行っている証拠であり、すべてのニーズに対応する無駄のない強力なソリューションになっています。
vectordb
DocArray の強力な検索機能と、Jina のスケーラビリティ、信頼性、およびサービス機能を活用しています。ここに魔法があります。DocArray はベクトル検索ロジックを駆動するエンジンとして機能し、Jina は効率的でスケーラブルなインデックスの提供を保証します。この相乗効果により、堅牢でありながらユーザーフレンドリーなベクトル データベース エクスペリエンスが実現します。それが、 vectordb
です。
pip インストール Vectordb
vectordb
の使用開始まず、DocArray データクラス構文を使用して Document スキーマを定義します。
from docarray import BaseDocfrom docarray.typing import NdArrayclass ToyDoc(BaseDoc): text: str = '' 埋め込み: NdArray[128]
事前に構築されたデータベース ( InMemoryExactNNVectorDB
やHNSWVectorDB
など) を選択し、スキーマを適用します。
from docarray import DocListimport numpy as npfrom Vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# ワークスペースのパスを指定しますdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# ランダムな埋め込みを含むドキュメントのリストにインデックスを付けますdoc_list = [ToyDoc(text=f'toy doc) {私}'、 embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# 検索を実行します queryquery = ToyDoc(text='query', embedding=np .random.rand(128))結果 = db.search(inputs=DocList[ToyDoc]([query]),limit=10)# results[0].matches の m の一致を出力します: print(m)
単一のクエリを発行したため、 results
要素が 1 つだけ含まれます。最近傍検索の結果は、 .matches
属性に保存されると便利です。
vectordb
の使用を開始するvectordb
はサービスとして簡単に提供できるように設計されており、 gRPC
、 HTTP
、およびWebsocket
通信プロトコルをサポートしています。
サーバー側では、次のようにサービスを開始します。
サービスとして db.serve(protocol='grpc'、port=12345、replicas=1、shards=1) を使用:service.block()
このコマンドは、 1
レプリカと1
シャードを持つgRPC
プロトコルを使用して、 vectordb
ポート12345
上のサービスとして開始します。
クライアント側では、次のコマンドを使用してサービスにアクセスできます。
fromvectordb import Client# サーバーに接続されているクライアントをインスタンス化します。実際には、0.0.0.0 をサーバーの IP アドレスに置き換えます。client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# 検索を実行します。 queryresults = client.search(inputs=DocList[ToyDoc] ([クエリ])、制限=10)
これにより、検索クエリを実行し、リモートのvectordb
サービスから結果を直接受け取ることができます。
vectordb
のホスティングvectordb
インスタンスを Jina AI Cloud にシームレスにデプロイできるため、どこからでもデータベースに確実にアクセスできます。
まず、データベース インスタンスまたはクラスを Python ファイルに埋め込みます。
# example.pyfrom docarray import BaseDocfrom Vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # `db` がサービス対象のインスタンスであることに注目してくださいif __name__ == '__main__':# 重要: 必ず確認してくださいコードのこの部分を保護するには、__main__ Guardwith db.serve() を使用します。サービス:service.block()
次に、次の手順に従ってインスタンスをデプロイします。
まだサインアップしていない場合は、Jina AI Cloud アカウントにサインアップしてください。
jc
コマンド ラインを使用して、Jina AI Cloud アカウントにログインします。
jcログイン
インスタンスをデプロイします。
Vectordb デプロイ --db 例:db
デプロイ後、 vectordb
クライアントを使用して、割り当てられたエンドポイントにアクセスします。
from Vectordb import Client# 上記のスクリーンショットに示すように、ID をデプロイされた DB の ID に置き換えます。c = Client(address='grpcs://ID.wolf.jina.ai')
その後、 jc
コマンドを使用して、デプロイされた DB を一覧表示、一時停止、再開、または削除できます。
jcloud list ID
jcloud pause ID
またはjcloud resume ID
jcloud remove ID
ベクトル データベースは、埋め込み用の高度なリポジトリとして機能し、異種オブジェクト間の意味上の類似性の本質を捉えます。これらのデータベースは、無数のマルチモーダル データ タイプにわたる類似性検索を容易にし、情報検索の新時代への道を開きます。ベクトル データベースは、コンテキストの理解を提供し、生成結果を充実させることにより、言語学習モデル (LLM) のパフォーマンスと実用性を大幅に向上させます。これは、データ サイエンスと機械学習アプリケーションの進化におけるそれらの重要な役割を強調しています。
ローカル ライブラリの使用と、 vectordb
でのクライアントとサーバーの対話は両方とも同じ API を共有します。これにより、 index
、 search
、 update
、およびdelete
機能が提供されます。
index
: インデックス付けするDocList
受け入れます。
search
: バッチ化されたクエリのDocList
または単一のBaseDoc
単一のクエリとして受け取ります。単一または複数の結果が返され、それぞれの結果がmatches
、 relevance
によってscores
された属性がスコア付けされます。
delete
: インデックスから削除するドキュメントのDocList
を受け入れます。必要なのはid
属性のみであるため、ドキュメントを削除する必要がある場合は、 indexed
IDs
必ず追跡してください。
update
: インデックス内で更新するドキュメントのDocList
を受け入れます。 update
操作では、 indexed
ドキュメントが、入力ドキュメントの属性とペイロードを含む同じインデックスに置き換えられます。
次のパラメータを使用して、 vectordb
提供し、クライアントからそれにアクセスできます。
プロトコル: サービス提供プロトコル。 gRPC
、 HTTP
、 websocket
、またはそれらの組み合わせをリストとして提供します。デフォルトはgRPC
です。
port: サービスアクセスポート。提供された各プロトコルのポートのリストを指定できます。デフォルトは8081です。
ワークスペース: VectorDB が必要なデータを保持するパス。デフォルトは「.」です。 (現在のディレクトリ)。
vectordb
を使用して Vector データベースを提供またはデプロイするときに、2 つのスケーリング パラメーターを設定できます。
シャード: データシャードの数。これにより、 vectordb
シャードの 1 つのみでドキュメントのインデックスを作成するため、レイテンシーが改善されます。検索リクエストはすべてのシャードに送信され、結果はマージされます。
レプリカ: DB レプリカの数。 vectordb
RAFT アルゴリズムを使用して、各シャードのレプリカ間のインデックスを同期します。これにより、CRUD 操作を許可しながら複数のレプリカがより多くの検索リクエストに並行して応答できるため、サービスの可用性と検索のスループットが向上します。注: JCloud デプロイでは、レプリカの数は 1 に設定されます。私たちは、クラウドでのレプリケーションの有効化に取り組んでいます。
各VectorDB
タイプのパラメータは次のとおりです。
このデータベースは埋め込みに対して徹底的な検索を実行し、構成設定が制限されています。
workspace
: 必要なデータが保存されるフォルダー。
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
このデータベースは、近似最近傍検索のために HNSWLib の HNSW (Hierarchical Navigable Small World) アルゴリズムを採用しています。いくつかの構成オプションが提供されます。
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 が含まれています。
説明 | 指示 |
---|---|
DB をローカルで提供する | vectordb serve --db example:db |
DB を Jina AI Cloud にデプロイする | vectordb deploy --db example:db |
ユーザーフレンドリーなインターフェイス: vectordb
では、シンプルさが重要です。その直感的なインターフェイスは、さまざまなレベルの専門知識を持つユーザーに対応できるように設計されています。
ミニマルなデザイン: vectordb
は必要なものがすべて詰め込まれており、不必要な複雑さはありません。これにより、ローカルからサーバーおよびクラウド展開へのシームレスな移行が保証されます。
CRUD の完全なサポート:インデックス付けと検索から更新と削除に至るまで、 vectordb
CRUD 操作の全領域をカバーします。
DB as a Service: vectordb
を使用して、gRPC、HTTP、および Websocket プロトコルの力を利用します。これにより、データベースにサービスを提供し、挿入または検索操作を効率的に実行できるようになります。
スケーラビリティ:シャーディングやレプリケーションなどの堅牢なスケーラビリティ機能を含む、 vectordb
のデプロイメント機能の生のパワーを体験してください。シャーディングによりサービスの遅延を改善し、レプリケーションにより可用性とスループットを向上させます。
クラウド展開: Jina AI Cloud を使用すると、サービスをクラウドに簡単に展開できます。さらに多くの展開オプションが近日公開される予定です。
サーバーレス機能: vectordb
クラウドにサーバーレス モードで展開でき、ニーズに応じて最適なリソース使用率とデータ可用性を確保します。
複数の ANN アルゴリズム: vectordb
近似最近傍法 (ANN) アルゴリズムのさまざまな実装を提供します。現在の製品は次のとおりです。今後さらに多くの統合が予定されています。
InMemoryExactNNVectorDB (正確な NN 検索): 単純な最近傍アルゴリズムを実装します。
HNSWVectorDB (HNSW ベース): HNSWLib を使用します
Vector Database の未来は明るく、私たちは野心的な計画を持っています。現在開発中の機能の概要を以下に示します。
ANN 検索アルゴリズムの追加: 私たちの目標は、さらに幅広い ANN 検索アルゴリズムをサポートすることです。
フィルタリング機能の強化: 高度なフィルタリングをサポートするために、ANN 検索ソリューションの強化に取り組んでいます。
カスタマイズ性: 私たちは、 vectordb
高度にカスタマイズ可能にして、Python 開発者がその動作を特定のニーズに簡単に合わせられるようにすることを目指しています。
サーバーレス容量の拡張: 私たちは、クラウド内のvectordb
のサーバーレス容量の強化に努めています。現在、0 ~ 1 レプリカ間のスケーリングをサポートしていますが、私たちの目標は、これを 0 ~ N レプリカに拡張することです。
展開オプションの拡張: 私たちは、幅広いオプションを使用して、さまざまなクラウド プラットフォームにわたるvectordb
の展開を容易にすることに積極的に取り組んでいます。
vectordb
についてサポートが必要ですか?使用に興味はありますが、独自のニーズを満たすために特定の機能が必要ですか?お気軽にお問い合わせください。 Discord コミュニティに参加して、私たちや他のコミュニティ メンバーとチャットしましょう。
VectorDB プロジェクトは Jina AI によって支援されており、Apache-2.0 に基づいてライセンスされています。コミュニティからの貢献は大歓迎です。新しい機能や改善に関するアイデアがありましたら、ぜひお知らせください。私たちは、 vectordb
よりユーザーフレンドリーで効果的なものにする方法を常に模索しています。