vectordb
est une base de données vectorielle Pythonic qui offre une suite complète d'opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) et des options d'évolutivité robustes, y compris le partitionnement et la réplication. Il est facilement déployable dans une variété d'environnements, du local au sur site et au cloud. vectordb
offre exactement ce dont vous avez besoin – ni plus, ni moins. C'est un témoignage d'une conception Pythonique efficace sans ingénierie excessive, ce qui en fait une solution simple mais puissante pour tous vos besoins.
vectordb
capitalise sur les puissantes prouesses de récupération de DocArray et sur l’évolutivité, la fiabilité et les capacités de service de Jina. Voici la magie : DocArray sert de moteur à la logique de recherche vectorielle, tandis que Jina garantit un service d'index efficace et évolutif. Cette synergie aboutit à une expérience de base de données vectorielles robuste mais conviviale - c'est vectordb
pour vous.
pip installer vectordb
vectordb
localementCommencez par définir un schéma de document avec la syntaxe de classe de données DocArray :
depuis docarray importer BaseDocfrom docarray.typing importer NdArrayclass ToyDoc (BaseDoc) : texte : str = '' intégration : NdArray[128]
Optez pour une base de données prédéfinie (comme InMemoryExactNNVectorDB
ou HNSWVectorDB
) et appliquez le schéma :
from docarray import DocListimport numpy as npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# Spécifiez votre espace de travail pathdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# Indexez une liste de documents avec des intégrations aléatoiresdoc_list = [ToyDoc(text=f'toy doc {je}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# Effectuer une requête de recherchequery = ToyDoc(text='query', embedding=np .random.rand(128))results = db.search(inputs=DocList[ToyDoc]([query]), limit=10)# Imprime le formulaire de correspondances dans les résultats[0].matches : print(m)
Puisque nous avons émis une seule requête, results
ne contiennent qu’un seul élément. Les résultats de la recherche du voisin le plus proche sont commodément stockés dans l’attribut .matches
.
vectordb
en tant que service vectordb
est conçu pour être facilement servi en tant que service, prenant en charge les protocoles de communication gRPC
, HTTP
et Websocket
.
Côté serveur, vous démarreriez le service comme suit :
avec db.serve(protocol='grpc', port=12345, replicas=1, shards=1) comme service : service.block()
Cette commande démarre vectordb
en tant que service sur le port 12345
, en utilisant le protocole gRPC
avec 1
réplique et 1
fragment.
Côté client, vous pouvez accéder au service avec les commandes suivantes :
from vectordb import Client# Instancier un client connecté au serveur. En pratique, remplacez 0.0.0.0 par l'adresse IP du serveur.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# Effectuez une requête de rechercheresults = client.search(inputs=DocList[ToyDoc] ([requête]), limite=10)
Cela vous permet d'effectuer une requête de recherche, en recevant les résultats directement du service vectordb
distant.
vectordb
sur Jina AI Cloud Vous pouvez déployer en toute transparence votre instance vectordb
sur Jina AI Cloud, ce qui garantit l'accès à votre base de données depuis n'importe quel endroit.
Commencez par intégrer votre instance ou classe de base de données dans un fichier Python :
# exemple.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./vectordb') # remarquez comment `db` est l'instance que nous voulons servirif __name__ == '__main__':# IMPORTANT : assurez-vous pour protéger cette partie du code en utilisant __main__ guardwith db.serve() comme service:service.block()
Ensuite, suivez ces étapes pour déployer votre instance :
Si vous ne l'avez pas déjà fait, créez un compte Jina AI Cloud.
Utilisez la ligne de commande jc
pour vous connecter à votre compte Jina AI Cloud :
connexion jc
Déployez votre instance :
vectordb déployer --db exemple : db
Après le déploiement, utilisez le client vectordb
pour accéder au point de terminaison attribué :
à partir de vectordb import Client#, remplacez l'ID par l'ID de votre base de données déployée, comme indiqué dans la capture d'écran ci-dessusc = Client(address='grpcs://ID.wolf.jina.ai')
Vous pouvez ensuite lister, mettre en pause, reprendre ou supprimer vos bases de données déployées avec la commande jc
:
jcloud list ID
jcloud pause ID
ou jcloud resume ID
jcloud remove ID
Les bases de données vectorielles servent de référentiels sophistiqués pour les intégrations, capturant l'essence de la similarité sémantique entre des objets disparates. Ces bases de données facilitent les recherches de similarité sur une myriade de types de données multimodales, ouvrant ainsi la voie à une nouvelle ère de recherche d'informations. En fournissant une compréhension contextuelle et en enrichissant les résultats de génération, les bases de données vectorielles améliorent considérablement les performances et l'utilité des modèles d'apprentissage des langues (LLM). Cela souligne leur rôle central dans l’évolution des applications de science des données et d’apprentissage automatique.
L'utilisation de la bibliothèque locale et les interactions client-serveur dans vectordb
partagent la même API. Cela fournit des fonctionnalités index
, search
, update
et delete
:
index
: Accepte une DocList
à indexer.
search
: prend une DocList
de requêtes par lots ou un seul BaseDoc
en tant que requête unique. Il renvoie un ou plusieurs résultats, chacun avec des attributs matches
et scores
triés par relevance
.
delete
: Accepte une DocList
de documents à supprimer de l'index. Seul l'attribut id
est nécessaire, alors assurez-vous de suivre les IDs
indexed
si vous devez supprimer des documents.
update
: Accepte une DocList
de documents à mettre à jour dans l'index. L'opération update
remplacera le document indexed
par le même index avec les attributs et la charge utile des documents d'entrée.
Vous pouvez servir vectordb
et y accéder depuis un client avec les paramètres suivants :
protocol : Le protocole de service. Il peut s'agir de gRPC
, HTTP
, websocket
ou d'une combinaison de ceux-ci, fournis sous forme de liste. La valeur par défaut est gRPC
.
port : port d'accès au service. Peut être une liste de ports pour chaque protocole fourni. La valeur par défaut est 8081.
espace de travail : chemin où VectorDB conserve les données requises. La valeur par défaut est '.' (répertoire actuel).
Vous pouvez définir deux paramètres de mise à l'échelle lors du service ou du déploiement de vos bases de données vectorielles avec vectordb
:
Shards : nombre de fragments de données. Cela améliore la latence, car vectordb
garantit que les documents sont indexés dans une seule des partitions. Les demandes de recherche sont envoyées à toutes les partitions et les résultats sont fusionnés.
Réplicas : le nombre de réplicas de base de données. vectordb
utilise l'algorithme RAFT pour synchroniser l'index entre les répliques de chaque fragment. Cela augmente la disponibilité du service et le débit de recherche, car plusieurs réplicas peuvent répondre en parallèle à davantage de demandes de recherche tout en autorisant les opérations CRUD. Remarque : dans les déploiements JCloud, le nombre de réplicas est défini sur 1. Nous travaillons sur l'activation de la réplication dans le cloud.
Voici les paramètres pour chaque type VectorDB
:
Cette base de données effectue une recherche exhaustive sur les intégrations et dispose de paramètres de configuration limités :
workspace
: le dossier dans lequel les données requises sont conservées.
InMemoryExactNNVectorDB[MyDoc](workspace='./vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./vectordb')
Cette base de données utilise l'algorithme HNSW (Hierarchical Navigable Small World) de HNSWLib pour la recherche du voisin le plus proche. Il propose plusieurs options de configuration :
workspace
: Spécifie le répertoire dans lequel les données requises sont stockées et conservées.
De plus, HNSWVectorDB propose un ensemble de configurations qui permettent d'ajuster les performances et la précision de l'algorithme de recherche du voisin le plus proche. Des descriptions détaillées de ces configurations peuvent être trouvées dans le fichier README de HNSWLib :
space
: Spécifie la métrique de similarité utilisée pour l'espace (les options sont "l2", "ip" ou "cosine"). La valeur par défaut est "l2".
max_elements
: Définit la capacité initiale de l'index, qui peut être augmentée dynamiquement. La valeur par défaut est 1024.
ef_construction
: Ce paramètre contrôle le compromis vitesse/précision lors de la construction de l'index. La valeur par défaut est 200.
ef
: ce paramètre contrôle le compromis temps de requête/précision. La valeur par défaut est 10.
M
: Ce paramètre définit le nombre maximum de connexions sortantes dans le graphique. La valeur par défaut est 16.
allow_replace_deleted
: Si défini sur True
, cela permet le remplacement des éléments supprimés par ceux nouvellement ajoutés. La valeur par défaut est False
.
num_threads
: Ceci définit le nombre par défaut de threads à utiliser lors des opérations index
et search
. La valeur par défaut est 1.
vectordb
inclut une CLI simple pour servir et déployer votre base de données :
Description | Commande |
---|---|
Servez votre base de données localement | vectordb serve --db example:db |
Déployez votre base de données sur Jina AI Cloud | vectordb deploy --db example:db |
Interface conviviale : avec vectordb
, la simplicité est la clé. Son interface intuitive est conçue pour s'adapter aux utilisateurs de différents niveaux d'expertise.
Conception minimaliste : vectordb
contient tous les éléments essentiels, sans complexité inutile. Il garantit une transition transparente du déploiement local au serveur et au cloud.
Prise en charge complète de CRUD : de l'indexation et de la recherche à la mise à jour et à la suppression, vectordb
couvre tout le spectre des opérations CRUD.
DB as a Service : exploitez la puissance des protocoles gRPC, HTTP et Websocket avec vectordb
. Il vous permet de servir vos bases de données et de mener efficacement des opérations d'insertion ou de recherche.
Évolutivité : découvrez la puissance brute des capacités de déploiement de vectordb
, y compris des fonctionnalités d'évolutivité robustes telles que le partitionnement et la réplication. Améliorez la latence de vos services grâce au partitionnement, tandis que la réplication améliore la disponibilité et le débit.
Déploiement dans le cloud : déployer votre service dans le cloud est un jeu d'enfant avec Jina AI Cloud. D'autres options de déploiement seront bientôt disponibles !
Capacité sans serveur : vectordb
peut être déployé en mode sans serveur dans le cloud, garantissant une utilisation optimale des ressources et une disponibilité des données selon vos besoins.
Algorithmes ANN multiples : vectordb
propose diverses implémentations d’algorithmes ANN (Approximativement Nearest Neighbours). Voici les offres actuelles, avec d’autres intégrations à l’horizon :
InMemoryExactNNVectorDB (Exact NN Search) : implémente l'algorithme simple du voisin le plus proche.
HNSWVectorDB (basé sur HNSW) : utilise HNSWLib
L’avenir de Vector Database s’annonce prometteur et nous avons des projets ambitieux ! Voici un aperçu des fonctionnalités que nous développons actuellement :
Plus d'algorithmes de recherche ANN : notre objectif est de prendre en charge une gamme encore plus large d'algorithmes de recherche ANN.
Capacités de filtrage améliorées : nous travaillons à l'amélioration de nos solutions de recherche ANN pour prendre en charge le filtrage avancé.
Personnalisation : notre objectif est de rendre vectordb
hautement personnalisable, permettant aux développeurs Python d'adapter facilement son comportement à leurs besoins spécifiques.
Extension de la capacité sans serveur : nous nous efforçons d'améliorer la capacité sans serveur de vectordb
dans le cloud. Bien que nous prenions actuellement en charge la mise à l'échelle entre 0 et 1 réplica, notre objectif est d'étendre cela à 0 à N réplicas.
Options de déploiement étendues : nous travaillons activement à faciliter le déploiement de vectordb
sur diverses plates-formes cloud, avec un large éventail d'options.
Besoin d'aide avec vectordb
? Vous souhaitez l’utiliser mais avez besoin de certaines fonctionnalités pour répondre à vos besoins uniques ? N'hésitez pas à nous contacter. Rejoignez notre communauté Discord pour discuter avec nous et d'autres membres de la communauté.
Le projet VectorDB est soutenu par Jina AI et sous licence Apache-2.0. Les contributions de la communauté sont grandement appréciées ! Si vous avez une idée pour une nouvelle fonctionnalité ou une amélioration, nous serions ravis de vous entendre. Nous recherchons toujours des moyens de rendre vectordb
plus convivial et plus efficace.