Affine est une bibliothèque Python pour fournir une interface uniforme et structurée à diverses bases de données de vecteur de support et approximativement les bibliothèques voisines les plus proches. Il permet aux objets simples de type DataClass pour décrire les collections ainsi qu'une syntaxe de requête de haut niveau pour effectuer une recherche de vecteurs filtrés.
Pour les bases de données vectorielles, il prend actuellement en charge:
Pour le mode local, les bibliothèques de voisins les plus proches suivantes suivantes sont prises en charge:
Remarque: Ce projet est très similaire à VectordB-Oor, qui semble ne plus être maintenu.
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 )
) Une notion fondamentale d' affine est les classes Engine . Toutes ces classes sont conformes à la même API pour l'interchangeabilité (à l'exception de quelques restrictions spécifiques au moteur qui sont mentionnées ci-dessous). Il existe deux grands types de moteurs
LocalEngine : Cela fait la recherche de voisin le plus proche sur la machine à exécuter et prend en charge une variété de bibliothèques pour la recherche voisin le plus proche (celles-ci sont appelées le backend du moteur local).
Moteurs de la base de données vectoriels: Ce sont des moteurs qui se connectent à un service de base de données vectorielle, tel que QDRANT, TEAVIATE ou PINECONE.
Les bases de données vectorielles actuellement prises en charge sont:
| Base de données | Classe | Arguments du constructeur | Notes |
|---|---|---|---|
| Qdrant | affine.engine.QdrantEngine | host: str Name à utiliserport: int à utiliser | - |
| Tisser | affine.engine.WeaviateEngine | host: str Name à utiliserport: int à utiliser | - |
| Pignon | affine.engine.PineconeEngine | api_key: Union[str, None] PineCone API Key. S'il n'est pas fourni, il sera lu à partir de la variable d'environnement PineCone_API_KEY.spec: Union[ServerlessSpec, PodSpec, None] L'objet PODSpec ou ServerlessSpec. S'il n'est pas fourni, un ServerlessSpec sera créé à partir des variables d'environnement pinecone_cloud et pinecone_region. | Le moteur Pinecone a la restriction selon laquelle chaque collection doit contenir exactement un attribut vectoriel. |
La classe LocalEngine fournit une interface pour effectuer la recherche de voisin le plus proche sur la machine à exécuter, prenant en charge une variété de bibliothèques pour la recherche voisin le plus proche. Lequel est spécifié par l'argument backend au constructeur. Par exemple, pour utiliser annoy :
from affine . engine . local import LocalEngine , AnnoyBackend
db = LocalEngine ( backend = AnnoyBackend ( n_tress = 10 ))Les options et les paramètres des divers backends pris en charge sont les suivants:
| Bibliothèque | Classe | Arguments du constructeur | Notes |
|---|---|---|---|
| naïf / numpy | affine.engine.local.NumPyBackend | - | - |
| Scikit-Learn Kdtree | affine.engine.local.KDTreeBackend | Arguments de mots clés qui sont transmis directement à sklearn.neighbors.KDTree | - |
| ennuyer | affine.engine.local.AnnoyBackend | n_trees: int à utilisern_jobs: int par défaut à -1 | - |
| Fais | affine.engine.local.FAISSBackend | index_factory_str: str | - |
| Pynndescent | affine.engine.local.PyNNDescentBackend | Arguments de mots clés qui sont transmis directement à pynndescent.NNDescent | - |