Vectoretl: легкая структура ETL для векторных баз данных
VectorETL по контекстным данным - это модульная структура, предназначенная для того, чтобы помочь Data & IA -инженерам обрабатывать данные для их приложений AI всего за несколько минут!
Vectoretl оптимизирует процесс преобразования различных источников данных в векторные встроения и хранение их в различных векторных базах данных. Он поддерживает несколько источников данных (базы данных, облачное хранилище и локальные файлы), различные модели встраивания (включая OpenAI, COHERE и Google Gemini) и несколько целей векторных баз данных (например, PineCone, Qdrant и Weaviate).
Этот конвейер направлен на упрощение создания и управления векторными системами поиска, что позволяет разработчикам и ученым для данных легко создавать и масштабировать приложения, которые требуют семантического поиска, систем рекомендаций или других векторных операций.

pip install --upgrade vector-etl
или
pip install git+https://github.com/ContextData/VectorETL.git
В этом разделе представлены инструкции о том, как использовать структуру ETL для векторных баз данных. Мы рассмотрим запуск, проверку конфигураций и предоставим несколько общих примеров использования.
Предполагая, что у вас есть файл конфигурации, похожий на файл ниже.
source :
source_data_type : " database "
db_type : " postgres "
host : " localhost "
database_name : " customer_data "
username : " user "
password : " password "
port : 5432
query : " SELECT * FROM customers WHERE updated_at > :last_updated_at "
batch_size : 1000
chunk_size : 1000
chunk_overlap : 0
embedding :
embedding_model : " OpenAI "
api_key : ${OPENAI_API_KEY}
model_name : " text-embedding-ada-002 "
target :
target_database : " Pinecone "
pinecone_api_key : ${PINECONE_API_KEY}
index_name : " customer-embeddings "
dimension : 1536
metric : " cosine "
embed_columns :
- " customer_name "
- " customer_description "
- " purchase_history "Затем вы можете импортировать конфигурацию в свой проект Python и автоматически запустить ее оттуда
from vector_etl import create_flow
flow = create_flow ()
flow . load_yaml ( '/path/to/your/config.yaml' )
flow . execute ()Используя тот же файл конфигурации YAML из опции 2 выше, вы можете запустить процесс непосредственно из вашей командной строки без необходимости импортировать его в приложение Python.
Чтобы запустить структуру ETL, используйте следующую команду:
vector-etl -c /path/to/your/config.yaml from vector_etl import create_flow
source = {
"source_data_type" : "database" ,
"db_type" : "postgres" ,
"host" : "localhost" ,
"port" : "5432" ,
"database_name" : "test" ,
"username" : "user" ,
"password" : "password" ,
"query" : "select * from test" ,
"batch_size" : 1000 ,
"chunk_size" : 1000 ,
"chunk_overlap" : 0 ,
}
embedding = {
"embedding_model" : "OpenAI" ,
"api_key" : ${ OPENAI_API_KEY },
"model_name" : "text-embedding-ada-002"
}
target = {
"target_database" : "Pinecone" ,
"pinecone_api_key" : ${ PINECONE_API_KEY },
"index_name" : "my-pinecone-index" ,
"dimension" : 1536
}
embed_columns = [ "customer_name" , "customer_description" , "purchase_history" ]
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 для разных сценариев:
vector-etl -c config/postgres_to_pinecone.yaml Где postgres_to_pinecone.yaml может выглядеть так:
source :
source_data_type : " database "
db_type : " postgres "
host : " localhost "
database_name : " customer_data "
username : " user "
password : " password "
port : 5432
query : " SELECT * FROM customers WHERE updated_at > :last_updated_at "
batch_size : 1000
chunk_size : 1000
chunk_overlap : 0
embedding :
embedding_model : " OpenAI "
api_key : ${OPENAI_API_KEY}
model_name : " text-embedding-ada-002 "
target :
target_database : " Pinecone "
pinecone_api_key : ${PINECONE_API_KEY}
index_name : " customer-embeddings "
dimension : 1536
metric : " cosine "
embed_columns :
- " customer_name "
- " customer_description "
- " purchase_history " vector-etl -c config/s3_to_qdrant.yaml Где может выглядеть s3_to_qdrant.yaml :
source :
source_data_type : " Amazon S3 "
bucket_name : " my-data-bucket "
prefix : " customer_data/ "
file_type : " csv "
aws_access_key_id : ${AWS_ACCESS_KEY_ID}
aws_secret_access_key : ${AWS_SECRET_ACCESS_KEY}
chunk_size : 1000
chunk_overlap : 200
embedding :
embedding_model : " Cohere "
api_key : ${COHERE_API_KEY}
model_name : " embed-english-v2.0 "
target :
target_database : " Qdrant "
qdrant_url : " https://your-qdrant-cluster-url.qdrant.io "
qdrant_api_key : ${QDRANT_API_KEY}
collection_name : " customer_embeddings "
embed_columns : [] Структура Vectoretl (Extract, Transform, Load) представляет собой мощный и гибкий инструмент, предназначенный для оптимизации процесса извлечения данных из различных источников, преобразования его в векторные встраивания и загрузку этих встроений в диапазон векторных баз данных.
Он построен с учетом модульности, масштабируемости и простоты использования, что делает его идеальным решением для организаций, стремящихся использовать силу векторного поиска в своей инфраструктуре данных.
Универсальное извлечение данных : структура поддерживает широкий спектр источников данных, включая традиционные базы данных, облачные решения для хранения (например, Amazon S3 и Google Cloud Storage), а также популярные платформы SaaS (такие как полоса и Zendesk). Эта универсальность позволяет вам объединять данные из нескольких источников в единую векторную базу данных.
Расширенная обработка текста : для текстовых данных структура реализует сложные методы Chunking и перекрытие. Это гарантирует, что семантический контекст текста сохраняется при создании векторных встроений, что приводит к более точным результатам поиска.
Современные модели встраивания : система интегрируется с ведущими моделями встраивания, включая OpenAI, COUER, Google Gemini и Azure OpenAI. Это позволяет вам выбрать модель встраивания, которая наилучшим образом соответствует вашему конкретному варианту использования и требованиям к качеству.
Поддержка нескольких векторных баз данных : независимо от того, используете ли вы Pinecone, Qdrant, Weaviate, Singlestore, Supabase или Lancedb, эта структура раскрывает вас. Он предназначен для беспрепятственного взаимодействия с этими популярными векторными базами данных, что позволяет вам выбрать тот, который наилучшим образом соответствует вашим потребностям.
Настраиваемая и расширяемая : вся структура очень настраивается через файлы конфигурации YAML или JSON. Кроме того, его модульная архитектура позволяет легко расширяться с новыми источниками данных, моделями встраивания или векторными базами данных по мере развития ваших потребностей.
Эта структура ETL идеально подходит для организаций, стремящихся реализовать или обновить свои возможности поиска в вектор.
Автоматизация процесса извлечения данных, создания векторных встроений и хранения их в векторной базе данных, эта структура значительно снижает время и сложность, связанную с настройкой системы поиска вектора. Это позволяет ученым и инженерам сосредоточиться на получении понимания и создания приложений, а не на то, чтобы беспокоиться о тонкостях обработки данных и хранения вектора.
Framework ETL использует файл конфигурации, чтобы указать детали источника, модели встраивания, целевой базы данных и других параметров. Вы можете использовать формат YAML или JSON для файла конфигурации.
Файл конфигурации разделен на три основных раздела:
source : указывает данные источника данныхembedding : определяет модель встраивания, которая будет использоватьсяtarget : описывает базу данных целевого вектораembed_columns : определяет столбцы, которые необходимо встроить (в основном для структурированных источников данных) from vector_etl import create_flow
source = {
"source_data_type" : "database" ,
"db_type" : "postgres" ,
"host" : "localhost" ,
"port" : "5432" ,
"database_name" : "test" ,
"username" : "user" ,
"password" : "password" ,
"query" : "select * from test" ,
"batch_size" : 1000 ,
"chunk_size" : 1000 ,
"chunk_overlap" : 0 ,
}
embedding = {
"embedding_model" : "OpenAI" ,
"api_key" : ${ OPENAI_API_KEY },
"model_name" : "text-embedding-ada-002"
}
target = {
"target_database" : "Pinecone" ,
"pinecone_api_key" : ${ PINECONE_API_KEY },
"index_name" : "my-pinecone-index" ,
"dimension" : 1536
}
embed_columns = [ "customer_name" , "customer_description" , "purchase_history" ] source :
source_data_type : " database "
db_type : " postgres "
host : " localhost "
database_name : " mydb "
username : " user "
password : " password "
port : 5432
query : " SELECT * FROM mytable WHERE updated_at > :last_updated_at "
batch_size : 1000
chunk_size : 1000
chunk_overlap : 0
embedding :
embedding_model : " OpenAI "
api_key : " your-openai-api-key "
model_name : " text-embedding-ada-002 "
target :
target_database : " Pinecone "
pinecone_api_key : " your-pinecone-api-key "
index_name : " my-index "
dimension : 1536
metric : " cosine "
cloud : " aws "
region : " us-west-2 "
embed_columns :
- " column1 "
- " column2 "
- " column3 " {
"source" : {
"source_data_type" : " database " ,
"db_type" : " postgres " ,
"host" : " localhost " ,
"database_name" : " mydb " ,
"username" : " user " ,
"password" : " password " ,
"port" : 5432 ,
"query" : " SELECT * FROM mytable WHERE updated_at > :last_updated_at " ,
"batch_size" : 1000 ,
"chunk_size" : 1000 ,
"chunk_overlap" : 0
},
"embedding" : {
"embedding_model" : " OpenAI " ,
"api_key" : " your-openai-api-key " ,
"model_name" : " text-embedding-ada-002 "
},
"target" : {
"target_database" : " Pinecone " ,
"pinecone_api_key" : " your-pinecone-api-key " ,
"index_name" : " my-index " ,
"dimension" : 1536 ,
"metric" : " cosine " ,
"cloud" : " aws " ,
"region" : " us-west-2 "
},
"embed_columns" : [ " column1 " , " column2 " , " column3 " ]
} Раздел source варьируется в зависимости от source_data_type . Вот примеры для разных типов источников:
{
"source_data_type" : " database " ,
"db_type" : " postgres " , # or "mysql", "snowflake", "salesforce"
"host" : " localhost " ,
"database_name" : " mydb " ,
"username" : " user " ,
"password" : " password " ,
"port" : 5432 ,
"query" : " SELECT * FROM mytable WHERE updated_at > :last_updated_at " ,
"batch_size" : 1000 ,
"chunk_size" : 1000 ,
"chunk_overlap" : 0
} source :
source_data_type : " database "
db_type : " postgres " # or "mysql", "snowflake", "salesforce"
host : " localhost "
database_name : " mydb "
username : " user "
password : " password "
port : 5432
query : " SELECT * FROM mytable WHERE updated_at > :last_updated_at "
batch_size : 1000
chunk_size : 1000
chunk_overlap : 0 {
"source_data_type" : " Amazon S3 " ,
"bucket_name" : " my-bucket " ,
"key" : " path/to/files/ " ,
"file_type" : " .csv " ,
"aws_access_key_id" : " your-access-key " ,
"aws_secret_access_key" : " your-secret-key "
} source :
source_data_type : " Amazon S3 "
bucket_name : " my-bucket "
key : " path/to/files/ "
file_type : " .csv "
aws_access_key_id : " your-access-key "
aws_secret_access_key : " your-secret-key " {
"source_data_type" : " Google Cloud Storage " ,
"credentials_path" : " /path/to/your/credentials.json " ,
"bucket_name" : " myBucket " ,
"prefix" : " prefix/ " ,
"file_type" : " csv " ,
"chunk_size" : 1000 ,
"chunk_overlap" : 0
} source :
source_data_type : " Google Cloud Storage "
credentials_path : " /path/to/your/credentials.json "
bucket_name : " myBucket "
prefix : " prefix/ "
file_type : " csv "
chunk_size : 1000
chunk_overlap : 0 Начиная с версии 0.1.6.3, пользователи теперь могут использовать API без сервера без сервера для эффективного извлечения данных из множества источников на основе файлов.
Примечание. Это ограничено неструктурированным бесстрастным API и не должно использоваться для структуры с открытым исходным кодом неструктурированной.
Это ограничено [pdf, docx, doc, txt] файлы
Чтобы использовать неструктурированную, вам понадобится три дополнительных параметра
use_unstructured : (true/false) Индикатор, сообщающий структуру для использования неструктурированного APIunstructured_api_key : введите свой неструктурированный ключ APIunstructured_url : введите свой URL -адрес API из вашей неструктурированной панели панели # Example using Local file
source :
source_data_type : " Local File "
file_path : " /path/to/file.docx "
file_type : " docx "
use_unstructured : True
unstructured_api_key : ' my-unstructured-key '
unstructured_url : ' https://my-domain.api.unstructuredapp.io '
# Example using Amazon S3
source :
source_data_type : " Amazon S3 "
bucket_name : " myBucket "
prefix : " Dir/Subdir/ "
file_type : " pdf "
aws_access_key_id : " your-access-key "
aws_secret_access_key : " your-secret-access-key "
use_unstructured : True
unstructured_api_key : ' my-unstructured-key '
unstructured_url : ' https://my-domain.api.unstructuredapp.io ' В разделе embedding указывается, какая модель встраивания модели для использования:
embedding :
embedding_model : " OpenAI " # or "Cohere", "Google Gemini", "Azure OpenAI", "Hugging Face"
api_key : " your-api-key "
model_name : " text-embedding-ada-002 " # model name varies by provider target раздел варьируется в зависимости от выбранной векторной базы данных. Вот пример для Pinecone:
target :
target_database : " Pinecone "
pinecone_api_key : " your-pinecone-api-key "
index_name : " my-index "
dimension : 1536
metric : " cosine "
cloud : " aws "
region : " us-west-2 " В списке embed_columns указывается, какие столбцы из исходных данных следует использовать для генерации встраиваний (на данный момент применяется только к источникам базы данных):
embed_columns :
- " column1 "
- " column2 "
- " column3 " Список embed_columns требуется только для структурированных источников данных (например, PostgreSQL, MySQL, Snowflake). Для всех других источников используйте пустой список
embed_columns : []Чтобы защитить конфиденциальную информацию, такую как клавиши API и пароли, рассмотрите возможность использования переменных среды или системы управления безопасными секретами. Затем вы можете ссылаться на них в файле конфигурации:
embedding :
api_key : ${OPENAI_API_KEY}Это позволяет вам сохранить файлы конфигурации в управлении версиями, не обнаруживая конфиденциальные данные.
Не забудьте настроить свою конфигурацию на основе ваших конкретных источников данных, моделей встраивания и целевых баз данных. Обратитесь к документации для каждой службы, чтобы убедиться, что вы предоставляете все необходимые параметры.
Мы приветствуем вклад в Framework ETL для векторных баз данных! Независимо от того, исправляете ли вы ошибки, улучшаете документацию или предлагаете новые функции, ваши усилия ценятся. Вот как вы можете внести свой вклад:
Если вы столкнетесь с ошибкой или имеете предложение по улучшению структуры ETL:
Мы всегда ищем способы улучшить структуру ETL. Если у вас есть идеи:
Мы активно приветствуем ваши запросы на привлечение:
main .Чтобы поддерживать последовательность на протяжении всего проекта, придерживайтесь этих стандартов кодирования:
Улучшение документации всегда ценится:
Если вы думаете о добавлении новой функции:
source_mods .get_source_class в source_mods/__init__.py .embedding_mods .get_embedding_model в embedding_mods/__init__.py .target_mods .get_target_database в target_mods/__init__.py .Мы призываем всех пользователей присоединиться к нашему серверу Discord для сотрудничества с командой разработки данных и других участников, чтобы предложить обновления, новые интеграции и проблемы.