Vectoretl: إطار عمل ETL خفيف الوزن لقواعد بيانات المتجهات
VectorETL حسب بيانات السياق هو إطار معياري مصمم للمساعدة في معالجة البيانات ومهندسي 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 (المستخلص ، التحويل ، التحميل) أداة قوية ومرنة مصممة لتبسيط عملية استخراج البيانات من مصادر مختلفة ، وتحويلها إلى ضمانات متجه ، وتحميل هذه التضمين في مجموعة من قواعد بيانات المتجهات.
إنه مبني مع النموذج ، وقابلية التوسع ، وسهولة الاستخدام في الاعتبار ، مما يجعله حلاً مثاليًا للمؤسسات التي تتطلع إلى الاستفادة من قوة البحث في المتجهات في البنية التحتية للبيانات.
استخراج البيانات متعددة الاستخدامات : يدعم الإطار مجموعة واسعة من مصادر البيانات ، بما في ذلك قواعد البيانات التقليدية ، وحلول التخزين السحابية (مثل Amazon S3 و Google Cloud Storage) ، ومنصات SaaS الشهيرة (مثل Stripe و Zendesk). يتيح لك هذا التعدد استخدام البيانات من مصادر متعددة في قاعدة بيانات متجه موحدة.
معالجة النصوص المتقدمة : بالنسبة للبيانات النصية ، يقوم الإطار بتنفيذ تقنيات متطورة ومتداخلة. هذا يضمن الحفاظ على السياق الدلالي للنص عند إنشاء تضمينات متجه ، مما يؤدي إلى نتائج بحث أكثر دقة.
نماذج التضمين الحديثة : يتكامل النظام مع نماذج التضمين الرائدة ، بما في ذلك Openai و Cohere و Google Gemini و Azure Openai. يتيح لك ذلك اختيار نموذج التضمين الذي يناسب حالة الاستخدام المحددة ومتطلبات الجودة.
دعم قاعدة بيانات المتجهات المتعددة : سواء كنت تستخدم Pinecone أو Qdrant أو Weaviate أو Singlestore أو supabase أو locentb ، فقد غطي هذا الإطار. إنه مصمم للتفاعل بسلاسة مع قواعد بيانات المتجهات الشهيرة هذه ، مما يتيح لك اختيار القاعدة التي تناسب احتياجاتك.
قابلة للتكوين وقابلة للتكوين : الإطار بأكمله قابل للتكوين بشكل كبير من خلال ملفات تكوين 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 ، يمكن للمستخدمين الآن الاستفادة من واجهة برمجة تطبيقات Unsstractless بدون هيكل لاستخراج البيانات بكفاءة من العديد من المصادر القائمة على الملفات.
ملاحظة: يقتصر هذا على واجهة برمجة التطبيقات غير المهيكلة بلا منظمة ويجب عدم استخدامها في إطار المصدر المفتوح غير المنظم
يقتصر هذا على ملفات [PDF ، DOCX ، DOC ، TXT]
من أجل استخدام غير منظم ، ستحتاج إلى ثلاثة معلمات إضافية
use_unstructured : (صحيح/خطأ) مؤشر يخبر الإطار باستخدام واجهة برمجة التطبيقات غير المنظمةunstructured_api_key : أدخل مفتاح واجهة برمجة التطبيقات غير المهيكلة الخاصة بك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 الأعمدة من البيانات المصدر التي يجب استخدامها لإنشاء التضمينات (ينطبق فقط على مصادر قاعدة البيانات في الوقت الحالي):
embed_columns :
- " column1 "
- " column2 "
- " column3 " قائمة embed_columns مطلوبة فقط لمصادر البيانات المنظمة (على سبيل المثال postgresql ، mysql ، ندفة الثلج). لجميع المصادر الأخرى ، استخدم قائمة فارغة
embed_columns : []لحماية المعلومات الحساسة مثل مفاتيح API وكلمات المرور ، فكر في استخدام متغيرات البيئة أو نظام إدارة الأسرار الآمن. يمكنك بعد ذلك الرجوع إلى هذه في ملف التكوين الخاص بك:
embedding :
api_key : ${OPENAI_API_KEY}يتيح لك ذلك الحفاظ على ملفات التكوين الخاصة بك في التحكم في الإصدار دون فضح البيانات الحساسة.
تذكر ضبط التكوين الخاص بك استنادًا إلى مصادر البيانات المحددة ، ونماذج التضمين ، وقواعد البيانات المستهدفة. ارجع إلى وثائق كل خدمة للتأكد من أنك تقدم جميع المعلمات المطلوبة.
نرحب بالمساهمات في إطار 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 الخاص بنا للتعاون مع فريق تطوير بيانات السياق وغيره من المساهمين من أجل اقتراح ترقيات وتكاملات وقضايا جديدة.