Chargement efficace des données dans Milvus avec VectorETL
Dans ce tutoriel, nous verrons comment charger efficacement des données dans Milvus à l'aide de VectorETL, un cadre ETL léger conçu pour les bases de données vectorielles. VectorETL simplifie le processus d'extraction des données à partir de diverses sources, leur transformation en encastrements vectoriels à l'aide de modèles d'IA et leur stockage dans Milvus pour une récupération rapide et évolutive. À la fin de ce tutoriel, vous disposerez d'un pipeline ETL fonctionnel qui vous permettra d'intégrer et de gérer facilement des systèmes de recherche vectorielle. Plongeons dans l'aventure !
Préparation
Dépendance et environnement
$ pip install --upgrade vector-etl pymilvus
Si vous utilisez Google Colab, pour activer les dépendances qui viennent d'être installées, vous devrez peut-être redémarrer le runtime (cliquez sur le menu "Runtime" en haut de l'écran, et sélectionnez "Restart session" dans le menu déroulant).
VectorETL supporte plusieurs sources de données, y compris Amazon S3, Google Cloud Storage, Local File, etc. Vous pouvez consulter la liste complète des sources prises en charge ici. Dans ce tutoriel, nous nous concentrerons sur Amazon S3 comme exemple de source de données.
Nous chargerons des documents à partir d'Amazon S3. Par conséquent, vous devez préparer AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY en tant que variables d'environnement pour accéder de manière sécurisée à votre panier S3. En outre, nous utiliserons le modèle d'intégration text-embedding-ada-002 d'OpenAI pour générer des intégrations pour les données. Vous devez également préparer la clé api OPENAI_API_KEY comme variable d'environnement.
import os
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
os.environ["AWS_ACCESS_KEY_ID"] = "your-aws-access-key-id"
os.environ["AWS_SECRET_ACCESS_KEY"] = "your-aws-secret-access-key"
Flux de travail
Définition de la source de données (Amazon S3)
Dans ce cas, nous extrayons des documents à partir d'un bac Amazon S3. VectorETL nous permet de spécifier le nom du panier, le chemin d'accès aux fichiers et le type de données avec lesquelles nous travaillons.
source = {
"source_data_type": "Amazon S3",
"bucket_name": "my-bucket",
"key": "path/to/files/",
"file_type": ".csv",
"aws_access_key_id": os.environ["AWS_ACCESS_KEY_ID"],
"aws_secret_access_key": os.environ["AWS_SECRET_ACCESS_KEY"],
}
Configuration du modèle d'intégration (OpenAI)
Une fois notre source de données configurée, nous devons définir le modèle d'intégration qui transformera nos données textuelles en intégrations vectorielles. Dans cet exemple, nous utilisons le modèle text-embedding-ada-002 d'OpenAI.
embedding = {
"embedding_model": "OpenAI",
"api_key": os.environ["OPENAI_API_KEY"],
"model_name": "text-embedding-ada-002",
}
Configuration de Milvus comme base de données cible
Nous devons stocker les embeddings générés dans Milvus. Ici, nous définissons nos paramètres de connexion Milvus à l'aide de Milvus Lite.
target = {
"target_database": "Milvus",
"host": "./milvus.db", # os.environ["ZILLIZ_CLOUD_PUBLIC_ENDPOINT"] if using Zilliz Cloud
"api_key": "", # os.environ["ZILLIZ_CLOUD_TOKEN"] if using Zilliz Cloud
"collection_name": "my_collection",
"vector_dim": 1536, # 1536 for text-embedding-ada-002
}
Pour host et api_key:
Définir
hostcomme un fichier local, par exemple./milvus.db, et laisserapi_keyvide est la méthode la plus pratique, car elle utilise automatiquement Milvus Lite pour stocker toutes les données dans ce fichier.Si vous avez des données à grande échelle, vous pouvez configurer un serveur Milvus plus performant sur docker ou kubernetes. Dans cette configuration, veuillez utiliser l'uri du serveur, par exemple
http://localhost:19530, comme votrehostet laissezapi_keyvide.Si vous souhaitez utiliser Zilliz Cloud, le service cloud entièrement géré pour Milvus, ajustez les adresses
hostetapi_key, qui correspondent au point de terminaison public et à la clé Api dans Zilliz Cloud.
Spécification des colonnes pour l'intégration
Nous devons maintenant spécifier quelles colonnes de nos fichiers CSV doivent être converties en embeddings. Cela permet de s'assurer que seuls les champs de texte pertinents sont traités, optimisant ainsi l'efficacité et le stockage.
embed_columns = ["col_1", "col_2", "col_3"]
Création et exécution du pipeline VectorETL
Une fois toutes les configurations en place, nous pouvons maintenant initialiser le pipeline ETL, configurer le flux de données et l'exécuter.
from vector_etl import create_flow
flow = create_flow()
flow.set_source(source)
flow.set_embedding(embedding)
flow.set_target(target)
flow.set_embed_columns(embed_columns)
# Execute the flow
flow.execute()
En suivant ce tutoriel, nous avons réussi à construire un pipeline ETL de bout en bout pour déplacer des documents d'Amazon S3 vers Milvus à l'aide de VectorETL. VectorETL est flexible en ce qui concerne les sources de données, de sorte que vous pouvez choisir les sources de données que vous souhaitez en fonction des besoins spécifiques de votre application. Grâce à la conception modulaire de VectorETL, vous pouvez facilement étendre ce pipeline pour prendre en charge d'autres sources de données, en intégrant des modèles, ce qui en fait un outil puissant pour l'IA et les flux de travail d'ingénierie des données !