vectordb
ist eine pythonische Vektordatenbank, die eine umfassende Suite von CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) und robuste Skalierbarkeitsoptionen, einschließlich Sharding und Replikation, bietet. Es ist problemlos in einer Vielzahl von Umgebungen einsetzbar, von lokal bis vor Ort und in der Cloud. vectordb
liefert genau das, was Sie brauchen – nicht mehr und nicht weniger. Es ist ein Beweis für effektives Pythonic-Design ohne Over-Engineering und macht es zu einer schlanken und dennoch leistungsstarken Lösung für alle Ihre Anforderungen.
vectordb
nutzt die leistungsstarken Abruffähigkeiten von DocArray und die Skalierbarkeit, Zuverlässigkeit und Bereitstellungsfunktionen von Jina. Hier liegt der Zauber: DocArray fungiert als Motor für die Vektorsuchlogik, während Jina eine effiziente und skalierbare Indexbereitstellung garantiert. Diese Synergie gipfelt in einer robusten und dennoch benutzerfreundlichen Vektordatenbank-Erfahrung – das ist vectordb
für Sie.
pip installiere vectordb
vectordb
lokalBeginnen Sie mit der Definition eines Dokumentschemas mit der DocArray-Datenklassensyntax:
from docarray import BaseDocfrom docarray.typing import NdArrayclass ToyDoc(BaseDoc): text: str = '' Einbettung: NdArray[128]
Entscheiden Sie sich für eine vorgefertigte Datenbank (wie InMemoryExactNNVectorDB
oder HNSWVectorDB
) und wenden Sie das Schema an:
from docarray import DocListimport numpy as npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# Geben Sie Ihren Arbeitsbereichspfad andb = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# Indizieren Sie eine Liste von Dokumenten mit zufälligen Einbettungendoc_list = [ToyDoc(text=f'toy doc {ich}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# Führen Sie eine Suchabfrage durchquery = ToyDoc(text='query', embedding=np .random.rand(128))results = db.search(inputs=DocList[ToyDoc]([query]), limit=10)# Drucken Sie die Übereinstimmungen für m in results[0].matches aus: print(m)
Da wir eine einzelne Abfrage ausgegeben haben, enthalten results
nur ein Element. Die Suchergebnisse für den nächsten Nachbarn werden bequem im .matches
Attribut gespeichert.
vectordb
als Dienst vectordb
ist so konzipiert, dass es einfach als Dienst bereitgestellt werden kann und die Kommunikationsprotokolle gRPC
, HTTP
und Websocket
unterstützt.
Auf der Serverseite würden Sie den Dienst wie folgt starten:
mit db.serve(protocol='grpc', port=12345, Replicas=1, Shards=1) als Dienst: service.block()
Dieser Befehl startet vectordb
als Dienst auf Port 12345
und verwendet das gRPC
Protokoll mit 1
Replikat und 1
Shard.
Auf der Clientseite können Sie mit den folgenden Befehlen auf den Dienst zugreifen:
from vectordb import Client# Instanziiert einen mit dem Server verbundenen Client. Ersetzen Sie in der Praxis 0.0.0.0 durch die Server-IP-Adresse.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# Führen Sie eine Suchabfrage durchresults = client.search(inputs=DocList[ToyDoc] ([Abfrage]), limit=10)
Auf diese Weise können Sie eine Suchabfrage durchführen und die Ergebnisse direkt vom Remote- vectordb
Dienst erhalten.
vectordb
in der Jina AI Cloud Sie können Ihre vectordb
-Instanz nahtlos in der Jina AI Cloud bereitstellen, was den Zugriff auf Ihre Datenbank von jedem Ort aus gewährleistet.
Beginnen Sie mit der Einbettung Ihrer Datenbankinstanz oder -klasse in eine Python-Datei:
# example.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # Beachten Sie, dass „db“ die Instanz ist, die wir bedienen möchten, wenn __name__ == '__main__':# WICHTIG: Stellen Sie sicher, dass um diesen Teil des Codes mit __main__ guardwith db.serve() as zu schützen service:service.block()
Führen Sie als Nächstes die folgenden Schritte aus, um Ihre Instanz bereitzustellen:
Wenn Sie es noch nicht getan haben, registrieren Sie sich für ein Jina AI Cloud-Konto.
Verwenden Sie die jc
-Befehlszeile, um sich bei Ihrem Jina AI Cloud-Konto anzumelden:
jc-Anmeldung
Stellen Sie Ihre Instanz bereit:
vectordb deploy --db Beispiel:db
Verwenden Sie nach der Bereitstellung den vectordb
-Client, um auf den zugewiesenen Endpunkt zuzugreifen:
Ersetzen Sie aus vectordb import Client# die ID durch die ID Ihrer bereitgestellten Datenbank, wie im Screenshot oben gezeigt.c = Client(address='grpcs://ID.wolf.jina.ai')
Anschließend können Sie Ihre bereitgestellten DBs mit jc
-Befehl auflisten, anhalten, fortsetzen oder löschen:
jcloud list ID
jcloud pause ID
oder jcloud resume ID
jcloud remove ID
Vektordatenbanken dienen als hochentwickelte Repositorys für Einbettungen und erfassen die Essenz semantischer Ähnlichkeit zwischen unterschiedlichen Objekten. Diese Datenbanken erleichtern die Suche nach Ähnlichkeiten in einer Vielzahl multimodaler Datentypen und ebnen den Weg für eine neue Ära der Informationsbeschaffung. Durch die Bereitstellung eines kontextbezogenen Verständnisses und die Anreicherung der Generierungsergebnisse verbessern Vektordatenbanken die Leistung und den Nutzen von Sprachlernmodellen (LLM) erheblich. Dies unterstreicht ihre zentrale Rolle bei der Entwicklung von Anwendungen für Datenwissenschaft und maschinelles Lernen.
Sowohl die lokale Bibliotheksnutzung als auch die Client-Server-Interaktionen in vectordb
nutzen dieselbe API. Dies bietet index
, search
, update
und delete
:
index
: Akzeptiert eine DocList
zum Indexieren.
search
: Nimmt eine DocList
mit Batch-Abfragen oder ein einzelnes BaseDoc
als einzelne Abfrage. Es werden entweder einzelne oder mehrere Ergebnisse zurückgegeben, jedes mit nach relevance
sortierten matches
und scores
.
delete
: Akzeptiert eine DocList
von Dokumenten, die aus dem Index entfernt werden sollen. Es ist nur das id
Attribut erforderlich. Stellen Sie daher sicher, dass Sie die indexed
IDs
nachverfolgen, wenn Sie Dokumente löschen müssen.
update
: Akzeptiert eine DocList
von Dokumenten, die im Index aktualisiert werden sollen. Der update
ersetzt das indexed
Dokument mit demselben Index durch die Attribute und Nutzdaten aus den Eingabedokumenten.
Sie können vectordb
bereitstellen und von einem Client aus mit den folgenden Parametern darauf zugreifen:
Protokoll: Das Bereitstellungsprotokoll. Es kann sich um gRPC
, HTTP
, websocket
oder eine Kombination davon handeln, bereitgestellt als Liste. Der Standardwert ist gRPC
.
port: Der Dienstzugriffsport. Kann eine Liste von Ports für jedes bereitgestellte Protokoll sein. Der Standardwert ist 8081.
Arbeitsbereich: Der Pfad, in dem die VectorDB die erforderlichen Daten speichert. Der Standardwert ist „.“ (aktuelles Verzeichnis).
Sie können zwei Skalierungsparameter festlegen, wenn Sie Ihre Vector-Datenbanken mit vectordb
bereitstellen oder bereitstellen:
Shards: Die Anzahl der Daten-Shards. Dies verbessert die Latenz, da vectordb
sicherstellt, dass Dokumente nur in einem der Shards indiziert werden. Suchanfragen werden an alle Shards gesendet und die Ergebnisse werden zusammengeführt.
Replikate: Die Anzahl der DB-Replikate. vectordb
verwendet den RAFT-Algorithmus, um den Index zwischen Replikaten jedes Shards zu synchronisieren. Dies erhöht die Dienstverfügbarkeit und den Suchdurchsatz, da mehrere Replikate parallel auf mehr Suchanfragen reagieren können und gleichzeitig CRUD-Vorgänge ermöglichen. Hinweis: In JCloud-Bereitstellungen ist die Anzahl der Replikate auf 1 festgelegt. Wir arbeiten daran, die Replikation in der Cloud zu ermöglichen.
Hier sind die Parameter für jeden VectorDB
-Typ:
Diese Datenbank führt eine umfassende Suche nach Einbettungen durch und verfügt über begrenzte Konfigurationseinstellungen:
workspace
: Der Ordner, in dem die erforderlichen Daten gespeichert werden.
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
Diese Datenbank verwendet den HNSW-Algorithmus (Hierarchical Navigable Small World) von HNSWLib für die Suche nach ungefähren nächstgelegenen Nachbarn. Es bietet mehrere Konfigurationsoptionen:
workspace
: Gibt das Verzeichnis an, in dem die erforderlichen Daten gespeichert und beibehalten werden.
Darüber hinaus bietet HNSWVectorDB eine Reihe von Konfigurationen, mit denen Sie die Leistung und Genauigkeit des Suchalgorithmus für den nächsten Nachbarn optimieren können. Detaillierte Beschreibungen dieser Konfigurationen finden Sie in der HNSWLib README:
space
: Gibt die für den Raum verwendete Ähnlichkeitsmetrik an (Optionen sind „l2“, „ip“ oder „cosine“). Der Standardwert ist „l2“.
max_elements
: Legt die anfängliche Kapazität des Index fest, die dynamisch erhöht werden kann. Der Standardwert ist 1024.
ef_construction
: Dieser Parameter steuert den Kompromiss zwischen Geschwindigkeit und Genauigkeit während der Indexerstellung. Der Standardwert ist 200.
ef
: Dieser Parameter steuert den Kompromiss zwischen Abfragezeit und Genauigkeit. Der Standardwert ist 10.
M
: Dieser Parameter definiert die maximale Anzahl ausgehender Verbindungen im Diagramm. Der Standardwert ist 16.
allow_replace_deleted
: Wenn auf True
gesetzt, ermöglicht dies das Ersetzen gelöschter Elemente durch neu hinzugefügte. Der Standardwert ist False
.
num_threads
: Dies legt die Standardanzahl der Threads fest, die während index
und search
verwendet werden sollen. Der Standardwert ist 1.
vectordb
enthält eine einfache CLI zum Bereitstellen und Bereitstellen Ihrer Datenbank:
Beschreibung | Befehl |
---|---|
Stellen Sie Ihre Datenbank lokal bereit | vectordb serve --db example:db |
Stellen Sie Ihre Datenbank in der Jina AI Cloud bereit | vectordb deploy --db example:db |
Benutzerfreundliche Oberfläche: Bei vectordb
ist Einfachheit der Schlüssel. Die intuitive Benutzeroberfläche ist so konzipiert, dass sie Benutzern mit unterschiedlichem Fachwissen gerecht wird.
Minimalistisches Design: vectordb
bietet alles Wesentliche ohne unnötige Komplexität. Es gewährleistet einen nahtlosen Übergang von der lokalen zur Server- und Cloud-Bereitstellung.
Vollständige CRUD-Unterstützung: Von der Indizierung und Suche bis hin zum Aktualisieren und Löschen deckt vectordb
das gesamte Spektrum an CRUD-Operationen ab.
DB as a Service: Nutzen Sie die Leistungsfähigkeit der Protokolle gRPC, HTTP und Websocket mit vectordb
. Es ermöglicht Ihnen, Ihre Datenbanken zu bedienen und Einfüge- oder Suchvorgänge effizient durchzuführen.
Skalierbarkeit: Erleben Sie die pure Leistungsfähigkeit der Bereitstellungsfunktionen von vectordb
, einschließlich robuster Skalierbarkeitsfunktionen wie Sharding und Replikation. Verbessern Sie die Latenz Ihrer Dienste durch Sharding, während die Replikation die Verfügbarkeit und den Durchsatz erhöht.
Cloud-Bereitstellung: Die Bereitstellung Ihres Dienstes in der Cloud ist mit Jina AI Cloud ein Kinderspiel. Weitere Bereitstellungsoptionen folgen in Kürze!
Serverlose Fähigkeit: vectordb
kann in einem serverlosen Modus in der Cloud bereitgestellt werden, um eine optimale Ressourcennutzung und Datenverfügbarkeit entsprechend Ihren Anforderungen sicherzustellen.
Mehrere ANN-Algorithmen: vectordb
bietet verschiedene Implementierungen von Approximate Nearest Neighbors (ANN)-Algorithmen. Hier sind die aktuellen Angebote, weitere Integrationen sind in Planung:
InMemoryExactNNVectorDB (Exakte NN-Suche): Implementiert den einfachen Algorithmus für den nächsten Nachbarn.
HNSWVectorDB (basierend auf HNSW): Verwendet HNSWLib
Die Zukunft der Vector Database sieht rosig aus und wir haben ehrgeizige Pläne! Hier ist ein kleiner Einblick in die Funktionen, die wir derzeit entwickeln:
Weitere ANN-Suchalgorithmen: Unser Ziel ist es, ein noch breiteres Spektrum an ANN-Suchalgorithmen zu unterstützen.
Erweiterte Filterfunktionen: Wir arbeiten an der Verbesserung unserer ANN-Suchlösungen, um erweiterte Filterfunktionen zu unterstützen.
Anpassbarkeit: Unser Ziel ist es, vectordb
hochgradig anpassbar zu machen, sodass Python-Entwickler das Verhalten problemlos an ihre spezifischen Bedürfnisse anpassen können.
Erweiterung der serverlosen Kapazität: Wir streben danach, die serverlose Kapazität von vectordb
in der Cloud zu verbessern. Während wir derzeit die Skalierung zwischen 0 und 1 Replikat unterstützen, ist es unser Ziel, dies auf 0 bis N Replikate zu erweitern.
Erweiterte Bereitstellungsoptionen: Wir arbeiten aktiv daran, die Bereitstellung von vectordb
auf verschiedenen Cloud-Plattformen mit einer breiten Palette von Optionen zu erleichtern.
Benötigen Sie Hilfe bei vectordb
? Sie möchten es verwenden, benötigen aber bestimmte Funktionen, um Ihren individuellen Anforderungen gerecht zu werden? Zögern Sie nicht, uns zu kontaktieren. Treten Sie unserer Discord-Community bei, um mit uns und anderen Community-Mitgliedern zu chatten.
Das VectorDB-Projekt wird von Jina AI unterstützt und ist unter Apache-2.0 lizenziert. Beiträge aus der Community werden sehr geschätzt! Wenn Sie eine Idee für eine neue Funktion oder eine Verbesserung haben, würden wir uns freuen, von Ihnen zu hören. Wir sind stets auf der Suche nach Möglichkeiten, vectordb
benutzerfreundlicher und effektiver zu gestalten.