
بناء بنية خلفية قابلة للتوسع لنظام الاسترجاع والتوليد (RAG) باستخدام مهام Cloud Run و AlloyDB.
ملخص سريع
يتناول المقال تحديات توسيع أنظمة RAG من نطاق الاختبار إلى الإنتاج، حيث تفشل الحلقات البسيطة بلغة Python عند التعامل مع ملايين السجلات بسبب قيود معدل استدعاء APIs وزمن الاستجابة. يقدم الحل المقترح استخدام Cloud Run Jobs للمعالجة المتوازية، ونموذج text-embedding-005 من Vertex AI، وتخزين المتجهات في AlloyDB لـ PostgreSQL باستخدام pgvector.
إن بناء نظام توليد نصوص مُعزز بالاسترجاع (RAG) يبدو أمرًا سهلاً مع وجود العديد من البرامج التعليمية المتاحة. ببساطة، تقوم بمعالجة بضع مئات من المنتجات باستخدام نموذج تضمين (embedding model) وتخزينها في قاعدة بيانات متجهة. هذا النظام يعمل بشكل مثالي على جهازك أو في بيئة الاختبار.
تبدأ المشاكل عندما ينتقل نظامك إلى نطاق الإنتاج. عندما يتضاعف حجم مجموعة البيانات من بضع مئات إلى ملايين المنتجات، فإن الحلقة البسيطة بلغة Python التي كتبتها لإنشاء التضمينات تواجه قيودًا. بسبب زمن الاستجابة للشبكة والقيود المفروضة على معدل استدعاء واجهات برمجة التطبيقات (APIs) كل بضع ثوانٍ، فإن مهمة كانت تستغرق خمس دقائق تتحول بسرعة إلى عملية معقدة تستغرق ساعات وتعيق سير عملك بأكمله.
يتطلب التوسع الفعال الانتقال إلى معالجة متوازية. في هذا المقال، سنستكشف كيفية بناء نظام RAG قوي ومناسب للاستخدام الصناعي باستخدام BigQuery و Cloud Run Jobs و Vertex AI و AlloyDB لـ PostgreSQL.
ستتعلم كيفية:
- توفير البنية التحتية باستخدام Terraform.
- موازاة عملية إنشاء التضمينات باستخدام Cloud Run Jobs.
- استخدام حزمة تطوير البرامج (SDK) الخاصة بـ google-genai لنموذج Vertex AI text-embedding-005.
- تخزين واستعلام عن المتجهات في AlloyDB لـ PostgreSQL باستخدام pgvector.
ملاحظة: لقد اخترت استخدام AlloyDB في هذا المثال، ولكن يمكن استخدام أي قاعدة بيانات PostgreSQL أخرى تدعم امتداد pgvector، على سبيل المثال، يمكنك التفكير في استخدام Cloud SQL لـ PostgreSQL.
قبل أن نتعمق في التعليمات البرمجية، دعونا نناقش بإيجاز المكونات الأساسية التي تشكل هذا الحل القائم على الذكاء الاصطناعي بدون خوادم (serverless).
البنية التحتية القوية والمناسبة للاستخدام الصناعي:
تم تصميم مسار العمل الخاص بنا ليكون قابلاً للتوسع بدرجة كبيرة وفعالًا من حيث استهلاك الموارد. نحن نستخدم خدمات Google Cloud التالية:
- BigQuery: مصدر الحقيقة لدينا، والذي يحتوي على ملايين سجلات المنتجات.
- Cloud Run Jobs: منصة حوسبة بدون خوادم تسمح لنا بتشغيل مئات المهام المتوازية.
- Vertex AI (text-embedding-005): أحدث نموذج تضمين متطور من Google.
- AlloyDB لـ PostgreSQL: قاعدة بيانات مصممة للاستخدام المؤسسي مع دعم مدمج لـ pgvector لأداء بحث المتجهات عالي.
يوضح الرسم التخطيطي أدناه البنية العامة لمسار عمل RAG الخاص بنا:
التنفيذ:
دعونا نستعرض عملية الإعداد والتنفيذ خطوة بخطوة. جميع التعليمات البرمجية لهذا المشروع متاحة في مستودع RAG Migration.
تحضير البيئة:
أولاً، قم بتكوين واجهة سطر الأوامر gcloud، وقم باستنساخ المستودع، وقم بإنشاء بيئة افتراضية مع التبعيات.
الخطوة 1 - قم بتعيين مشروعك الافتراضي:
الخطوة 2 - قم بتكوين المنطقة الافتراضية لـ Cloud Run:
الخطوة 3 - استنساخ مستودع التعليمات البرمجية:
الخطوة 4 - قم بإنشاء بيئة افتراضية وتثبيت التبعيات:
البنية التحتية باستخدام Terraform:
نحن نستخدم Terraform لتوفير مجموعة AlloyDB ومستودع Artifact Registry و Cloud Run Job. انتقل إلى الدليل 01-generation/infra/terraform وقم بتطبيق التكوين:
ملاحظة: يقوم الخيار -out tfplan بحفظ الخطة في ملف باسم tfplan، ويقوم الأمر terraform apply tfplan بتطبيق تلك الخطة المحددة. هذه ممارسة جيدة لضمان اتساق عمليات التخطيط والتطبيق.
الاتصال بـ AlloyDB:
للتفاعل مع AlloyDB، يجب على التطبيق إنشاء اتصال آمن.
بالاعتماد على مكان تشغيل الكود، تختلف الطريقة المتبعة:
التطوير المحلي: لتشغيل البرامج النصية أو اختبار الاستعلامات من جهازك المحلي، استخدم وكيل مصادقة AlloyDB. يوفر هذا الوكيل وصولاً آمنًا إلى مثيلك دون الحاجة إلى ترخيص عنوان IP المحلي الخاص بك للوصول إلى مثيل AlloyDB.
مهام Cloud Run: عند التشغيل في Cloud Run، يتصل البرنامج النصي (المهام) بمثيل AlloyDB عبر الشبكة الخاصة (VPC). في هذا الإعداد، نقوم بتمرير كلمة مرور قاعدة البيانات عبر متغير بيئة إلى تكوين مهمة Cloud Run.
ملاحظة: بالنسبة لأحمال العمل الإنتاجية، يوصى بشدة باستخدام مدير الأسرار في Google Cloud (Google Cloud Secret Manager) للتعامل مع البيانات الحساسة مثل كلمات مرور قاعدة البيانات، بدلاً من تمريرها كمتغيرات بيئة نصية عادية.
المنطق الأساسي
تم تصميم البرنامج النصي للعامل (01-generation/main.py) للعمل كمهمة فردية داخل مهمة Cloud Run. يستخدم متغير البيئة CLOUD_RUN_TASK_INDEX لحساب الجزء المحدد من البيانات التي يعمل عليها.
يستخدم منطق توليد التضمينات (01-generation/src/embedder.py) حزمة تطوير البرمجيات (SDK) الخاصة بـ google-genai:
البناء والنشر
نقوم بوضع التطبيق في حاوية باستخدام ملف Dockerfile المرفق ونقوم بنشره كمهمة Cloud Run. يقوم البرنامج النصي deploy.sh بأتمتة هذه العملية، ويمكنك تشغيله عن طريق تنفيذ الأمر التالي:
عند الانتهاء، يجب أن ترى:
التشغيل والمراقبة
الآن يمكنك بدء المشغل عن طريق تنفيذ الأمر التالي:
يوفر المشغل ملاحظات في الوقت الفعلي حول حالة المهمة، والتي يمكنك أيضًا مراقبتها في وحدة تحكم Google Cloud.
تهانينا 🎉 لقد قمت بنجاح ببناء وتشغيل مسار توليد تضمينات متوازي!
لبيئة الإنتاج، أوصي بإنشاء فهرس ScaNN لتحسين سرعة الاستعلامات الخاصة بك. يرجى الرجوع إلى الوثائق المرتبطة لمعرفة المزيد حول ذلك.
الاختبار باستخدام واجهة مستخدم البحث الدلالي
لرؤية التضمينات قيد التشغيل، يمكنك تشغيل واجهة مستخدم البحث الدلالي Next.js محليًا.
تشغيل الواجهة
انتقل إلى دليل الواجهة وقم بتكوين البيئة:
قم بتحرير ملف .env لتضمين معرف مشروع Google Cloud (PROJECT_ID) وكلمة مرور قاعدة بيانات AlloyDB (DB_PASSWORD) التي استخدمتها أثناء نشر Terraform. اضبط DB_HOST على 127.0.0.1 لتوجيه الاستعلامات عبر وكيل مصادقة AlloyDB.
قم بتثبيت التبعيات:
ابدأ وكيل مصادقة AlloyDB (في نافذة طرفية منفصلة):
ابدأ خادم التطوير:
انتقل إلى http://localhost:3000 للتفاعل مع بوابة البحث. يمكنك الآن تشغيل استعلامات باللغة الطبيعية مباشرةً على كتالوج منتجاتك!
شاهدها وهي تعمل
شاهد كيف تُرجع استعلامات اللغة الطبيعية نتائج ذات صلة عالية يتم تعيينها عبر نموذج text-embedding-005 في الوقت الفعلي.
ملخص
الآن لديك أساس قابل للتوسع وغير يعتمد على الخوادم لنظام RAG الخاص بك. باستخدام مهام Cloud Run، لقد حولت عنق الزجاجة إلى عملية متوازية للغاية قادرة على التعامل مع ملايين السجلات.
هل أنت مستعد للمضي قدمًا؟
تحقق من الكود المصدري الكامل على GitHub.
تعرف المزيد عن مهام Cloud Run.
تعرف المزيد عن AlloyDB و pgvector.
تعلم كيفية إنشاء فهرس ScaNN للتضمينات الخاصة بك.
تعرف المزيد عن واجهات برمجة تطبيقات التضمينات على VertexAI.
في المنشور التالي، سنتعمق في تجربة الصفر التوقف (Zero-Downtime).
تحديث نماذج المتجهات: كيفية ترقية نماذج المتجهات الخاصة بك دون إيقاف خدمة البحث.
شكراً لقراءتكم.
إذا وجدت هذا المقال مفيداً، يرجى التفكير في إعطاء 50 تصفيقاً لهذه المقالة عن طريق الضغط باستمرار على زر التصفيق 👏. سيساعد ذلك الآخرين في العثور عليها. يمكنك أيضاً مشاركتها مع أصدقائك على وسائل التواصل الاجتماعي.
لماذا يهمّك هذا؟
يوفر هذا المقال دليلاً عملياً وشاملاً للمهندسين العرب المهتمين ببناء أنظمة ذكاء اصطناعي قابلة للتوسع على Google Cloud، مع التركيز على البنية التحتية بدون خوادم وتجنب الاختناقات الشائعة عند الانتقال من مرحلة التطوير إلى الإنتاج.
هل أعجبك هذا المقال؟
اشترك في النشرة الأسبوعية واستقبل أهم أخبار الذكاء الاصطناعي مباشرةً في بريدك
اشترك مجاناً