Эффективная загрузка данных в Milvus с помощью VectorETL
В этом руководстве мы рассмотрим, как эффективно загружать данные в Milvus с помощью VectorETL, легкого ETL-фреймворка, разработанного для векторных баз данных. VectorETL упрощает процесс извлечения данных из различных источников, преобразования их в векторные вкрапления с помощью моделей искусственного интеллекта и хранения в Milvus для быстрого и масштабируемого извлечения. К концу этого урока вы получите рабочий ETL-конвейер, который позволит вам с легкостью интегрировать и управлять системами векторного поиска. Давайте погрузимся!
Подготовка
Зависимости и окружение
$ pip install --upgrade vector-etl pymilvus
Если вы используете Google Colab, для включения только что установленных зависимостей вам может потребоваться перезапустить среду выполнения (нажмите на меню "Runtime" в верхней части экрана и выберите "Restart session" из выпадающего меню).
VectorETL поддерживает множество источников данных, включая Amazon S3, Google Cloud Storage, Local File и т. д. С полным списком поддерживаемых источников вы можете ознакомиться здесь. В этом руководстве мы рассмотрим Amazon S3 в качестве примера источника данных.
Мы будем загружать документы из Amazon S3. Поэтому вам необходимо подготовить AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в качестве переменных окружения для безопасного доступа к вашему ведру S3. Кроме того, мы будем использовать модель встраивания OpenAI text-embedding-ada-002 для генерации вкраплений для данных. Также необходимо подготовить api ключ OPENAI_API_KEY в качестве переменной окружения.
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"
Рабочий процесс
Определение источника данных (Amazon S3)
В данном случае мы извлекаем документы из ведра Amazon S3. VectorETL позволяет нам указать имя ведра, путь к файлам и тип данных, с которыми мы работаем.
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"],
}
Настройка модели встраивания (OpenAI)
После того как мы настроили источник данных, нам нужно определить модель встраивания, которая будет преобразовывать наши текстовые данные в векторные вкрапления. В данном примере мы используем модель OpenAI text-embedding-ada-002.
embedding = {
"embedding_model": "OpenAI",
"api_key": os.environ["OPENAI_API_KEY"],
"model_name": "text-embedding-ada-002",
}
Настройка Milvus в качестве целевой базы данных
Нам нужно хранить сгенерированные эмбеддинги в Milvus. Здесь мы определяем параметры подключения к Milvus с помощью 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
}
Для файлов host и api_key:
Задать
hostв качестве локального файла, например./milvus.db, и оставитьapi_keyпустым - самый удобный метод, так как он автоматически использует Milvus Lite для хранения всех данных в этом файле.Если у вас большой объем данных, вы можете настроить более производительный сервер Milvus на docker или kubernetes. В этом случае используйте uri сервера, например,
http://localhost:19530, в качествеhostи оставьтеapi_keyпустым.Если вы хотите использовать Zilliz Cloud, полностью управляемый облачный сервис для Milvus, настройте
hostиapi_key, которые соответствуют публичной конечной точке и ключу Api в Zilliz Cloud.
Указание столбцов для встраивания
Теперь нам нужно указать, какие столбцы из наших CSV-файлов должны быть преобразованы во встраиваемые данные. Это гарантирует, что будут обработаны только соответствующие текстовые поля, что оптимизирует эффективность и хранение данных.
embed_columns = ["col_1", "col_2", "col_3"]
Создание и выполнение конвейера VectorETL
Теперь, когда все настройки выполнены, мы инициализируем ETL-конвейер, настроим поток данных и выполним его.
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()
Следуя этому руководству, мы успешно создали сквозной ETL-конвейер для перемещения документов из Amazon S3 в Milvus с помощью VectorETL. VectorETL отличается гибкостью в выборе источников данных, поэтому вы можете выбирать любые источники данных, исходя из конкретных потребностей вашего приложения. Благодаря модульному дизайну VectorETL вы можете легко расширить этот конвейер для поддержки других источников данных, встраивания моделей, что делает его мощным инструментом для ИИ и инженерных процессов обработки данных!