Affine ist eine Python -Bibliothek zur Bereitstellung einer einheitlichen und strukturierten Schnittstelle für verschiedene Backing -Vektor -Datenbanken und ungefähre Nachbarbibliotheken. Es ermöglicht einfache, datenklassenähnliche Objekte, Kollektionen zusammen mit einer Abfragesyntax auf hoher Ebene für filtrierte Vektorsuche zu beschreiben.
Für Vector -Datenbanken unterstützt sie derzeit:
Für den lokalen Modus werden die folgenden ungefähren Bibliotheken der nächsten Nachbarn unterstützt:
HINWEIS: Dieses Projekt ist Vectordb-orm sehr ähnlich, das nicht mehr aufrechterhalten wird.
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 )
) Ein grundlegender Begriff von affinem Begriff sind Engine . Alle dieser Klassen entsprechen derselben API für die Austauschkörper (mit Ausnahme einiger motorspezifischer Einschränkungen, die unten erwähnt werden). Es gibt zwei breite Arten von Motoren
LocalEngine : Dies führt zu der nächsten Nachbarn -Suche auf der ausführenden Maschine und unterstützt eine Vielzahl von Bibliotheken für die nächstgelegene Nachbarforschung (diese werden als Backend der lokalen Engine bezeichnet).
Vektor -Datenbankmotoren: Dies sind Motoren, die eine Verbindung zu einem Vektor -Datenbankdienst herstellen, wie QDRANT, WEAVIATE oder TINECONE.
Die derzeit unterstützten Vektordatenbanken sind:
| Datenbank | Klasse | Konstruktorargumente | Notizen |
|---|---|---|---|
| Qdrant | affine.engine.QdrantEngine | host: str -Hostname, um sie zu verwendenport: int Port zur Verwendung | - - |
| Waviate | affine.engine.WeaviateEngine | host: str -Hostname, um sie zu verwendenport: int Port zur Verwendung | - - |
| Tannenzapfen | affine.engine.PineconeEngine | api_key: Union[str, None] Pinecone API -Schlüssel. Wenn dies nicht zur Verfügung steht, wird es aus der Umgebungsvariablen Pinecone_API_Key gelesen.spec: Union[ServerlessSpec, PodSpec, None] Das Objekt Podspec oder Serverlessspec. Wenn nicht bereitgestellt, wird ein ServerlessSpec aus den Umgebungsvariablen PineCone_Cloud und PineCone_region erstellt. | Der Tinecone -Motor hat die Einschränkung, dass jede Sammlung genau ein Vektorattribut enthalten muss. |
Die LocalEngine -Klasse bietet eine Schnittstelle für die Suche nach Nachbarn auf der ausführenden Maschine und unterstützt eine Vielzahl von Bibliotheken für die nächstgelegene Nachbarn. Welches durch das backend -Argument für den Konstruktor angegeben wird. Zum Beispiel, um annoy zu verwenden:
from affine . engine . local import LocalEngine , AnnoyBackend
db = LocalEngine ( backend = AnnoyBackend ( n_tress = 10 ))Die Optionen und Einstellungen für die verschiedenen unterstützten Backends sind wie folgt:
| Bibliothek | Klasse | Konstruktorargumente | Notizen |
|---|---|---|---|
| naiv/numpy | affine.engine.local.NumPyBackend | - - | - - |
| scikit-larn kdtree | affine.engine.local.KDTreeBackend | Keyword -Argumente, die direkt an sklearn.neighbors.KDTree übergeben werden | - - |
| belästigen | affine.engine.local.AnnoyBackend | n_trees: int Anzahl von Bäumen zu verwendenn_jobs: int standards zu -1 | - - |
| Faiss | affine.engine.local.FAISSBackend | index_factory_str: str | - - |
| Pynndescent | affine.engine.local.PyNNDescentBackend | Schlüsselwortargumente, die direkt an pynndescent.NNDescent übergeben werden | - - |