VectorETL:ベクトルデータベースの軽量ETLフレームワーク
コンテキストデータによるVectorETLは、データとAIエンジニアがAIアプリケーションのデータをわずか数分で処理できるように設計されたモジュラーフレームワークです。
VectorEtlは、さまざまなデータソースをベクトル埋め込みに変換し、さまざまなベクターデータベースに保存するプロセスを合理化します。複数のデータソース(データベース、クラウドストレージ、ローカルファイル)、さまざまな埋め込みモデル(Openai、Cohere、Google Geminiを含む)、およびいくつかのベクトルデータベースターゲット(Pinecone、Qdrant、Weaviateなど)をサポートします。
このパイプラインは、ベクトル検索システムの作成と管理を簡素化することを目的としており、開発者とデータサイエンティストがセマンティック検索、推奨システム、またはその他のベクターベースの操作を必要とするアプリケーションを簡単に構築および拡張できるようにすることを目的としています。

pip install --upgrade vector-etl
または
pip install git+https://github.com/ContextData/VectorETL.git
このセクションでは、Vectorデータベースに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 ()上記のオプション2から同じYAML構成ファイルを使用すると、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(抽出、変換、負荷)フレームワークは、さまざまなソースからデータを抽出し、ベクターの埋め込みに変換し、これらの埋め込みをさまざまなベクトルデータベースにロードするプロセスを合理化するために設計された強力で柔軟なツールです。
モジュール性、スケーラビリティ、および使いやすさを念頭に置いて構築されているため、データインフラストラクチャのベクトル検索の力を活用しようとする組織にとって理想的なソリューションとなっています。
汎用性のあるデータ抽出:フレームワークは、従来のデータベース、クラウドストレージソリューション(Amazon S3やGoogle Cloud Storageなど)、人気のSaaSプラットフォーム(StripeやZendeskなど)など、幅広いデータソースをサポートしています。この汎用性により、複数のソースからのデータを統一されたベクトルデータベースに統合できます。
高度なテキスト処理:テキストデータの場合、フレームワークは洗練されたチャンクと重複手法を実装します。これにより、ベクトル埋め込みを作成するときにテキストのセマンティックコンテキストが保存され、より正確な検索結果につながることが保証されます。
最先端の埋め込みモデル:システムは、Openai、Cohere、Google Gemini、Azure Openaiなどの主要な埋め込みモデルと統合されています。これにより、特定のユースケースと品質要件に最適な埋め込みモデルを選択できます。
複数のベクトルデータベースサポート:Pinecone、Qdrant、Weaviate、Singlestore、Supabase、またはLancedBを使用しているかどうかにかかわらず、このフレームワークで説明しています。これらの一般的なベクトルデータベースとシームレスにインターフェイスするように設計されており、ニーズに最適なデータベースを選択できるようになります。
構成可能で拡張可能:フレームワーク全体は、YAMLまたはJSON構成ファイルを介して高度に構成可能です。さらに、そのモジュラーアーキテクチャにより、ニーズが進化するにつれて、新しいデータソース、埋め込みモデル、またはベクターデータベースを簡単に拡張できます。
このETLフレームワークは、ベクトル検索機能を実装またはアップグレードしようとする組織に最適です。
データの抽出プロセスを自動化し、ベクトル埋め込みを作成し、ベクターデータベースに保存することにより、このフレームワークは、ベクター検索システムのセットアップに伴う時間と複雑さを大幅に削減します。データ科学者とエンジニアは、データ処理とベクターストレージの複雑さを心配するのではなく、洞察とアプリケーションの構築に集中できるようになります。
ETLフレームワークは、構成ファイルを使用して、ソース、埋め込みモデル、ターゲットデータベース、およびその他のパラメーターの詳細を指定します。構成ファイルにYAMLまたはJSON形式のいずれかを使用できます。
構成ファイルは、3つの主要なセクションに分割されます。
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]ファイルに限定されています
非構造化を使用するには、3つの追加パラメーターが必要になります
use_unstructured :( true/false)インジケータ非構造化されたAPIを使用するようにフレームワークを伝えるunstructured_api_key :非構造化されたAPIキーを入力しますunstructured_url :非構造化ダッシュボードからAPI URLを入力します # 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}これにより、機密データを公開せずに構成ファイルをバージョン制御に保持できます。
特定のデータソース、埋め込みモデル、ターゲットデータベースに基づいて構成を調整することを忘れないでください。各サービスのドキュメントを参照して、必要なすべてのパラメーターを提供していることを確認してください。
VectorデータベースのETLフレームワークへの貢献を歓迎します!バグを修正したり、ドキュメントを改善したり、新機能を提案したりしても、あなたの努力は高く評価されています。貢献する方法は次のとおりです。
バグに遭遇した場合、またはETLフレームワークを改善するための提案がある場合:
ETLフレームワークを改善する方法を常に探しています。あなたがアイデアを持っているなら:
私たちはあなたのプルリクエストを積極的に歓迎します:
mainからブランチを作成します。プロジェクト全体で一貫性を維持するために、これらのコーディング基準を遵守してください。
ドキュメントの改善は常に高く評価されています。
新機能の追加を考えている場合:
source_modsディレクトリに新しいファイルを追加します。source_mods/__init__.pyでget_source_class関数を更新します。embedding_modsディレクトリに新しいファイルを追加します。embedding_mods/__init__.pyでget_embedding_model関数を更新します。target_modsディレクトリに新しいファイルを追加します。get_target_database関数をtarget_mods/__init__.pyで更新します。すべてのユーザーがDiscord Serverに参加して、コンテキストデータ開発チームやその他の貢献者と協力して、アップグレード、新しい統合、問題を提案することをお勧めします。