تحميل البيانات بكفاءة إلى ميلفوس باستخدام VectorETL
في هذا البرنامج التعليمي، سنستكشف كيفية تحميل البيانات بكفاءة في Milvus باستخدام VectorETL، وهو إطار عمل خفيف الوزن لعمليات ETL مصمم لقواعد البيانات المتجهة. يعمل VectorETL على تبسيط عملية استخراج البيانات من مصادر مختلفة، وتحويلها إلى تضمينات متجهة باستخدام نماذج الذكاء الاصطناعي، وتخزينها في Milvus لاسترجاعها بسرعة وقابلية للتطوير. بحلول نهاية هذا البرنامج التعليمي، سيكون لديك خط أنابيب ETL عامل يسمح لك بدمج وإدارة أنظمة البحث المتجهية بسهولة. دعونا نبدأ!
التحضير
التبعية والبيئة
$ pip install --upgrade vector-etl pymilvus
إذا كنت تستخدم Google Colab، لتمكين التبعيات المثبتة للتو، قد تحتاج إلى إعادة تشغيل وقت التشغيل (انقر على قائمة "وقت التشغيل" في أعلى الشاشة، وحدد "إعادة تشغيل الجلسة" من القائمة المنسدلة).
يدعم VectorETL العديد من مصادر البيانات، بما في ذلك Amazon S3 و Google Cloud Storage و Local File وغيرها. يمكنك الاطلاع على القائمة الكاملة للمصادر المدعومة هنا. في هذا البرنامج التعليمي، سنركز في هذا البرنامج التعليمي على Amazon S3 كمثال لمصدر البيانات.
سنقوم بتحميل المستندات من Amazon S3. لذلك، تحتاج إلى إعداد AWS_ACCESS_KEY_ID و AWS_SECRET_ACCESS_KEY كمتغيرات بيئة للوصول الآمن إلى دلو S3 الخاص بك. بالإضافة إلى ذلك، سوف نستخدم نموذج التضمين الخاص بـ OpenAI text-embedding-ada-002 لتوليد تضمينات للبيانات. يجب عليك أيضًا إعداد مفتاح api OPENAI_API_KEY كمتغير بيئة.
import os
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
os.environ["AWS_ACCESS_KEY_ID"] = "your-aws-access-key-id"
os.environ["AWS_SECRET_ACCESS_KEY"] = "your-aws-secret-access-key"
سير العمل
تحديد مصدر البيانات (Amazon S3)
في هذه الحالة، نحن نقوم باستخراج المستندات من دلو Amazon S3. يسمح لنا VectorETL بتحديد اسم الدلو، ومسار الملفات، ونوع البيانات التي نعمل معها.
source = {
"source_data_type": "Amazon S3",
"bucket_name": "my-bucket",
"key": "path/to/files/",
"file_type": ".csv",
"aws_access_key_id": os.environ["AWS_ACCESS_KEY_ID"],
"aws_secret_access_key": os.environ["AWS_SECRET_ACCESS_KEY"],
}
تكوين نموذج التضمين (OpenAI)
بمجرد إعداد مصدر البيانات لدينا، نحتاج إلى تحديد نموذج التضمين الذي سيحول بياناتنا النصية إلى تضمينات متجهة. هنا، نستخدم OpenAI text-embedding-ada-002 في هذا المثال.
embedding = {
"embedding_model": "OpenAI",
"api_key": os.environ["OPENAI_API_KEY"],
"model_name": "text-embedding-ada-002",
}
إعداد ميلفوس كقاعدة البيانات المستهدفة
نحن بحاجة إلى تخزين التضمينات التي تم إنشاؤها في Milvus. هنا، نحدد معلمات اتصال Milvus الخاصة بنا باستخدام Milvus Lite.
target = {
"target_database": "Milvus",
"host": "./milvus.db", # os.environ["ZILLIZ_CLOUD_PUBLIC_ENDPOINT"] if using Zilliz Cloud
"api_key": "", # os.environ["ZILLIZ_CLOUD_TOKEN"] if using Zilliz Cloud
"collection_name": "my_collection",
"vector_dim": 1536, # 1536 for text-embedding-ada-002
}
بالنسبة إلى host و api_key:
يعد تعيين
hostكملف محلي، على سبيل المثال./milvus.db، وتركapi_keyفارغًا هو الطريقة الأكثر ملاءمة، حيث يستخدم تلقائيًا ملف Milvus Lite لتخزين جميع البيانات في هذا الملف.إذا كان لديك حجم كبير من البيانات، يمكنك إعداد خادم Milvus أكثر أداءً على docker أو kubernetes. في هذا الإعداد، يُرجى استخدام الخادم uri، على سبيل المثال
http://localhost:19530، كـhostواتركapi_keyفارغًا.إذا كنت ترغب في استخدام Zilliz Cloud، الخدمة السحابية المدارة بالكامل لـ Milvus، اضبط
hostوapi_key، والتي تتوافق مع نقطة النهاية العامة ومفتاح Api في Zilliz Cloud.
تحديد الأعمدة للتضمين
الآن، نحتاج إلى تحديد الأعمدة من ملفات CSV التي يجب تحويلها إلى تضمينات. يضمن ذلك معالجة الحقول النصية ذات الصلة فقط، مما يحسّن الكفاءة والتخزين على حد سواء.
embed_columns = ["col_1", "col_2", "col_3"]
إنشاء خط أنابيب VectorETL وتنفيذه
مع وجود جميع التكوينات في مكانها الصحيح، نقوم الآن بتهيئة خط أنابيب ETL، وإعداد تدفق البيانات، وتنفيذه.
from vector_etl import create_flow
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 شامل لنقل المستندات من Amazon S3 إلى Milvus باستخدام VectorETL. يتسم VectorETL بالمرونة في مصادر البيانات، بحيث يمكنك اختيار مصادر البيانات التي تريدها بناءً على احتياجات تطبيقك المحددة. وبفضل تصميم VectorETL المعياري، يمكنك بسهولة توسيع خط الأنابيب هذا لدعم مصادر البيانات الأخرى، وتضمين النماذج، مما يجعله أداة قوية لسير عمل الذكاء الاصطناعي وهندسة البيانات!