Vectoretl: Framework ETL ที่มีน้ำหนักเบาสำหรับฐานข้อมูลเวกเตอร์
Vectoretl โดยข้อมูลบริบทเป็นเฟรมเวิร์กแบบแยกส่วนที่ออกแบบมาเพื่อช่วยให้ ข้อมูลและวิศวกร AI ประมวลผลข้อมูลสำหรับแอปพลิเคชัน AI ของพวกเขาในเวลาเพียงไม่กี่นาที!
Vectoretl ปรับปรุงกระบวนการของการแปลงแหล่งข้อมูลที่หลากหลายให้เป็น Embeddings เวกเตอร์และจัดเก็บไว้ในฐานข้อมูลเวกเตอร์ต่างๆ รองรับแหล่งข้อมูลหลายแหล่ง (ฐานข้อมูลที่เก็บข้อมูลบนคลาวด์และไฟล์ท้องถิ่น), โมเดลการฝังที่หลากหลาย (รวมถึง OpenAI, Cohere และ Google Gemini) และเป้าหมายฐานข้อมูลเวกเตอร์หลายเป้าหมาย (เช่น Pinecone, Qdrant และ Weaviate)
ไปป์ไลน์นี้มีวัตถุประสงค์เพื่อทำให้การสร้างและการจัดการระบบค้นหาเวกเตอร์ง่ายขึ้นช่วยให้นักพัฒนาและนักวิทยาศาสตร์ด้านข้อมูลสามารถสร้างและปรับขนาดแอปพลิเคชันที่ต้องใช้การค้นหาความหมายระบบแนะนำหรือการดำเนินการตามเวกเตอร์อื่น ๆ

