Affine adalah perpustakaan Python untuk menyediakan antarmuka yang seragam dan terstruktur ke berbagai database vektor dukungan dan mendekati perpustakaan tetangga terdekat. Ini memungkinkan objek seperti dataclass sederhana untuk menggambarkan koleksi bersama dengan sintaks kueri tingkat tinggi untuk melakukan pencarian vektor yang difilter.
Untuk database vektor, saat ini mendukung:
Untuk mode lokal, perkiraan perpustakaan tetangga terdekat berikut ini didukung:
CATATAN: Proyek ini sangat mirip dengan VectorBB-As, yang tampaknya tidak lagi dipertahankan.
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 )
) Gagasan mendasar tentang affine adalah kelas Engine . Semua kelas tersebut sesuai dengan API yang sama untuk interchangeability (dengan pengecualian beberapa pembatasan spesifik mesin yang disebutkan di bawah). Ada dua jenis mesin yang luas
LocalEngine : Ini memang pencarian tetangga terdekat di mesin pelaksanaan, dan mendukung berbagai perpustakaan untuk mendukung Neighborsearch terdekat (ini disebut backend mesin lokal).
Mesin Basis Data Vektor: Ini adalah mesin yang terhubung ke layanan basis data vektor, seperti Qdrant, Weaviate, atau Pinecone.
Database vektor yang saat ini didukung adalah:
| Database | Kelas | Argumen konstruktor | Catatan |
|---|---|---|---|
| Qdrant | affine.engine.QdrantEngine | host: str HostName untuk digunakanport: int port untuk digunakan | - |
| Weaviate | affine.engine.WeaviateEngine | host: str HostName untuk digunakanport: int port untuk digunakan | - |
| Pinecone | affine.engine.PineconeEngine | api_key: Union[str, None] Pinecone API Key. Jika tidak disediakan, itu akan dibaca dari variabel lingkungan pinecone_api_key.spec: Union[ServerlessSpec, PodSpec, None] objek podspec atau serverlessspec. Jika tidak disediakan, ServerlessSpec akan dibuat dari variabel lingkungan Pinecone_Cloud dan Pinecone_Region. | Mesin Pinecone memiliki batasan bahwa setiap koleksi harus berisi tepat satu atribut vektor. |
Kelas LocalEngine menyediakan antarmuka untuk melakukan pencarian tetangga terdekat di mesin yang mengeksekusi, mendukung berbagai perpustakaan untuk dukungan Neighborsearch terdekat. Mana yang ditentukan oleh argumen backend untuk konstruktor. Misalnya, menggunakan annoy :
from affine . engine . local import LocalEngine , AnnoyBackend
db = LocalEngine ( backend = AnnoyBackend ( n_tress = 10 ))Opsi dan pengaturan untuk berbagai backend yang didukung adalah sebagai berikut:
| Perpustakaan | Kelas | Argumen konstruktor | Catatan |
|---|---|---|---|
| Naif/numpy | affine.engine.local.NumPyBackend | - | - |
| Scikit-learn kdtree | affine.engine.local.KDTreeBackend | argumen kata kunci yang diteruskan langsung ke sklearn.neighbors.KDTree | - |
| mengganggu | affine.engine.local.AnnoyBackend | n_trees: int yang akan digunakann_jobs: int default ke -1 | - |
| Faiss | affine.engine.local.FAISSBackend | index_factory_str: str | - |
| Pynndescent | affine.engine.local.PyNNDescentBackend | argumen kata kunci yang diteruskan langsung ke pynndescent.NNDescent | - |