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
hostcomo un archivo local, por ejemplo./milvus.db, y dejarapi_keyvací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 ejemplo
http://localhost:19530, como suhosty dejeapi_keyvacío.Si desea utilizar Zilliz Cloud, el servicio en la nube totalmente gestionado para Milvus, ajuste
hostyapi_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!