1. قبل البدء
في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام Genkit لدمج الذكاء الاصطناعي التوليدي في تطبيقك. Genkit هو إطار عمل مفتوح المصدر يساعدك في إنشاء تطبيقات مستندة إلى الذكاء الاصطناعي وجاهزة للنشر ومراقبتها.
تم تصميم Genkit لمطوّري التطبيقات لمساعدتهم في دمج إمكانات الذكاء الاصطناعي الفعّالة بسهولة في تطبيقاتهم باستخدام أنماط ونماذج مألوفة. وقد صمَّمه فريق Firebase بالاستفادة من خبرتنا في إنشاء أدوات يستخدمها الملايين من المطوّرين حول العالم.
المتطلبات الأساسية
- الإلمام بـ Firestore وNode.js وTypeScript
أهداف الدورة التعليمية
- كيفية إنشاء تطبيقات أكثر ذكاءً باستخدام ميزات البحث المتقدّمة عن التشابه بين المتّجهات في Firestore
- كيفية تنفيذ الذكاء الاصطناعي التوليدي عمليًا في تطبيقاتك باستخدام Genkit
- جهِّز الحلّ للنشر والدمج.
المتطلبات
- متصفّح من اختيارك، مثل Google Chrome
- بيئة تطوير تتضمّن أداة تعديل الرموز البرمجية ونافذة طرفية
- حساب Google لإنشاء مشروعك على Firebase وإدارته
2. مراجعة تطبيقات الويب وخدمات السحابة الإلكترونية المستخدَمة
في هذا القسم، ستراجع تطبيق الويب الذي ستنشئه باستخدام هذا الدرس العملي، كما ستتعرّف على الخدمات السحابية التي ستستخدمها.
تطبيق الويب
في هذا الدرس التطبيقي حول الترميز، ستعمل في قاعدة الرموز لتطبيق يُسمى Compass، وهو تطبيق للتخطيط للعطلات. يمكن للمستخدمين اختيار وجهة، والاطّلاع على الأنشطة المتوفرة في الوجهة، وإنشاء برنامج رحلة.
في هذا الدرس التطبيقي، ستنفّذ ميزتَين جديدتَين تهدفان إلى تحسين تفاعل المستخدمين مع الصفحة الرئيسية للتطبيق. تستند كلتا الميزتين إلى الذكاء الاصطناعي التوليدي:
- يعرض التطبيق حاليًا قائمة ثابتة بالوجهات. ستغيّرها لتصبح ديناميكية.
- ستنفّذ خطة سفر يتم ملؤها تلقائيًا على أمل زيادة معدّل الاحتفاظ بالمستخدمين.
الخدمات المستخدَمة
في هذا الدرس العملي، ستستخدم العديد من خدمات وميزات Firebase وCloud، وسيتم توفير معظم الرموز البرمجية الأولية لك. يحتوي الجدول التالي على الخدمات التي ستستخدمها وأسباب استخدامها.
الخدمة | سبب الاستخدام |
يمكنك استخدام Genkit لإضافة الذكاء الاصطناعي التوليدي إلى تطبيق Node.js أو Next.js. | |
يمكنك تخزين البيانات في Cloud Firestore، ثم استخدامها للبحث عن التشابه بين المتجهات. | |
يمكنك استخدام النماذج الأساسية من Vertex AI (مثل Gemini) لتشغيل ميزات الذكاء الاصطناعي. | |
يمكنك اختياريًا استخدام ميزة "استضافة التطبيقات" الجديدة والمبسّطة في Firebase لعرض تطبيقك الديناميكي على الويب باستخدام Next.js (المرتبط بمستودع GitHub). |
3- إعداد بيئة التطوير
التحقّق من إصدار Node.js
- في نافذة الأوامر، تأكَّد من تثبيت الإصدار 20.0.0 أو إصدار أحدث من Node.js:
node -v
- إذا لم يكن لديك الإصدار 20.0.0 أو إصدار أحدث من Node.js، نزِّل أحدث إصدار يتطلّب دعمًا على المدى الطويل وثبِّته.
الحصول على رمز المصدر للدرس التطبيقي حول الترميز
إذا كان لديك حساب على GitHub:
- أنشئ مستودعًا جديدًا باستخدام النموذج من github.com/FirebaseExtended/codelab-ai-genkit-rag
- أنشئ نسخة محلية من مستودع GitHub الخاص ببرنامج التدريب العملي الذي أنشأته للتو:
git clone https://github.com/<your-github-handle>/codelab-ai-genkit-rag
إذا لم يكن git مثبّتًا أو كنت تفضّل عدم إنشاء مستودع جديد:
مراجعة بنية المجلد
على جهازك المحلي، ابحث عن المستودع المستنسخ وراجِع بنية المجلد:
المجلد | الوصف |
| أداة سطر أوامر مساعدة لتعبئة مجموعة Firestore مسبقًا بسرعة |
*كل ما عدا ذلك | رمز تطبيق الويب Next.js |
يتضمّن المجلد الجذر ملف README.md
يوفّر طريقة سريعة لبدء تشغيل تطبيق الويب باستخدام تعليمات مبسطة. ومع ذلك، إذا كنت مبتدئًا، عليك إكمال هذا الدرس العملي (بدلاً من البدء السريع) لأنّه يتضمّن المجموعة الأكثر شمولاً من التعليمات.
إذا لم تكن متأكّدًا مما إذا كنت قد طبّقت الرمز بشكل صحيح كما هو موضّح في هذا الدرس العملي، يمكنك العثور على رمز الحلّ في فرع end
git.
تثبيت Firebase CLI
- تأكَّد من تثبيت واجهة سطر الأوامر (CLI) في Firebase وأنّ إصدارها هو 13.6 أو إصدار أحدث:
firebase --version
- إذا كان لديك واجهة سطر الأوامر (CLI) من Firebase مثبَّتة، ولكنّها ليست الإصدار 13.6 أو إصدارًا أحدث، يمكنك تحديثها باتّباع الخطوات التالية:
npm update -g firebase-tools
- إذا لم تكن أداة سطر الأوامر في Firebase مثبَّتة، ثبِّتها باتّباع الخطوات التالية:
npm install -g firebase-tools
إذا تعذّر عليك تحديث أو تثبيت واجهة سطر الأوامر في Firebase بسبب أخطاء في الأذونات، يمكنك الاطّلاع على مستندات npm أو استخدام خيار تثبيت آخر.
تسجيل الدخول إلى Firebase
- في وحدة التحكّم الطرفية، سجِّل الدخول إلى Firebase:
إذا كان الجهاز الطرفي يشير إلى أنّك سجّلت الدخول إلى Firebase من قبل، يمكنك الانتقال إلى قسم إعداد مشروعك على Firebase في هذا الدرس العملي.firebase login
- في نافذة الأوامر، أدخِل
Y
أوN
حسب ما إذا كنت تريد أن يجمع Firebase البيانات. (يمكنك استخدام أيّ من الخيارَين في هذا الدرس التطبيقي حول الترميز) - في المتصفّح، اختَر حسابك على Google وانقر على السماح.
تثبيت gcloud CLI من Google Cloud
- ثبِّت gcloud CLI.
- في نافذة الوحدة الطرفية، سجِّل الدخول إلى Google Cloud:
gcloud auth login
4. إعداد مشروعك على Firebase
في هذا القسم، عليك إعداد مشروع على Firebase وتسجيل تطبيق ويب على Firebase فيه. ستفعّل أيضًا بعض الخدمات التي يستخدمها تطبيق الويب النموذجي في وقت لاحق من هذا الدرس التطبيقي حول الترميز.
يتم تنفيذ جميع الخطوات الواردة في هذا القسم في وحدة تحكّم Firebase.
إنشاء مشروع Firebase
- سجِّل الدخول إلى وحدة تحكّم Firebase باستخدام حساب Google نفسه الذي استخدمته في الخطوة السابقة.
- انقر على الزر لإنشاء مشروع جديد، ثم أدخِل اسم المشروع (على سبيل المثال،
Compass Codelab
).
- انقر على متابعة.
- إذا طُلب منك ذلك، راجِع بنود Firebase واقبلها، ثم انقر على متابعة.
- (اختياري) فعِّل ميزة "المساعدة المستندة إلى الذكاء الاصطناعي" في وحدة تحكّم Firebase (المعروفة باسم "Gemini في Firebase").
- في هذا الدرس العملي، لا تحتاج إلى "إحصاءات Google"، لذا أوقِف خيار "إحصاءات Google".
- انقر على إنشاء مشروع، وانتظِر إلى أن يتم توفير مشروعك، ثم انقر على متابعة.
إضافة تطبيق ويب إلى مشروع Firebase
- انتقِل إلى شاشة نظرة عامة على المشروع في مشروعك على Firebase، ثمّ انقر على
الويب.
- في مربّع النص اسم التطبيق، أدخِل اسمًا مميزًا للتطبيق، مثل
My Compass Codelab App
. يمكنك ترك مربّع الاختيار الخاص بإعداد Firebase Hosting بدون وضع علامة فيه، لأنّك ستُعدّ خدمة استضافة بشكل اختياري في الخطوة الأخيرة من هذا الدرس البرمجي. - انقر على تسجيل التطبيق > المتابعة إلى وحدة التحكّم.
رائع. لقد سجّلت الآن تطبيق ويب في مشروع Firebase الجديد.
ترقية خطة أسعار Firebase
لاستخدام Genkit وVertex AI (وخدمات السحابة الإلكترونية الأساسية)، يجب أن يكون مشروعك على Firebase ضمن خطة التسعير "الدفع حسب الاستخدام" (Blaze)، ما يعني أنّه مرتبط بحساب Cloud Billing.
- يتطلّب حساب الفوترة في Cloud طريقة دفع، مثل بطاقة الائتمان.
- إذا كنت حديث العهد باستخدام Firebase وGoogle Cloud، تحقَّق ممّا إذا كنت مؤهَّلاً للحصول على رصيد بقيمة 300 دولار أمريكي وحساب فوترة على Cloud في الفترة التجريبية المجانية.
- إذا كنت تجري هذا الدرس العملي المبرمَج كجزء من حدث، اسأل المنظِّم عمّا إذا كانت هناك أي أرصدة في السحابة الإلكترونية متاحة.
مزيد من المعلومات حول أسعار Vertex AI
لترقية مشروعك إلى خطة Blaze، اتّبِع الخطوات التالية:
- في "وحدة تحكّم Firebase"، اختَر ترقية خطتك.
- اختَر خطة Blaze. اتّبِع التعليمات الظاهرة على الشاشة لربط حساب فوترة على Cloud بمشروعك.
إذا احتجت إلى إنشاء حساب فوترة على Cloud كجزء من عملية الترقية هذه، قد تحتاج إلى الرجوع إلى مسار الترقية في وحدة تحكّم Firebase لإكمال عملية الترقية.
إعداد Cloud Firestore
- في اللوحة اليمنى من "وحدة تحكّم Firebase"، وسِّع إنشاء، ثم اختَر قاعدة بيانات Firestore.
- انقر على إنشاء قاعدة بيانات.
- اترك معرّف قاعدة البيانات مضبوطًا على
(default)
. - اختَر موقعًا لقاعدة البيانات، ثم انقر على التالي.
بالنسبة إلى تطبيق حقيقي، عليك اختيار موقع جغرافي قريب من المستخدمين. - انقر على البدء في وضع الاختبار. اقرأ بيان إخلاء المسؤولية عن قواعد الأمان.
لا توزّع تطبيقًا أو تعرضه للجميع بدون إضافة "قواعد الأمان" لقاعدة البيانات. - انقر على إنشاء.
تفعيل Vertex AI
استخدِم واجهة سطر الأوامر gcloud
لإعداد Vertex AI. بالنسبة إلى جميع الأوامر الواردة في هذه الصفحة، احرص على استبدال YOUR_PROJECT_ID
برقم تعريف مشروعك على Firebase.
- في نافذة الأوامر، اضبط المشروع التلقائي لحزمة تطوير البرامج (SDK) من Google Cloud:
gcloud config set project YOUR_PROJECT_ID
- إذا ظهرت لك رسالة تحذير تقول "تحذير: مشروعك النشط لا يتطابق مع مشروع الحصة في ملف Application Default Credentials المحلي. قد يؤدي ذلك إلى حدوث مشاكل غير متوقّعة في الحصة."، ثم نفِّذ الأمر التالي لضبط مشروع الحصة:
gcloud auth application-default set-quota-project YOUR_PROJECT_ID
- فعِّل خدمة Vertex AI في مشروعك:
gcloud services enable aiplatform.googleapis.com
5- إعداد تطبيق الويب
لتشغيل تطبيق الويب، عليك تنفيذ الأوامر في الوحدة الطرفية وإضافة الرمز البرمجي في محرّر الرموز البرمجية. بالنسبة إلى جميع الأوامر الواردة في هذه الصفحة، احرص على استبدال YOUR_PROJECT_ID
برقم تعريف مشروعك على Firebase.
إعداد Firebase CLI لاستهداف مشروعك
- في نافذة الأوامر الطرفية، انتقِل إلى الدليل الجذري لمشروع الدرس العملي.
- لجعل واجهة سطر الأوامر في Firebase تنفّذ جميع الأوامر في مشروعك على Firebase، نفِّذ الأمر التالي:
firebase use YOUR_PROJECT_ID
استيراد نموذج البيانات إلى Firestore
للبدء بسرعة، يوفّر لك هذا الدرس العملي نموذج بيانات تم إنشاؤه مسبقًا في Firestore.
- للسماح لقاعدة الرموز البرمجية المحلية بتشغيل الرموز التي تستخدم عادةً حساب خدمة، شغِّل الأمر التالي في الوحدة الطرفية:
سيؤدي هذا إلى فتح علامة تبويب جديدة في المتصفّح. سجِّل الدخول باستخدام حساب Google نفسه الذي استخدمته في الخطوات السابقة.gcloud auth application-default login
- لاستيراد نموذج بيانات Firestore، نفِّذ الأوامر التالية:
cd load-firestore-data npm ci node index.js YOUR_PROJECT_ID cd ..
- تأكَّد من أنّه تمت إضافة البيانات بنجاح إلى قاعدة البيانات من خلال الانتقال إلى قسم Firestore في مشروعك على Firebase في وحدة تحكّم Firebase.من المفترض أن يظهر لك مخطط البيانات التي تم استيرادها ومحتوياتها.
ربط تطبيق الويب بمشروعك على Firebase
يجب ربط قاعدة رموز تطبيق الويب بمشروع Firebase الصحيح للاستفادة من خدماته، مثل قاعدة البيانات. لإجراء ذلك، عليك إضافة إعدادات Firebase إلى قاعدة الرموز البرمجية لتطبيقك. يتضمّن هذا الإعداد قيمًا أساسية، مثل رقم تعريف مشروعك ومفتاح واجهة برمجة التطبيقات ورقم تعريف التطبيق، بالإضافة إلى قيم أخرى تتيح لتطبيقك التفاعل مع Firebase.
- احصل على إعدادات Firebase لتطبيقك:
- في "وحدة تحكّم Firebase"، انتقِل إلى مشروعك على Firebase.
- في اللوحة اليمنى، انقر على رمز الترس بجانب نظرة عامة على المشروع، ثم اختَر إعدادات المشروع.
- في بطاقة "تطبيقاتك"، اختَر تطبيق الويب.
- ضمن قسم "إعداد حزمة تطوير البرامج (SDK) وضبطها"، انقر على الخيار Config.
- انسخ المقتطف. يبدأ بـ
const firebaseConfig ...
.
- أضِف إعدادات Firebase إلى قاعدة رموز تطبيق الويب:
- في محرّر الرموز، افتح الملف
src/lib/genkit/genkit.config.ts
. - استبدِل القسم ذي الصلة بالرمز الذي نسخته.
- احفظ الملف.
- في محرّر الرموز، افتح الملف
معاينة تطبيق الويب في المتصفّح
- في نافذة الأوامر، ثبِّت العناصر التابعة ثم شغِّل تطبيق الويب:
npm install npm run dev:next
- في المتصفّح، انتقِل إلى عنوان URL للاستضافة المستضافة محليًا لعرض تطبيق الويب. على سبيل المثال، في معظم الحالات، يكون عنوان URL هو http://localhost:3000/ أو عنوانًا مشابهًا.
Compass هو تطبيق Next.js يستخدم مكوّنات خادم React، وهذه هي الصفحة الرئيسية.
انقر على العثور على رحلة أحلامي. يمكنك ملاحظة أنّه يعرض بعض البيانات المرمّزة لبعض الوجهات الثابتة:
يمكنك استكشافها. عندما تكون مستعدًا للمتابعة، انقر على زر الصفحة الرئيسية (في أعلى يسار الشاشة).
6. التعمّق في الذكاء الاصطناعي التوليدي باستخدام Genkit
أنت الآن على استعداد للاستفادة من إمكانات الذكاء الاصطناعي التوليدي في تطبيقك. سيرشدك هذا القسم من الدرس التطبيقي حول الترميز إلى كيفية تنفيذ ميزة تقترح وجهات استنادًا إلى الأفكار التي يقدّمها المستخدم. ستستخدم Genkit وVertex AI من Google Cloud كمزوّد للنموذج التوليدي (ستستخدم Gemini).
يمكن أن يخزّن Genkit حالة التتبُّع والتدفّق (ما يتيح لك فحص نتيجة تنفيذ عمليات تدفّق Genkit). في هذا الدرس العملي، ستستخدم Firestore لتخزين هذه عمليات التتبُّع.
كخطوة أخيرة في هذا الدرس العملي، ستنشر تطبيق Genkit على خدمة "استضافة التطبيقات" من Firebase.
ربط تطبيق Genkit بمشروعك على Firebase
لقد ربطنا Genkit بمشروعك من خلال تعديل src/lib/genkit/genkit.config.ts
في الخطوة السابقة.
تشغيل واجهة مستخدم Genkit للمطوّرين
تتضمّن Genkit واجهة مستخدم مستندة إلى الويب تتيح لك التفاعل مع النماذج اللغوية الكبيرة وتدفقات Genkit وأدوات الاسترجاع ومكوّنات الذكاء الاصطناعي الأخرى.
في الوحدة الطرفية، شغِّل الأمر التالي:
npm run dev:genkit
في المتصفّح، انتقِل إلى عنوان URL الذي يستضيف Genkit محليًا. في معظم الحالات، يكون http://localhost:4000/.
التفاعل مع Gemini
يمكنك الآن استخدام واجهة مستخدم المطوّرين في Genkit للتفاعل مع أي من النماذج المتوافقة أو أي من مكونات الذكاء الاصطناعي الأخرى، مثل الطلبات وأدوات الاسترجاع وتدفقات Genkit.
على سبيل المثال، جرِّب أن تطلب من Gemini اقتراح عطلة. لاحظ كيف يمكنك استخدام تعليمات النظام لتوجيه سلوك النموذج استنادًا إلى احتياجاتك المحدّدة. وينطبق ذلك أيضًا على النماذج التي لا تتوافق بشكلٍ أصلي مع تعليمات النظام.
إدارة الطلبات
تقدّم Genkit Dotprompt، وهي مكوّن إضافي وتنسيق نصي مصمَّمان لتبسيط عملية إنشاء وإدارة طلبات الذكاء الاصطناعي التوليدي. تتمثّل الفكرة الأساسية وراء Dotprompt في التعامل مع الطلبات كرموز برمجية، ما يتيح لك كتابتها وصيانتها والتحكّم في إصداراتها إلى جانب رموز تطبيقك.
لاستخدام Dotprompt، ابدأ بعبارة hello-world:
- في محرّر الرموز، افتح الملف
prompts/1-hello-world.prompt
. - في واجهة مستخدم Genkit Developer، افتح
prompts/1-hello-world
. - استخدِم أي اسم أو رمز لغة تعرفه، أو اتركه كسلسلة فارغة.
- انقر على تشغيل.
- جرِّب استخدام قيم مختلفة. تُجيد النماذج اللغوية الكبيرة فهم الطلبات المختصرة أو التي تحتوي على أخطاء إملائية أو غير المكتملة في طلبات البحث البسيطة مثل هذا الطلب.
إثراء الناتج باستخدام البيانات المنظَّمة
بالإضافة إلى إنشاء نص عادي، يتيح لك Genkit تنظيم الناتج لتحسين العرض والتكامل داخل واجهة مستخدم تطبيقك. من خلال تحديد مخطط، يمكنك توجيه النموذج اللغوي الكبير لإنتاج بيانات منظَّمة تتوافق مع التنسيق المطلوب.
استكشاف المخططات الناتجة
يمكنك أيضًا تحديد المخطّط الناتج لمكالمة نموذج لغوي كبير.
- في أداة تعديل الرموز، افحص ملف الطلب:
- افتح ملف
prompts/2-simple-itinerary.prompt
. - فحص مخطّطات الإدخال والإخراج المحدّدة
- افتح ملف
- التفاعل مع واجهة المستخدم:
- في واجهة مستخدم Genkit Developer، انتقِل إلى القسم
prompts/2-simple-itinerary
. - قدِّم الإدخال عن طريق ملء الحقلَين
place
وinterests
ببيانات نموذجية:{ "interests": [ "Museums" ], "place": "Paris" }
- انقر على تشغيل.
- في واجهة مستخدم Genkit Developer، انتقِل إلى القسم
فهم النتائج المستندة إلى المخطط
لاحظ كيف يتوافق الناتج الذي تم إنشاؤه مع المخطط المحدّد. من خلال تحديد البنية المطلوبة، تكون قد طلبت من النموذج اللغوي الكبير إنشاء بيانات يمكن تحليلها ودمجها بسهولة في تطبيقك. تتحقّق Genkit تلقائيًا من صحة الناتج مقارنةً بالمخطط، ما يضمن سلامة البيانات.
بالإضافة إلى ذلك، يمكنك ضبط Genkit على إعادة المحاولة أو محاولة إصلاح الناتج إذا لم يتطابق مع المخطط.
المزايا الرئيسية لمخططات الإخراج
- عملية دمج مبسطة: يمكنك دمج البيانات المنظَّمة بسهولة في عناصر واجهة المستخدم لتطبيقك.
- التحقّق من صحة البيانات: التأكّد من دقة المخرجات التي تم إنشاؤها واتساقها
- معالجة الأخطاء: تنفيذ آليات لمعالجة حالات عدم تطابق المخطط
يؤدي الاستفادة من مخططات الإخراج إلى تحسين تجربتك في Genkit، ما يتيح لك إنشاء بيانات منظَّمة مخصّصة لتوفير تجارب مستخدم أكثر ثراءً وديناميكية.
استخدام الإدخال المتعدّد الوسائط
لنفترض أنّ تطبيقك يقترح وجهات عطلات مخصّصة استنادًا إلى الصور التي يجدها المستخدمون ملهمة. تتيح لك Genkit، إلى جانب نموذج توليدي متعدد الوسائط، تنفيذ هذه الرؤية.
- في أداة تعديل الرموز، افحص ملف الطلب:
- افتح ملف
prompts/imgDescription.prompt
. - لاحظ تضمين
{{media url=this}}
، وهو عنصر من بنية Handlebars يسهّل دمج الصور في طلبك.
- افتح ملف
- التفاعل مع واجهة المستخدم:
- في واجهة مستخدم Genkit Developer، افتح طلب
prompts/imgDescription
. - أدخِل عنوان URL لصورة في الحقل
imageUrls
من خلال لصق عنوان URL لصورة. على سبيل المثال، يمكنك استخدام صورة مصغّرة من ويكيبيديا تعرض برج إيفل:{ "imageUrls": [ "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg/556px-La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg" ] }
- انقر على تشغيل.
- في واجهة مستخدم Genkit Developer، افتح طلب
7. تنفيذ عملية الاسترجاع باستخدام البحث عن التشابه بين المتجهات
على الرغم من أنّ إنشاء محتوى إبداعي باستخدام نماذج الذكاء الاصطناعي أمر مثير للإعجاب، فإنّ التطبيقات العملية غالبًا ما تتطلّب ربط الناتج بسياق محدّد.
في حالة هذا الدرس العملي، لديك قاعدة بيانات للوجهات (أماكن وأنشطة) وتهدف إلى التأكّد من أنّ الاقتراحات التي يقدّمها نموذج Gemini تشير حصريًا إلى الإدخالات في قاعدة البيانات هذه.
لسدّ الفجوة بين طلبات البحث غير المنظَّمة والمحتوى ذي الصلة، ستستفيد من قوة البحث عن التشابه المستند إلى المتجهات في التضمينات التي تم إنشاؤها.
فهم التضمينات والتشابه بين المتجهات
- المتجهات: المتجهات هي تمثيلات رقمية لنقاط البيانات، وتُستخدم غالبًا لنمذجة المعلومات المعقّدة مثل النصوص أو الصور. يتوافق كل بُعد في المتّجه مع ميزة معيّنة من ميزات البيانات.
- نماذج التضمين: تحوّل نماذج الذكاء الاصطناعي المتخصّصة هذه بيانات الإدخال، مثل النصوص، إلى متّجهات ذات أبعاد عالية. والجانب الرائع هو أنّ المدخلات المتشابهة يتم ربطها بمتجهات قريبة من بعضها البعض في هذه المساحة العالية الأبعاد.
- البحث عن التشابه بين المتجهات: تستفيد هذه التقنية من قرب متجهات التضمين لتحديد نقاط البيانات ذات الصلة. عند إدخال طلب بحث، يعثر على إدخالات في قاعدة البيانات تتضمّن متّجهات تضمين مشابهة، ما يشير إلى الصلة الدلالية.
فهم طريقة عمل عملية الاسترداد
- تضمين طلب البحث: يتم تمرير إدخال المستخدِم (مثل "عشاء رومانسي في باريس") من خلال نموذج تضمين، ما يؤدي إلى إنشاء متّجه طلب بحث.
- تضمينات قاعدة البيانات: من المفترض أنّك عالجت مسبقًا قاعدة بيانات الوجهات، ما أدّى إلى إنشاء متّجهات تضمين لكل إدخال.
- احتساب التشابه: تتم مقارنة متّجه طلب البحث بكل متّجه تضمين في قاعدة البيانات باستخدام مقياس التشابه (مثل التشابه الجيب التمامي).
- الاسترجاع: يتم استرجاع الإدخالات الأكثر تشابهًا من قاعدة البيانات، استنادًا إلى مدى قربها من متّجه طلب البحث، كاقتراحات ذات صلة.
من خلال دمج آلية الاسترجاع هذه في تطبيقك، يمكنك الاستفادة من نموذج Gemini لإنشاء اقتراحات إبداعية ومستندة إلى مجموعة البيانات المحدّدة. يضمن هذا الأسلوب أن تظلّ النتائج التي يتم إنشاؤها ذات صلة بالسياق ومتوافقة مع المعلومات المتوفّرة في قاعدة البيانات.
تفعيل البحث عن التشابه بين المتجهات في Firestore
في خطوة سابقة من هذا الدرس البرمجي، ملأت قاعدة بيانات Firestore بأماكن وأنشطة نموذجية. يتضمّن كل إدخال مكان حقل نص knownFor
يصف سماته البارزة، بالإضافة إلى حقل embedding
مطابق يحتوي على التمثيل المتجه لهذا الوصف.
للاستفادة من إمكانية البحث عن التشابه بين المتجهات في عمليات التضمين هذه، عليك إنشاء فهرس Firestore. يتيح هذا الفهرس استرداد الأماكن بكفاءة استنادًا إلى التشابه بين متجهات التضمين وطلب بحث معيّن.
- أنشئ الفهرس، مع الحرص على استبدال
YOUR_PROJECT_ID
برقم تعريف مشروعك.gcloud firestore indexes composite create --project=YOUR_PROJECT_ID --collection-group=places --query-scope=COLLECTION --field-config field-path=embedding,vector-config='{"dimension":"768","flat": "{}"}'
- في واجهة مستخدم Genkit Developer، افتح
retrievers/placesRetriever
. - انقر على تشغيل. راقِب العنصر الذي تم إنشاؤه باستخدام نص العنصر النائب، والذي يشير إلى المكان الذي ستنفّذ فيه منطق أداة الاسترجاع.
- في محرّر الرموز، افتح الملف
src/lib/genkit/placesRetriever.ts
. - انتقِل إلى أسفل الصفحة واستبدِل العنصر النائب
placesRetriever
بما يلي:export const placesRetriever = defineFirestoreRetriever(ai, { name: 'placesRetriever', firestore, collection: 'places', contentField: 'knownFor', vectorField: 'embedding', embedder: vertexAI.embedder('text-embedding-005', {outputDimensionality: 768}), distanceMeasure: 'COSINE', });
اختبار أداة الاسترجاع
- في واجهة مستخدم Genkit Developer، افتح
retrievers/placesRetriever
أداة الاسترجاع. - قدِّم طلب البحث التالي:
{ "content": [ { "text": "UNESCO" } ] }
- يمكنك أيضًا تقديم خيارات. على سبيل المثال، إليك كيفية تحديد عدد المستندات التي يجب أن يستردّها برنامج الاسترداد:
{ "limit": 4 }
- انقر على تشغيل.
يمكنك إجراء فلترة إضافية للبيانات تتجاوز التشابه عن طريق إضافة عبارات where
إلى الخيارات.
8. التوليد المعزّز بالاسترجاع (RAG) باستخدام Genkit
في الأقسام السابقة، أنشأت طلبات فردية قادرة على التعامل مع النصوص وملفات JSON والصور، وإنشاء وجهات عطلات ومحتوى تفاعلي آخر للمستخدمين. لقد نفّذت أيضًا طلبًا يستردّ الوجهات ذات الصلة من قاعدة بيانات Firestore. حان الوقت الآن لتنظيم هذه المكوّنات في مسار متماسك للتوليد المعزّز بالاسترجاع (RAG).
يعرض هذا القسم مفهومًا مهمًا في Genkit يُعرف باسم عمليات التنفيذ. عمليات التنفيذ هي دوال قابلة للبث ومحدّدة الأنواع بشكل صارم، ويمكن استدعاؤها محليًا وعن بُعد، مع إمكانية المراقبة الكاملة. يمكنك إدارة عمليات التنفيذ واستدعاؤها من كلّ من واجهة سطر الأوامر (CLI) في Genkit وواجهة مستخدم المطوّرين في Genkit.
- في أداة تعديل الرموز، افحص طلب إنشاء خطة الرحلة:
- افتح ملف
prompts/itineraryGen.prompt
. - لاحظ كيف تم توسيع الطلب لقبول مدخلات إضافية، وتحديدًا بيانات الأنشطة المستندة إلى أداة الاسترجاع.
- افتح ملف
- في واجهة مستخدم Genkit Developer، اعرض مسار Genkit في ملف
src/lib/genkit/itineraryFlow.ts
.
ملاحظة: لتسهيل عملية تصحيح الأخطاء، ننصحك بتقسيم المسارات الطويلة إلى خطوات أصغر يمكن إدارتها. - يمكنك تحسين سير العمل من خلال دمج خطوة "وصف الصورة":
- ابحث عن التعليق
TODO: 2
(حوالي السطر 81). يحدّد هذا المكان الذي ستعزّز فيه مسارك. - استبدِل العنصر النائب
imgDescription
الفارغ بالناتج الذي تم إنشاؤه من خلال طلبimgDescription
.
- ابحث عن التعليق
- اختبار عملية الدفع:
- انتقِل إلى
flows/itineraryFlow
. - استخدِم الإدخال التالي لاختبار التنفيذ الناجح لـ
itineraryFlow
باستخدام الخطوة التي أضفتها حديثًا:{ "request": "Sightseeing in Paris", "imageUrls": [ "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg/556px-La_Tour_Eiffel_vue_de_la_Tour_Saint-Jacques%2C_Paris_ao%C3%BBt_2014_%282%29.jpg" ] }
- انقر على تشغيل.
- راقِب الناتج الذي تم إنشاؤه، والذي من المفترض أن يتضمّن وصف الصورة في اقتراح خطة الرحلة.
- انتقِل إلى
- في حال مواجهة أي أخطاء أو سلوكيات غير متوقّعة، راجِع علامة التبويب فحص للحصول على التفاصيل. يمكنك أيضًا استخدام علامة التبويب هذه لمراجعة سجلّ عمليات التنفيذ من Trace Store.
التوليد المعزّز بالاسترجاع (RAG) لتطبيق الويب
- تأكَّد من أنّ تطبيق الويب لا يزال قيد التشغيل من خلال الانتقال إلى http://localhost:3000/ في المتصفّح.
- إذا لم يعُد تطبيق الويب قيد التشغيل، شغِّل الأوامر التالية في الوحدة الطرفية:
npm install npm run dev
- انتقِل إلى صفحة تطبيق الويب Dream Your Vacation (http://localhost:3000/gemini).
- اطّلِع على رمز المصدر (
src/app/gemini/page.tsx
) للحصول على مثال على الدمج مع Next.js.
9. نشر تطبيقك باستخدام Firebase App Hosting
الخطوة الأخيرة في هذه الرحلة هي نشر تطبيق الويب. ستستفيد من استضافة تطبيقات الويب من Firebase، وهو حلّ استضافة متوافق مع إطارات العمل ومصمّم لتبسيط عملية نشر تطبيقات Next.js وAngular على خادم خلفية بدون خادم.
- نفِّذ التغييرات في مستودع git المحلي، ثم أرسِلها إلى GitHub.
- في "وحدة تحكّم Firebase"، انتقِل إلى استضافة التطبيقات ضِمن مشروعك على Firebase.
- انقر على البدء > الربط بـ GitHub.
- اختَر حسابك على GitHub والمستودع. انقر على التالي.
- في إعداد النشر > الدليل الجذر، احتفِظ بالقيمة التلقائية.
- بالنسبة إلى فرع البث المباشر، اختَر فرع main في مستودع GitHub. انقر على التالي.
- أدخِل معرّفًا لخادمك الخلفي (على سبيل المثال،
compass
). - عندما يُطلب منك إنشاء تطبيق ويب في Firebase أو ربطه، اختَر اختيار تطبيق ويب حالي في Firebase، ثم اختَر التطبيق الذي أنشأته في خطوة سابقة من هذا الدرس العملي.
- انقر على إنهاء ونشر.
مراقبة حالة النشر
ستستغرق عملية النشر بضع دقائق. يمكنك تتبُّع مستوى التقدّم في قسم "استضافة التطبيق" في وحدة تحكّم Firebase.
منح الأذونات لحساب الخدمة
لكي يتمكّن الخلفية المستندة إلى Node.js من الوصول إلى موارد Vertex AI، عليك منح دور aiplatform.user
لحساب الخدمة الخاص بتطبيقك:
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member "serviceAccount:firebase-app-hosting-compute@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role "roles/aiplatform.user"
بعد اكتمال عملية الإعداد، سيتمكّن المستخدمون من الوصول إلى تطبيق الويب.
إعادة النشر التلقائي
تسهّل خدمة Firebase App Hosting إجراء التحديثات المستقبلية. عندما تدفع التغييرات إلى الفرع الرئيسي لمستودع GitHub، ستعيد خدمة Firebase App Hosting تلقائيًا إنشاء تطبيقك وإعادة نشره، ما يضمن حصول المستخدمين دائمًا على أحدث إصدار.
10. الخاتمة
تهانينا على إكمال هذا الدرس التطبيقي الشامل حول الترميز.
لقد نجحت في الاستفادة من إمكانات Genkit وFirestore وVertex AI لإنشاء "سير عمل" متطوّر يقدّم اقتراحات مخصّصة بشأن العطلات استنادًا إلى اهتمامات المستخدمين والأفكار التي تراودهم، مع الاستناد إلى بيانات تطبيقك في جميع الاقتراحات.
خلال هذه الرحلة، اكتسبت خبرة عملية في أنماط هندسة البرامج الأساسية الضرورية لإنشاء تطبيقات قوية للذكاء الاصطناعي التوليدي. وتشمل هذه الأنماط ما يلي:
- إدارة الطلبات: تنظيم الطلبات والحفاظ عليها كرموز برمجية لتحسين التعاون والتحكّم في الإصدارات
- المحتوى المتعدّد الوسائط: دمج أنواع مختلفة من البيانات، مثل الصور والنصوص، لتحسين التفاعلات مع الذكاء الاصطناعي
- مخططات الإدخال/الإخراج: تنظيم البيانات لدمجها والتحقّق من صحتها بسلاسة في تطبيقك
- مخازن المتّجهات: الاستفادة من تضمينات المتّجهات لإجراء عمليات بحث فعّالة عن التشابه واسترجاع المعلومات ذات الصلة.
- استرجاع البيانات: تنفيذ آليات لجلب البيانات ودمجها من قواعد البيانات في المحتوى من إنشاء الذكاء الاصطناعي
- التوليد المعزّز بالاسترجاع (RAG): الجمع بين تقنيات الاسترجاع والذكاء الاصطناعي التوليدي للحصول على نتائج دقيقة ومناسبة للسياق
- أدوات قياس الأداء في سير العمل: إنشاء وتنظيم سير عمل معقّد للذكاء الاصطناعي من أجل تنفيذ سلس وقابل للمراقبة
من خلال إتقان هذه المفاهيم وتطبيقها في منظومة Firebase المتكاملة، ستكون مستعدًا تمامًا لبدء مغامراتك الخاصة مع الذكاء الاصطناعي التوليدي. استكشِف الإمكانات الهائلة، وأنشئ تطبيقات مبتكرة، وواصِل تجاوز حدود ما يمكن تحقيقه باستخدام الذكاء الاصطناعي التوليدي.
استكشاف خيارات النشر البديلة
توفّر Genkit مجموعة متنوعة من خيارات النشر لتلبية احتياجاتك المحدّدة، بما في ذلك:
- وظائف السحابة الإلكترونية لبرنامج Firebase
- Cloud Run
- Next.js
- أي بيئة Node.js
- يتوافق Genkit أيضًا مع Go
ما عليك سوى اختيار الخيار الأنسب لك من خلال تنفيذ الأمر التالي داخل مجلد عقدة (package.json
):
npx genkit init
الخطوات التالية
- جرِّب الطلبات واستفِد من قدرات الاستيعاب الكبيرة في Google AI Studio أو Vertex AI Studio.
- مزيد من المعلومات حول البحث باستخدام الذكاء الاصطناعي التوليدي المعزّز بالاسترجاع
- يمكنك الاطّلاع على المستندات الرسمية الخاصة بـ Genkit.
- يمكنك الاطّلاع على مزيد من المعلومات عن إمكانات البحث عن التشابه في Firestore وCloud SQL for PostgreSQL.
- التعمّق في مسارات الذكاء الاصطناعي التوليدي باستخدام ميزة استدعاء الدوال