VectorETL : 벡터 데이터베이스를위한 경량 ETL 프레임 워크
Context Data에 의한 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
이 섹션에서는 벡터 데이터베이스에 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 형식을 사용할 수 있습니다.
구성 파일은 세 가지 주요 섹션으로 나뉩니다.
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를 사용하여 다수의 파일 기반 소스에서 데이터를 효율적으로 추출 할 수 있습니다.
참고 : 이는 구조화되지 않은 Severless API로 제한되며 구조화되지 않은의 오픈 소스 프레임 워크에 사용해서는 안됩니다.
이는 [PDF, DOCX, DOC, TXT] 파일로 제한됩니다
구조화되지 않은 사용하려면 세 가지 추가 매개 변수가 필요합니다.
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 섹션은 선택한 벡터 데이터베이스에 따라 다릅니다. PENECONE의 예는 다음과 같습니다.
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}이를 통해 민감한 데이터를 노출하지 않고 구성 파일을 버전 제어로 유지할 수 있습니다.
특정 데이터 소스, 임베딩 모델 및 대상 데이터베이스를 기반으로 구성을 조정해야합니다. 필요한 모든 매개 변수를 제공하려면 각 서비스의 문서를 참조하십시오.
벡터 데이터베이스의 ETL 프레임 워크에 대한 기여를 환영합니다! 버그를 고치거나 문서화 개선 또는 새로운 기능 제안에 관계없이 노력에 감사드립니다. 기여하는 방법은 다음과 같습니다.
버그가 발생하거나 ETL 프레임 워크 향상에 대한 제안이있는 경우 :
우리는 항상 ETL 프레임 워크를 개선 할 수있는 방법을 찾고 있습니다. 아이디어가있는 경우 :
풀 요청을 적극적으로 환영합니다.
main 에서 지점을 만듭니다.프로젝트 전체에서 일관성을 유지하려면 이러한 코딩 표준을 준수하십시오.
문서 개선은 항상 감사합니다.
새로운 기능을 추가 할 생각이라면 :
source_mods 디렉토리에 새 파일을 추가하십시오.source_mods/__init__.py 에서 get_source_class 함수를 업데이트하십시오.embedding_mods 디렉토리에 새 파일을 추가하십시오.embedding_mods/__init__.py 에서 get_embedding_model 함수를 업데이트하십시오.target_mods 디렉토리에 새 파일을 추가하십시오.target_mods/__init__.py 에서 get_target_database 함수를 업데이트하십시오.업그레이드, 새로운 통합 및 문제를 제안하기 위해 모든 사용자가 Discord Server에 가입하여 Context Data Development Team 및 기타 기고자와 협력 할 것을 권장합니다.