Vektoretl: Kerangka ETL ringan untuk database vektor
Vektoretl menurut data konteks adalah kerangka kerja modular yang dirancang untuk membantu data & insinyur AI memproses data untuk aplikasi AI mereka hanya dalam beberapa menit!
Vektoretl merampingkan proses mengubah beragam sumber data menjadi embeddings vektor dan menyimpannya di berbagai database vektor. Ini mendukung beberapa sumber data (database, penyimpanan cloud, dan file lokal), berbagai model penyematan (termasuk OpenAi, Cohere, dan Google Gemini), dan beberapa target basis data vektor (seperti Pinecone, Qdrant, dan Weaviate).
Pipa ini bertujuan untuk menyederhanakan pembuatan dan pengelolaan sistem pencarian vektor, memungkinkan pengembang dan ilmuwan data untuk dengan mudah membangun dan mengukur aplikasi yang memerlukan pencarian semantik, sistem rekomendasi, atau operasi berbasis vektor lainnya.

pip install --upgrade vector-etl
atau
pip install git+https://github.com/ContextData/VectorETL.git
Bagian ini memberikan instruksi tentang cara menggunakan kerangka ETL untuk database vektor. Kami akan membahas, memvalidasi konfigurasi, dan memberikan beberapa contoh penggunaan umum.
Dengan asumsi Anda memiliki file konfigurasi yang mirip dengan file di bawah ini.
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 "Anda kemudian dapat mengimpor konfigurasi ke proyek Python Anda dan secara otomatis menjalankannya dari sana
from vector_etl import create_flow
flow = create_flow ()
flow . load_yaml ( '/path/to/your/config.yaml' )
flow . execute ()Menggunakan file konfigurasi YAML yang sama dari opsi 2 di atas, Anda dapat menjalankan proses langsung dari baris perintah Anda tanpa harus mengimpornya ke aplikasi Python.
Untuk menjalankan kerangka ETL, gunakan perintah berikut:
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 ()Berikut adalah beberapa contoh cara menggunakan kerangka ETL untuk skenario yang berbeda:
vector-etl -c config/postgres_to_pinecone.yaml Di mana postgres_to_pinecone.yaml mungkin terlihat seperti:
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 Di mana s3_to_qdrant.yaml mungkin terlihat seperti:
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 : [] Kerangka kerja vektoretl (ekstrak, transformasi, beban) adalah alat yang kuat dan fleksibel yang dirancang untuk merampingkan proses mengekstraksi data dari berbagai sumber, mengubahnya menjadi embeddings vektor, dan memuat embedding ini ke dalam berbagai basis data vektor.
Ini dibangun dengan modularitas, skalabilitas, dan kemudahan penggunaan dalam pikiran, menjadikannya solusi ideal untuk organisasi yang ingin memanfaatkan kekuatan pencarian vektor dalam infrastruktur data mereka.
Ekstraksi Data Serbaguna : Kerangka kerja mendukung beragam sumber data, termasuk database tradisional, solusi penyimpanan cloud (seperti Amazon S3 dan Google Cloud Storage), dan platform SaaS populer (seperti Stripe dan Zendesk). Fleksibilitas ini memungkinkan Anda untuk mengkonsolidasikan data dari berbagai sumber ke dalam database vektor terpadu.
Pemrosesan Teks Lanjutan : Untuk data tekstual, kerangka kerja mengimplementasikan teknik chunking dan tumpang tindih yang canggih. Ini memastikan bahwa konteks semantik teks dipertahankan saat membuat embeddings vektor, yang mengarah ke hasil pencarian yang lebih akurat.
Model Embedding yang canggih : Sistem ini terintegrasi dengan model embedding terkemuka, termasuk Openai, Cohere, Google Gemini, dan Azure Openai. Ini memungkinkan Anda untuk memilih model embedding yang paling sesuai dengan kasus penggunaan spesifik dan persyaratan kualitas Anda.
Beberapa Dukungan Database Vektor : Apakah Anda menggunakan Pinecone, Qdrant, Weaviate, Singlestore, Supabase, atau LancedB, kerangka kerja ini telah Anda liput. Ini dirancang untuk berinteraksi mulus dengan database vektor populer ini, memungkinkan Anda untuk memilih yang paling sesuai dengan kebutuhan Anda.
Dapat dikonfigurasi dan diperluas : Seluruh kerangka kerja sangat dapat dikonfigurasi melalui file konfigurasi YAML atau JSON. Selain itu, arsitektur modularnya memudahkan untuk diperluas dengan sumber data baru, model embedding, atau database vektor saat kebutuhan Anda berkembang.
Kerangka ETL ini sangat ideal untuk organisasi yang ingin menerapkan atau meningkatkan kemampuan pencarian vektor mereka.
Dengan mengotomatiskan proses mengekstraksi data, membuat embeddings vektor, dan menyimpannya dalam database vektor, kerangka kerja ini secara signifikan mengurangi waktu dan kompleksitas yang terlibat dalam pengaturan sistem pencarian vektor. Ini memungkinkan para ilmuwan dan insinyur data untuk fokus pada mendapatkan wawasan dan membangun aplikasi, daripada mengkhawatirkan seluk -beluk pemrosesan data dan penyimpanan vektor.
Kerangka ETL menggunakan file konfigurasi untuk menentukan detail sumber, model embedding, basis data target, dan parameter lainnya. Anda dapat menggunakan format YAML atau JSON untuk file konfigurasi.
File konfigurasi dibagi menjadi tiga bagian utama:
source : Menentukan detail sumber dataembedding : Menentukan model embedding yang akan digunakantarget : Menguraikan database vektor targetembed_columns : Menentukan kolom yang perlu disematkan (terutama untuk sumber data terstruktur) 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 " ]
} Bagian source bervariasi berdasarkan source_data_type . Berikut adalah contoh untuk berbagai jenis sumber:
{
"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 Mulai dari versi 0.1.6.3, pengguna sekarang dapat menggunakan API tanpa server yang tidak terstruktur untuk secara efisien mengekstrak data dari banyak sumber berbasis file.
CATATAN: Ini terbatas pada API Severless yang tidak terstruktur dan tidak boleh digunakan untuk kerangka kerja open source yang tidak terstruktur
Ini terbatas pada file [pdf, docx, doc, txt]
Untuk menggunakan tidak terstruktur, Anda akan membutuhkan tiga parameter tambahan
use_unstructured : (Benar/Salah) Indikator) Memberi tahu kerangka kerja untuk menggunakan API yang tidak terstrukturunstructured_api_key : Masukkan kunci API Anda yang tidak terstrukturunstructured_url : Masukkan URL API Anda dari dasbor Anda yang tidak terstruktur # 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 ' Bagian embedding menentukan model penyematan mana yang digunakan:
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 Bagian target bervariasi berdasarkan database vektor yang dipilih. Berikut contoh untuk 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 " Daftar embed_columns menentukan kolom mana dari data sumber yang harus digunakan untuk menghasilkan embeddings (hanya berlaku untuk sumber basis data untuk saat ini):
embed_columns :
- " column1 "
- " column2 "
- " column3 " Daftar embed_columns hanya diperlukan untuk sumber data terstruktur (misalnya PostgreSQL, MySQL, Snowflake). Untuk semua sumber lain, gunakan daftar kosong
embed_columns : []Untuk melindungi informasi sensitif seperti kunci dan kata sandi API, pertimbangkan untuk menggunakan variabel lingkungan atau sistem manajemen rahasia yang aman. Anda kemudian dapat merujuk ini di file konfigurasi Anda:
embedding :
api_key : ${OPENAI_API_KEY}Ini memungkinkan Anda untuk menjaga file konfigurasi Anda dalam kontrol versi tanpa mengekspos data sensitif.
Ingatlah untuk menyesuaikan konfigurasi Anda berdasarkan sumber data spesifik Anda, model embedding, dan basis data target. Lihat dokumentasi untuk setiap layanan untuk memastikan Anda menyediakan semua parameter yang diperlukan.
Kami menyambut kontribusi untuk kerangka ETL untuk database vektor! Apakah Anda memperbaiki bug, meningkatkan dokumentasi, atau mengusulkan fitur baru, upaya Anda dihargai. Begini cara Anda dapat berkontribusi:
Jika Anda menemukan bug atau memiliki saran untuk meningkatkan kerangka ETL:
Kami selalu mencari cara untuk membuat kerangka ETL lebih baik. Jika Anda punya ide:
Kami secara aktif menyambut permintaan tarikan Anda:
main .Untuk mempertahankan konsistensi di seluruh proyek, harap patuhi standar pengkodean ini:
Meningkatkan dokumentasi selalu dihargai:
Jika Anda berpikir untuk menambahkan fitur baru:
source_mods .get_source_class di source_mods/__init__.py .embedding_mods .get_embedding_model di embedding_mods/__init__.py .target_mods .get_target_database di target_mods/__init__.py .Kami mendorong semua pengguna untuk bergabung dengan server Discord kami untuk berkolaborasi dengan tim pengembangan data konteks dan kontributor lainnya untuk menyarankan peningkatan, integrasi dan masalah baru.