pip install --upgrade vector-etl
หรือ
pip install git+https://github.com/ContextData/VectorETL.git
ส่วนนี้ให้คำแนะนำเกี่ยวกับวิธีการใช้ Framework สำหรับฐานข้อมูลเวกเตอร์ เราจะครอบคลุมการทำงานตรวจสอบการกำหนดค่าและให้ตัวอย่างการใช้งานทั่วไป
สมมติว่าคุณมีไฟล์กำหนดค่าคล้ายกับไฟล์ด้านล่าง
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 ยอดนิยม (เช่น Stripe และ Zendesk) ความเก่งกาจนี้ช่วยให้คุณสามารถรวบรวมข้อมูลจากหลายแหล่งไว้ในฐานข้อมูลเวกเตอร์แบบครบวงจร
การประมวลผลข้อความขั้นสูง : สำหรับข้อมูลที่เป็นข้อความกรอบการใช้งานการใช้การถ่ายภาพและการทับซ้อนที่ซับซ้อน สิ่งนี้ทำให้มั่นใจได้ว่าบริบทความหมายของข้อความจะได้รับการเก็บรักษาไว้เมื่อสร้างการฝังเวกเตอร์ซึ่งนำไปสู่ผลการค้นหาที่แม่นยำยิ่งขึ้น
แบบจำลองการฝังที่ทันสมัย : ระบบรวมกับโมเดลการฝังชั้นนำรวมถึง OpenAI, Cohere, Google Gemini และ Azure OpenAI สิ่งนี้ช่วยให้คุณสามารถเลือกรูปแบบการฝังที่เหมาะกับกรณีการใช้งานและความต้องการด้านคุณภาพของคุณได้ดีที่สุด
การสนับสนุนฐานข้อมูลเวกเตอร์หลายรายการ : ไม่ว่าคุณจะใช้ pinecone, qdrant, ทอ, ซิงเกิล, supabase หรือ lancingb เฟรมเวิร์กนี้ได้ครอบคลุม มันถูกออกแบบมาเพื่อเชื่อมต่อกับฐานข้อมูลเวกเตอร์ยอดนิยมเหล่านี้อย่างราบรื่นช่วยให้คุณเลือกไฟล์ที่เหมาะสมกับความต้องการของคุณมากที่สุด
กำหนดค่าและขยายได้ : เฟรมเวิร์กทั้งหมดสามารถกำหนดค่าได้สูงผ่านไฟล์การกำหนดค่า 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 Serverless ของ Serverless ที่ไม่มีโครงสร้างเพื่อแยกข้อมูลออกจากแหล่งข้อมูลที่ใช้ไฟล์มากมาย
หมายเหตุ: สิ่งนี้ จำกัด อยู่ที่ API Severless ที่ไม่มีโครงสร้างและไม่ควรใช้สำหรับกรอบโอเพนซอร์สที่ไม่มีโครงสร้างของโครงสร้าง
สิ่งนี้ จำกัด อยู่ที่ [pdf, docx, doc, ไฟล์ txt]
ในการใช้ไม่มีโครงสร้างคุณจะต้องมีพารามิเตอร์เพิ่มเติมสามพารามิเตอร์
use_unstructured : (จริง/เท็จ) ตัวบ่งชี้การบอกเฟรมเวิร์กให้ใช้ API ที่ไม่มีโครงสร้างunstructured_api_key : ป้อนคีย์ API ที่ไม่มีโครงสร้างของคุณunstructured_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 ระบุว่าคอลัมน์ใดจากข้อมูลแหล่งที่มาควรใช้เพื่อสร้าง EMBEDDINGS (ใช้กับแหล่งฐานข้อมูลเท่านั้นในตอนนี้):
embed_columns :
- " column1 "
- " column2 "
- " column3 " รายการ embed_columns เป็นสิ่งจำเป็นสำหรับแหล่งข้อมูลที่มีโครงสร้างเท่านั้น (เช่น PostgreSQL, MySQL, Snowflake) สำหรับแหล่งข้อมูลอื่น ๆ ทั้งหมดให้ใช้รายการว่างเปล่า
embed_columns : []เพื่อปกป้องข้อมูลที่ละเอียดอ่อนเช่นปุ่ม API และรหัสผ่านให้พิจารณาใช้ตัวแปรสภาพแวดล้อมหรือระบบการจัดการความลับที่ปลอดภัย จากนั้นคุณสามารถอ้างอิงสิ่งเหล่านี้ในไฟล์กำหนดค่าของคุณ:
embedding :
api_key : ${OPENAI_API_KEY}สิ่งนี้ช่วยให้คุณสามารถเก็บไฟล์การกำหนดค่าไว้ในการควบคุมเวอร์ชันโดยไม่เปิดเผยข้อมูลที่ละเอียดอ่อน
อย่าลืมปรับการกำหนดค่าของคุณตามแหล่งข้อมูลเฉพาะของคุณโมเดลการฝังและฐานข้อมูลเป้าหมาย อ้างถึงเอกสารประกอบสำหรับแต่ละบริการเพื่อให้แน่ใจว่าคุณได้ให้พารามิเตอร์ที่จำเป็นทั้งหมด
เรายินดีต้อนรับการมีส่วนร่วมในฐานข้อมูล ETL สำหรับฐานข้อมูลเวกเตอร์! ไม่ว่าคุณจะแก้ไขข้อบกพร่องการปรับปรุงเอกสารหรือเสนอคุณสมบัติใหม่ความพยายามของคุณจะได้รับการชื่นชม นี่คือวิธีที่คุณสามารถมีส่วนร่วม:
หากคุณพบข้อผิดพลาดหรือมีข้อเสนอแนะสำหรับการปรับปรุงกรอบ ETL:
เรามักจะมองหาวิธีที่จะทำให้เฟรมเวิร์ก ETL ดีขึ้น หากคุณมีความคิด:
เรายินดีต้อนรับคำขอดึงของคุณอย่างแข็งขัน:
mainเพื่อรักษาความสอดคล้องตลอดทั้งโครงการโปรดปฏิบัติตามมาตรฐานการเข้ารหัสเหล่านี้:
การปรับปรุงเอกสารจะได้รับการชื่นชมเสมอ:
หากคุณกำลังคิดที่จะเพิ่มคุณสมบัติใหม่:
source_modsget_source_class ใน source_mods/__init__.pyembedding_modsget_embedding_model ใน embedding_mods/__init__.pytarget_modsget_target_database ใน target_mods/__init__.pyเราสนับสนุนให้ผู้ใช้ทุกคนเข้าร่วมเซิร์ฟเวอร์ Discord ของเราเพื่อร่วมมือกับทีมพัฒนาข้อมูลบริบทและผู้มีส่วนร่วมอื่น ๆ เพื่อแนะนำการอัพเกรดการรวมและปัญหาใหม่