Affineは、さまざまなバッキングベクトルデータベースと近似隣接ライブラリに均一で構造化されたインターフェイスを提供するためのPythonライブラリです。これにより、シンプルなDataclassのようなオブジェクトが、フィルタリングされたベクトル検索を行うための高レベルクエリ構文と一緒にコレクションを記述できるようにします。
ベクターデータベースの場合、現在サポートしています。
ローカルモードの場合、次の近似隣接ライブラリがサポートされています。
注:このプロジェクトは、VectordB-OMMに非常に似ており、維持されなくなったようです。
pip install affine-vectordb
# or `pip install "affine-vectordb[qdrant]"` for qdrant support
# `pip install "affine-vectordb[weaviate]"` for weaviate support
# `pip install "affine-vectordb[pinecone]"` for pinecone support from affine import Collection , Vector , Filter , Query
# Define a collection
class MyCollection ( Collection ):
vec : Vector [ 3 ] # declare a 3-dimensional vector
# support for additional fields for filtering
a : int
b : str
db = LocalEngine ()
# Insert vectors
db . insert ( MyCollection ( vec = [ 0.1 , 0.0 , - 0.5 ], a = 1 , b = "foo" ))
db . insert ( MyCollection ( vec = [ 1.3 , 2.1 , 3.6 ], a = 2 , b = "bar" ))
db . insert ( MyCollection ( vec = [ - 0.1 , 0.2 , 0.3 ], a = 3 , b = "foo" ))
# Query vectors
result : list [ MyCollection ] = (
db . query ( MyCollection )
. filter ( MyCollection . b == "foo" )
. similarity ([ 2.8 , 1.8 , - 4.5 ])
. limit ( 1 )
)アフィンの基本的な概念は、 Engineクラスです。このようなクラスはすべて、交換性のために同じAPIに準拠しています(以下に言及するいくつかのエンジン固有の制限を除く)。 2つの広範なエンジンがあります
LocalEngine :これにより、実行するマシンで最も近い隣の検索が行われ、バッキング最近の隣人検索のさまざまなライブラリをサポートします(これらはローカルエンジンのバックエンドと呼ばれます)。
ベクトルデータベースエンジン:これらは、QDRANT、WEAVIATE、PINECONEなどのベクターデータベースサービスに接続するエンジンです。
現在サポートされているベクトルデータベースは次のとおりです。
| データベース | クラス | コンストラクターの引数 | メモ |
|---|---|---|---|
| qdrant | affine.engine.QdrantEngine | host: strホスト名port: intポート | - |
| 織ります | affine.engine.WeaviateEngine | host: strホスト名port: intポート | - |
| 松ぼっくり | affine.engine.PineconeEngine | api_key: Union[str, None] Pinecone APIキー。提供されていない場合は、環境変数pinecone_api_keyから読み取られます。spec: Union[ServerlessSpec, PodSpec, None] PodSpecまたはServerLessSpecオブジェクト。提供されていない場合、環境変数Pinecone_CloudとPinecone_RegionからServerlessSpecが作成されます。 | Pineconeエンジンには、すべてのコレクションに正確に1つのベクトル属性が含まれている必要があるという制限があります。 |
LocalEngineクラスは、実行するマシンで最近隣の検索を行うためのインターフェイスを提供し、バッキング最近の隣人の研究のためにさまざまなライブラリをサポートします。コンストラクターへのbackend引数によって指定されているのはどれですか。たとえば、 annoyを使用するには:
from affine . engine . local import LocalEngine , AnnoyBackend
db = LocalEngine ( backend = AnnoyBackend ( n_tress = 10 ))さまざまなサポートされているバックエンドのオプションと設定は次のとおりです。
| 図書館 | クラス | コンストラクターの引数 | メモ |
|---|---|---|---|
| ナイーブ/numpy | affine.engine.local.NumPyBackend | - | - |
| Scikit-LearnKdtree | affine.engine.local.KDTreeBackend | sklearn.neighbors.KDTreeに直接渡されるキーワード引数 | - |
| いらいらさせる | affine.engine.local.AnnoyBackend | n_trees: int使用するツリーの数n_jobs: intデフォルトです-1 | - |
| ファイス | affine.engine.local.FAISSBackend | index_factory_str: str | - |
| Pynndescent | affine.engine.local.PyNNDescentBackend | pynndescent.NNDescentに直接渡されるキーワード引数 | - |