Open In Colab GitHub Repository

Carga eficiente de datos en Milvus con VectorETL

En este tutorial, exploraremos cómo cargar datos eficientemente en Milvus utilizando VectorETL, un marco ETL ligero diseñado para bases de datos vectoriales. VectorETL simplifica el proceso de extraer datos de varias fuentes, transformarlos en incrustaciones vectoriales utilizando modelos de IA y almacenarlos en Milvus para una recuperación rápida y escalable. Al final de este tutorial, dispondrá de una canalización ETL operativa que le permitirá integrar y gestionar sistemas de búsqueda vectorial con facilidad. ¡Empecemos!

Preparación

Dependencia y entorno

$ pip install --upgrade vector-etl pymilvus

Si utilizas Google Colab, para habilitar las dependencias que acabas de instalar, es posible que tengas que reiniciar el tiempo de ejecución (haz clic en el menú "Tiempo de ejecución" en la parte superior de la pantalla y selecciona "Reiniciar sesión" en el menú desplegable).

VectorETL soporta múltiples fuentes de datos, incluyendo Amazon S3, Google Cloud Storage, Local File, etc. Puedes consultar la lista completa de fuentes soportadas aquí. En este tutorial, nos centraremos en Amazon S3 como ejemplo de fuente de datos.

Cargaremos documentos desde Amazon S3. Por lo tanto, necesitas preparar AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY como variables de entorno para acceder de forma segura a tu bucket S3. Además, utilizaremos el modelo de incrustación text-embedding-ada-002 de OpenAI para generar incrustaciones para los datos. También debes preparar la clave api OPENAI_API_KEY como variable de entorno.

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"

Flujo de trabajo

Definición de la fuente de datos (Amazon S3)

En este caso, estamos extrayendo documentos de un bucket de Amazon S3. VectorETL nos permite especificar el nombre del bucket, la ruta a los archivos y el tipo de datos con los que estamos trabajando.

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

Configuración del modelo de incrustación (OpenAI)

Una vez que tenemos nuestra fuente de datos configurada, necesitamos definir el modelo de incrustación que transformará nuestros datos textuales en incrustaciones vectoriales. En este ejemplo, utilizaremos text-embedding-ada-002 de OpenAI.

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

Configuración de Milvus como base de datos de destino

Necesitamos almacenar las incrustaciones generadas en Milvus. Aquí, definimos nuestros parámetros de conexión Milvus utilizando 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
}

Para el host y api_key:

  • Establecer el host como un archivo local, por ejemplo./milvus.db, y dejar api_key vacío es el método más conveniente, ya que utiliza automáticamente Milvus Lite para almacenar todos los datos en este archivo.

  • Si tiene una gran escala de datos, puede configurar un servidor Milvus de mayor rendimiento en docker o kubernetes. En esta configuración, por favor utilice la uri del servidor, por ejemplohttp://localhost:19530, como su host y deje api_key vacío.

  • Si desea utilizar Zilliz Cloud, el servicio en la nube totalmente gestionado para Milvus, ajuste host y api_key, que corresponden al punto final público y a la clave Api en Zilliz Cloud.

Especificación de columnas para incrustación

Ahora tenemos que especificar qué columnas de nuestros archivos CSV deben convertirse en incrustaciones. Esto asegura que sólo se procesen los campos de texto relevantes, optimizando tanto la eficiencia como el almacenamiento.

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

Creación y ejecución de la canalización VectorETL

Con todas las configuraciones en su lugar, ahora inicializamos el ETL pipeline, establecemos el flujo de datos y lo ejecutamos.

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

Siguiendo este tutorial, hemos creado con éxito una canalización ETL de extremo a extremo para mover documentos de Amazon S3 a Milvus utilizando VectorETL. VectorETL es flexible en las fuentes de datos, por lo que puede elegir las fuentes de datos que desee en función de las necesidades específicas de su aplicación. Con el diseño modular de VectorETL, puede ampliar fácilmente esta tubería para admitir otras fuentes de datos, incrustando modelos, ¡lo que la convierte en una poderosa herramienta para la IA y los flujos de trabajo de ingeniería de datos!