Open In Colab GitHub Repository

Caricamento efficiente dei dati in Milvus con VectorETL

In questo tutorial scopriremo come caricare in modo efficiente i dati in Milvus utilizzando VectorETL, un framework ETL leggero progettato per i database vettoriali. VectorETL semplifica il processo di estrazione dei dati da varie fonti, la loro trasformazione in incorporazioni vettoriali mediante modelli di intelligenza artificiale e la loro memorizzazione in Milvus per un recupero rapido e scalabile. Alla fine di questo tutorial, avrete una pipeline ETL funzionante che vi permetterà di integrare e gestire facilmente i sistemi di ricerca vettoriale. Tuffiamoci nel vivo!

Preparazione

Dipendenza e ambiente

$ pip install --upgrade vector-etl pymilvus

Se si utilizza Google Colab, per abilitare le dipendenze appena installate potrebbe essere necessario riavviare il runtime (fare clic sul menu "Runtime" nella parte superiore dello schermo e selezionare "Restart session" dal menu a discesa).

VectorETL supporta diverse fonti di dati, tra cui Amazon S3, Google Cloud Storage, Local File, ecc. È possibile consultare l'elenco completo delle fonti supportate qui. In questa esercitazione ci concentreremo su Amazon S3 come fonte di dati.

Caricheremo i documenti da Amazon S3. Pertanto, è necessario preparare AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY come variabili d'ambiente per accedere in modo sicuro al bucket S3. Inoltre, utilizzeremo il modello di embedding text-embedding-ada-002 di OpenAI per generare embeddings per i dati. È necessario preparare anche la chiave api OPENAI_API_KEY come variabile d'ambiente.

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"

Flusso di lavoro

Definizione dell'origine dei dati (Amazon S3)

In questo caso, stiamo estraendo documenti da un bucket Amazon S3. VectorETL ci permette di specificare il nome del bucket, il percorso dei file e il tipo di dati con cui stiamo lavorando.

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"],
}

Configurazione del modello di incorporamento (OpenAI)

Una volta impostata la nostra fonte di dati, dobbiamo definire il modello di incorporamento che trasformerà i nostri dati testuali in incorporazioni vettoriali. In questo esempio utilizziamo text-embedding-ada-002 di OpenAI.

embedding = {
    "embedding_model": "OpenAI",
    "api_key": os.environ["OPENAI_API_KEY"],
    "model_name": "text-embedding-ada-002",
}

Impostazione di Milvus come database di destinazione

Dobbiamo memorizzare gli embeddings generati in Milvus. Qui definiamo i parametri di connessione a Milvus usando 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
}

Per host e api_key:

  • Impostare host come file locale, ad esempio./milvus.db, e lasciare api_key vuoto è il metodo più conveniente, poiché utilizza automaticamente Milvus Lite per memorizzare tutti i dati in questo file.

  • Se si dispone di una grande quantità di dati, è possibile configurare un server Milvus più performante su docker o kubernetes. In questa configurazione, utilizzare l'uri del server, ad esempiohttp://localhost:19530, come host e lasciare api_key vuoto.

  • Se si desidera utilizzare Zilliz Cloud, il servizio cloud completamente gestito per Milvus, regolare host e api_key, che corrispondono all'endpoint pubblico e alla chiave Api di Zilliz Cloud.

Specificare le colonne da incorporare

Ora dobbiamo specificare quali colonne dei nostri file CSV devono essere convertite in embedding. Questo assicura che vengano elaborati solo i campi di testo rilevanti, ottimizzando sia l'efficienza che lo storage.

embed_columns = ["col_1", "col_2", "col_3"]

Creazione ed esecuzione della pipeline VectorETL

Con tutte le configurazioni a posto, ora inizializziamo la pipeline ETL, impostiamo il flusso di dati e lo eseguiamo.

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()

Seguendo questa guida, abbiamo costruito con successo una pipeline ETL end-to-end per spostare i documenti da Amazon S3 a Milvus utilizzando VectorETL. VectorETL è flessibile per quanto riguarda le fonti di dati, per cui è possibile scegliere qualsiasi fonte di dati in base alle esigenze specifiche dell'applicazione. Grazie al design modulare di VectorETL, è possibile estendere facilmente questa pipeline per supportare altre fonti di dati e incorporare modelli, rendendola uno strumento potente per i flussi di lavoro dell'intelligenza artificiale e dell'ingegneria dei dati!

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?