1. نظرة عامة
في هذا التمرين العملي، ستستخدم منتجات الذكاء الاصطناعي التوليدي من Google لإنشاء بنية أساسية في Google Cloud بمساعدة Gemini Cloud Assist، والاستعلام عن بيانات BigQuery باستخدام ميزات اللغة الطبيعية إلى SQL في Data Canvas، وكتابة الرموز البرمجية في دفاتر جوبيتر في Colab Enterprise وفي Eclipse Theia (Visual Studio Code) بمساعدة Gemini Code Assist، ودمج ميزات البحث والدردشة المستندة إلى الذكاء الاصطناعي والمبنية على مصادر التأسيس في Cloud Storage وBigQuery في Vertex AI Agent Builder.
هدفنا هو إنشاء موقع إلكتروني للوصفات والطهي باسم AI Recipe Haven. سيتم إنشاء الموقع الإلكتروني باستخدام Python وStreamlit وسيتضمّن صفحتَين رئيسيتَين. ستستضيف ميزة "نصائح الطبخ" روبوت دردشة سننشئه باستخدام Gemini ومصدر مرتبط بمجموعة من كتب الطبخ ومستند إلى Vertex AI Agent Builder، وسيقدم نصائح حول الطبخ ويجيب عن الأسئلة المتعلقة به. سيكون "بحث الوصفات" محرّك بحث يستند إلى Gemini، ولكن هذه المرة إلى قاعدة بيانات وصفات في BigQuery.
إذا واجهتك أي صعوبة في فهم أي من الرموز البرمجية في هذا التمرين، يمكنك العثور على حلول لجميع ملفات الرموز البرمجية في مستودع GitHub الخاص بالتمرين على فرع الحل.
الأهداف
في هذه الميزة الاختبارية، ستتعرّف على كيفية تنفيذ المهام التالية:
- تفعيل Gemini Cloud Assist واستخدامه
- إنشاء تطبيق بحث في Vertex AI Agent Builder لروبوت الدردشة الذي يقدّم نصائح حول الطبخ
- تحميل البيانات وتنظيفها في دفتر ملاحظات Colab Enterprise بمساعدة Gemini Code Assist
- إنشاء تطبيق بحث في Vertex AI Agent Builder لأداة إنشاء الوصفات
- تحديد إطار تطبيق الويب الأساسي المستند إلى Python وStreamlit، بمساعدة بسيطة من Gemini
- نشر تطبيق الويب على Cloud Run
- ربط صفحة "نصائح الطبخ" بتطبيق "أداة إنشاء الوكلاء" الخاص بنا والمخصّص للبحث في كتب الطبخ
- (اختياري) ربط صفحة "البحث عن وصفات" بتطبيق "أداة إنشاء الوكلاء" الخاص بميزة "البحث عن وصفات"
- (اختياري) استكشاف التطبيق النهائي
2. الإعداد والمتطلبات
قبل النقر على زر "بدء الدرس التطبيقي"
اقرأ هذه التعليمات. تكون التمارين المعملية محدّدة بوقت ولا يمكنك إيقافها مؤقتًا. يعرض المؤقت، الذي يبدأ عند النقر على "بدء الدرس التطبيقي"، المدة التي ستتوفّر لك فيها موارد Google Cloud.
يتيح لك هذا الدرس التطبيقي العملي على Qwiklabs تنفيذ أنشطة الدرس بنفسك في بيئة سحابية حقيقية، وليس في بيئة محاكاة أو تجريبية. ويتم ذلك من خلال منحك بيانات اعتماد جديدة ومؤقتة يمكنك استخدامها لتسجيل الدخول إلى Google Cloud والوصول إليه طوال مدة الدرس العملي.
ما تحتاج إليه
لإكمال هذا الدرس التطبيقي، يجب أن يتوفّر لديك ما يلي:
- الوصول إلى متصفّح إنترنت قياسي (يوصى باستخدام متصفّح Chrome).
- الوقت المخصّص لإكمال الدرس التطبيقي
ملاحظة: إذا كان لديك حساب أو مشروع شخصي على Google Cloud، لا تستخدمه في هذا المختبر.
ملاحظة: إذا كنت تستخدم Pixelbook، افتح نافذة تصفّح متخفي لتشغيل هذا المختبر.
كيفية بدء الدرس العملي وتسجيل الدخول إلى Google Cloud Console
- انقر على الزر "بدء التمرين المعملي". إذا كنت بحاجة إلى الدفع مقابل المختبر، ستفتح نافذة منبثقة لتحديد طريقة الدفع. على يمين الشاشة، تظهر لوحة تتضمّن بيانات الاعتماد المؤقتة التي يجب استخدامها في هذا الدرس التطبيقي.

- انسخ اسم المستخدم، ثم انقر على "فتح وحدة تحكّم Google". يوفّر المختبر الموارد، ثم يفتح علامة تبويب أخرى تعرض صفحة "تسجيل الدخول".

ملاحظة: افتح علامات التبويب في نوافذ منفصلة جنبًا إلى جنب.
إذا ظهرت لك صفحة "اختيار حساب"، انقر على "استخدام حساب آخر".

- في صفحة تسجيل الدخول، الصِق اسم المستخدم الذي نسخته من لوحة "تفاصيل الاتصال". بعد ذلك، انسخ كلمة المرور والصِقها.
ملاحظة مهمة: يجب استخدام بيانات الاعتماد من لوحة "تفاصيل الاتصال". لا تستخدِم بيانات اعتماد Qwiklabs. إذا كان لديك حسابك الخاص على Google Cloud، لا تستخدمه في هذا المختبر (لتجنُّب تكبُّد رسوم). 4. انقر على الصفحات التالية:
- اقبل الأحكام والشروط.
- لا تُضِف خيارات استرداد الحساب أو المصادقة الثنائية (لأنّ هذا الحساب مؤقت).
- لا تشترك في فترات تجريبية مجانية.
بعد لحظات قليلة، سيتم فتح Cloud Console في علامة التبويب هذه.
ملاحظة: يمكنك عرض القائمة التي تتضمّن منتجات وخدمات Google Cloud من خلال النقر على "قائمة التنقّل" في أعلى يمين الصفحة.

3- المهمة 0 التحقّق من مجموعة محطات العمل
في جزء لاحق من هذا الدرس التطبيقي، ستستخدم محطة عمل Google Cloud لإجراء بعض أعمال التطوير. من المفترض أن تكون عملية بدء هذا المختبر قد بدأت في إنشاء مجموعة "محطة العمل". قبل المتابعة، تأكَّد من أنّ المجموعة قيد الإنشاء.
- في Google Cloud Console، استخدِم مربّع البحث للانتقال إلى محطات عمل Cloud.
- استخدِم قائمة التنقّل اليمنى لعرض إدارة المجموعات.
- إذا كانت حالة المجموعة هي "جارٍ التحديث"، يمكنك الانتقال إلى المهمة 1. إذا لم تظهر أي مجموعات في أي حالة، أعِد تحميل الصفحة. إذا لم يظهر لك بعد ذلك مجموعة "جارٍ التعديل" (جارٍ الإنشاء)، انقر على إنهاء الدرس باستخدام الزر في أعلى يمين هذه التعليمات وأعِد تشغيل الدرس.
4. المهمة رقم 1 تفعيل Gemini Cloud Assist واستخدامه
في هذه المهمة، سنفعّل Gemini Cloud Assist ونستخدمه. أثناء العمل في "وحدة تحكّم Google Cloud"، يمكن أن يقدّم لك Gemini Cloud Assist نصائح ويساعدك في إنشاء البنية الأساسية لـ Google Cloud وضبطها ومراقبتها، ويمكنه حتى اقتراح أوامر gcloud وكتابة نصوص Terraform البرمجية.
- لتفعيل Cloud Assist، انقر في مربّع البحث في أعلى واجهة مستخدم Cloud Console واختَر اسأل Gemini (أو قد تكون العبارة اسأل Gemini عن Cloud Console).
- انتقِل إلى قسم "واجهة برمجة التطبيقات المطلوبة" في الصفحة وفعِّل واجهة برمجة التطبيقات Gemini في Google Cloud.
- إذا لم تظهر لك واجهة محادثة على الفور، انقر على بدء المحادثة. ابدأ بطلب شرح من Gemini لبعض مزايا استخدام Cloud Workstations. خصِّص بضع دقائق لاستكشاف الردّ الذي تم إنشاؤه.
- بعد ذلك، اسأل عن مزايا "أداة إنشاء الوكلاء" وكيف يمكن أن تساعد في تقديم ردود مستندة إلى معلومات واقعية.
- أخيرًا، لنلقِ نظرة على مقارنة. في نافذة محادثة Gemini في Google Cloud Console، اطرح السؤال التالي:
What are the major steps to creating a search app grounded in a
GCS data source using Vertex AI Agent builder?
- الآن، في نافذة التصفّح العادية، انتقِل إلى موقع Gemini الإلكتروني العلني من هنا، وسجِّل الدخول إذا لزم الأمر، واطرح السؤال نفسه. هل الردود هي نفسها أو متشابهة على الأقل؟ ما هي الخطوات المحدّدة؟ هل أحدهما أفضل بشكل ملحوظ؟ على أي حال، ضَع الردود في اعتبارك أثناء تنفيذ الخطوات التالية.
ملاحظة: إذا حاولت تنفيذ الخطوة أعلاه باستخدام حسابك المؤقت على Qwiklabs، سيتم حظرك. إذا كان حسابك الخاص بالعمل محظورًا أيضًا لأنّ مؤسستك لا تسمح باستخدام تطبيق Gemini للويب، ما عليك سوى تخطّي الخطوة والمتابعة. ولن يؤثّر ذلك في قدرتك على إكمال هذا التمرين.
5- المهمة رقم 2 إنشاء تطبيق بحث في Vertex AI Agent Builder لروبوت الدردشة الذي يقدّم نصائح حول الطبخ
سيتضمّن موقع الويب الذي نعمل على إنشائه صفحة نصائح حول الطهي تحتوي على روبوت محادثة مصمّم لمساعدة المستخدمين في العثور على إجابات عن الأسئلة المتعلقة بالطهي. سيستند هذا التطبيق إلى Gemini الذي يستند إلى مصدر يحتوي على 70 كتاب طبخ متاحًا للجميع. ستكون كتب الطبخ هي مصدر المعلومات الذي يستخدمه Gemini عند الإجابة عن الأسئلة.
- استخدِم مربّع البحث في Cloud Console للانتقال إلى Vertex AI. من لوحة البيانات، انقر على تفعيل جميع واجهات برمجة التطبيقات المقترَحة. إذا ظهر لك مربّع منبثق يطلب تفعيل واجهة برمجة التطبيقات Vertex AI API نفسها، يُرجى تفعيلها أيضًا.
- استخدِم البحث للانتقال إلى Agent Builder ثم متابعة وتفعيل واجهة برمجة التطبيقات.
- كما اقترح Gemini في نصيحتنا السابقة بشأن طلب المشورة، يبدأ إنشاء تطبيق بحث في Agent Builder بإنشاء مصدر بيانات موثوق. عندما يبحث المستخدم، يفهم Gemini السؤال وكيفية إنشاء ردود ذكية، ولكنّه سيبحث عن المعلومات المستخدمة في هذا الردّ في المصدر الموثوق بدلاً من استخلاصها من معرفته الفطرية.
من القائمة اليمنى، انتقِل إلى "مخازن البيانات" (Data Stores) ثمّ "إنشاء مخزن بيانات" (Create Data Store). 4. إنّ كتب الطبخ المتوفّرة في النطاق العام والتي نستخدمها لتوفير المعلومات في صفحة نصائح الطبخ متوفّرة حاليًا في حزمة Cloud Storage في مشروع خارجي. اختَر نوع مصدر Cloud Storage. 5- راجِع الخيارات التلقائية المتعلقة بنوع المعلومات التي نستوردها بدون تغييرها. اترك نوع الاستيراد مضبوطًا على "مجلد"، واستخدِم مسار الحزمة التالي: labs.roitraining.com/labs/old-cookbooks، ثمّ انقر على متابعة. 6. أدخِل اسمًا لمخزن البيانات: old-cookbooks. انقر على تعديل وغيِّر المعرّف إلى old-cookbooks-id ثم انقر على إنشاء مخزن البيانات.
يتوافق Vertex AI Agent Builder مع عدة أنواع من التطبيقات، ويعمل "مخزن البيانات" كمصدر موثوق لكل تطبيق. تطبيقات البحث مناسبة للاستخدام العام والبحث. تطبيقات Chat مخصّصة لسير العمل التوليدي في تطبيقات روبوتات الدردشة/الروبوتات الصوتية المستندة إلى Dataflow. تساعد تطبيقات الاقتراحات في إنشاء محركات اقتراحات أفضل. أما تطبيقات الوكلاء، فهي مخصّصة لإنشاء وكلاء مستندين إلى الذكاء الاصطناعي التوليدي. في النهاية، من المحتمل أن يقدّم لنا تطبيق Agent أفضل تجربة في ما نريد فعله، ولكن بما أنّ المنتج في مرحلة المعاينة حاليًا، سنلتزم بنوع تطبيق "بحث Google". 7. استخدِم القائمة على يمين الصفحة للانتقال إلى التطبيقات، ثم انقر على إنشاء تطبيق. 8. اختَر نوع تطبيق "بحث Google". فحص الخيارات المختلفة بدون تغييرها أدخِل اسم التطبيق: cookbook-search. انقر على تعديل واضبط رقم تعريف التطبيق على cookbook-search-id. اضبط الشركة على Google ومتابعة. 9- تحقَّق من مخزن بيانات old-cookbooks الذي أنشأته قبل بضع خطوات وأنشئ تطبيق البحث.
إذا نظرت إلى علامة التبويب النشاط، من المحتمل أن ترى أنّ كتب الطبخ لا تزال قيد الاستيراد والفهرسة. سيستغرق "منشئ الوكلاء" أكثر من 5 دقائق لفهرسة آلاف الصفحات الواردة في كتب الطبخ الـ 70 التي قدّمناها له. أثناء عملها، لنحمّل بعض بيانات قاعدة بيانات الوصفات وننظّفها من أجل أداة إنشاء الوصفات.
6. المهمة رقم 3 تحميل البيانات وتنظيفها في دفتر ملاحظات Colab Enterprise بمساعدة Gemini Code Assist
توفّر Google Cloud طريقتَين رئيسيتَين يمكنك من خلالهما استخدام دفاتر ملاحظات Jupiter. سنستخدم أحدث منتجات Google، وهو Colab Enterprise. قد يكون بعضكم على دراية بمنتج Colab من Google، الذي يستخدمه عادةً الأفراد والمؤسسات الذين يريدون تجربة دفاتر Jupiter في بيئة مجانية. Colab Enterprise هو منتج تجاري من Google Cloud مدمج بالكامل مع بقية منتجات Google السحابية، ويستفيد بشكل كامل من إمكانات الأمان والامتثال في بيئة GCP.
إحدى الميزات التي يوفّرها Colab Enterprise هي التكامل مع Gemini Code Assist من Google. يمكن استخدام Code Assist في عدد من أدوات تعديل الرموز البرمجية المختلفة، ويمكنه تقديم نصائح واقتراحات مضمّنة سلسة أثناء كتابة الرموز البرمجية. سنستفيد من هذا المساعد المستنِد إلى الذكاء الاصطناعي التوليدي أثناء تنظيم بيانات وصفاتنا.
- استخدِم البحث للانتقال إلى Colab Enterprise وإنشاء دفتر ملاحظات. إذا تلقّيت عرضًا لتجربة ميزات جديدة في Colab، تجاهله. للحصول على وقت التشغيل، أي قدرة الحوسبة التي يستند إليها دفتر الملاحظات، وتشغيله، انقر على ربط في أعلى يسار دفتر الملاحظات الجديد.

- استخدِم قائمة الخيارات الإضافية بجانب اسم دفتر الملاحظات الحالي في لوحة "ملفات Colab Enterprise" لتغيير اسمه
Data Wrangling.

- أنشئ مربع + نص جديدًا، واستخدِم السهم المتّجه للأعلى لنقله إلى أن يصبح الخلية الأولى في الصفحة.

- عدِّل مربّع النص وأدخِل ما يلي:
# Data Wrangling
Import the Pandas library
- في مجموعة الرموز أسفل مجموعة النصوص التي أنشأتها للتو، ابدأ بكتابة imp، وسيقترح Gemini Code Assist بقية عملية الاستيراد باللون الرمادي. اضغط على مفتاح التبويب لقبول الاقتراح.
import pandas as pd
- أسفل مربّع رمز الاستيراد، أنشئ مربّع نص آخر وأدخِل ما يلي:
Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
- أنشئ مجموعة رموز أخرى وعدِّلها. مرّة أخرى، ابدأ بكتابة df وافحص الرمز الذي أنشأه Gemini Code Assistant. إذا ظهرت لك قائمة منسدلة للإكمال التلقائي لكلمات Python الرئيسية فوق الاقتراح الذي تم إنشاؤه، اضغط على مفتاح Escape للاطّلاع على الرمز البرمجي المقترَح باللون الرمادي الفاتح. اضغط على مفتاح التبويب مرة أخرى لقبول الاقتراح. إذا لم يتضمّن اقتراحك استدعاء الدالة head()، أضِفه.
df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
df.head()
- انقر على خلية الرمز الأولى التي استوردت فيها Pandas، واستخدِم قائمة الأوامر أو لوحة المفاتيح لتشغيل الخلية المحدّدة. على لوحة المفاتيح، سيؤدي الضغط على shift+enter إلى تنفيذ الخلية ونقل التركيز إلى الخلية التالية، وإنشاء واحدة إذا لزم الأمر. انتظِر حتى يتم تنفيذ الخلية قبل الانتقال إلى الخطوة التالية.
ملاحظة: سيظهر الرمز [ ] على يسار الخلية مباشرةً عندما لا يتم تنفيذها. أثناء تنفيذ خلية، ستظهر صورة متحركة تدور وتشير إلى أنّ العملية قيد التنفيذ. بعد انتهاء الخلية، سيظهر رقم، مثل [13]. 9- نفِّذ الخلية التي تحمّل ملف CSV إلى DataFrame. انتظِر إلى أن يتم تحميل الملف وافحص الصفوف الخمسة الأولى من البيانات. هذه هي بيانات الوصفات التي سنحمّلها إلى BigQuery، وسنستخدمها في النهاية كأساس لإنشاء وصفاتنا. 10. أنشئ مجموعة رموز جديدة وأدخِل التعليق أدناه. بعد كتابة التعليق، انتقِل إلى سطر الرمز التالي، وسيظهر لك الاقتراح df.columns. اقبلها ثم نفِّذ الخلية.
# List the current DataFrame column names
لقد أوضحنا للتو أنّه لديك خياران للحصول على المساعدة من Gemini Code Assist في دفتر ملاحظات Jupyter: خلايا نصية فوق خلايا الرموز، أو تعليقات داخل خلية الرموز نفسها. تعمل التعليقات داخل خلايا الرموز بشكل جيد في دفاتر ملاحظات Jupyter، ولكن يمكن استخدام هذه الطريقة أيضًا في أي بيئة تطوير متكاملة أخرى تتوافق مع Gemini Code Assist من Google.
- لننظّف الأعمدة قليلاً. أعِد تسمية العمود
Unnamed: 0إلىid، والعمودlinkإلىuri. استخدِموا تقنيات الطلب > الرمز البرمجي التي تختارونها لإنشاء الرمز البرمجي، ثم شغِّلوا الخلية عندما تكونون راضين عن النتيجة.
# Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri'
df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True)
- أزِل العمودَين
sourceوNERواستخدِمhead()لعرض الصفوف القليلة الأولى. يمكنك طلب المساعدة من Gemini مرة أخرى. نفِّذ السطرَين الأخيرَين وافحص النتائج.
# Remove the source and NER columns
df.drop(columns=['source', 'NER'], inplace=True)
df.head()
- لنتعرّف على عدد السجلات في مجموعة البيانات. مرة أخرى، ابدأ باختيار أسلوب الطلب الذي تفضّله لمعرفة ما إذا كان بإمكان Gemini مساعدتك في إنشاء الرمز البرمجي.
# Count the records in the DataFrame
df.shape # count() will also work
- من المحتمل أنّ يكون عدد الوصفات البالغ 2.23 مليون وصفة أكبر من الوقت المتاح لدينا. من المحتمل أن تستغرق عملية الفهرسة في "أداة إنشاء العملاء" وقتًا طويلاً بالنسبة إلى تمريننا اليوم. كحلّ وسط، يمكننا أخذ عيّنة من 150,000 وصفة طعام والعمل عليها. استخدِم أسلوب "الطلب > الرمز البرمجي" لأخذ العيّنة وتخزينها في DataFrame جديد باسم
dfs(حرف s يشير إلى صغير).
# Sample out 150,000 records into a DataFrame named dfs
dfs = df.sample(n=150000)
- بيانات مصدر وصفات الطعام جاهزة للتحميل في BigQuery. قبل بدء عملية التحميل، لننتقل إلى BigQuery ونجهّز مجموعة بيانات لتضمين جدولنا. في Google Cloud Console، استخدِم مربّع البحث للانتقال إلى BigQuery. يمكنك النقر بزر الماوس الأيمن على BigQuery وفتحها في علامة تبويب جديدة في المتصفّح.
- إذا لم تكن لوحة "الدردشة مع الذكاء الاصطناعي من Gemini" ظاهرة، افتحها باستخدام شعار Gemini في أعلى يسار Cloud Console. إذا طُلب منك تفعيل واجهة برمجة التطبيقات مرة أخرى، انقر على "تفعيل" أو أعِد تحميل الصفحة. تشغيل الطلب:
What is a dataset used for in BigQuery?بعد استكشاف الردّ، اطرح السؤال التالي:How can I create a dataset named recipe_data using the Cloud Console?قارِن النتائج بالخطوات القليلة التالية.

- في جزء "مستكشف BigQuery"، انقر على قائمة النقاط الثلاث عرض الإجراءات بجانب رقم تعريف مشروعك. ثم انقر على إنشاء مجموعة بيانات.

- أعطِني مجموعة البيانات ومعرّف
recipe_data. اترك نوع الموقع الجغرافي على الولايات المتحدة وانقر على إنشاء مجموعة بيانات. إذا تلقّيت رسالة خطأ تفيد بأنّ مجموعة البيانات متوفّرة، ما عليك سوى الانتقال إلى الخطوة التالية.
بعد إنشاء مجموعة البيانات في BigQuery، لنرجع إلى دفتر الملاحظات وننفّذ عملية الإدراج. 19. عُد إلى دفتر ملاحظات "تنظيف البيانات" في Colab Enterprise. في خلية رمز جديدة، أنشئ متغيّرًا باسم project_id واستخدِمه لتخزين رقم تعريف مشروعك الحالي. ابحث في أعلى يسار هذه التعليمات، أسفل الزر "إنهاء الدرس التطبيقي"، وستجد رقم تعريف المشروع الحالي. يمكنك أيضًا العثور عليه في الصفحة الرئيسية في Cloud Console إذا أردت ذلك. عيِّن القيمة في المتغيّر project_id وشغِّل الخلية.
# Create a variable to hold the current project_id
project_id='YOUR_PROJECT_ID'
- استخدِم أسلوب "الطلب > الرمز" لإنشاء مجموعة من الرموز البرمجية التي ستُدرِج DataFrame
dfsفي جدول باسمrecipesفي مجموعة البيانات التي أنشأناها للتوrecipe_data. نفِّذ الخلية.
dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')
7. المهمة رقم 4 إنشاء تطبيق بحث في Vertex AI Agent Builder لأداة إنشاء الوصفات
حسنًا، بعد إنشاء جدول بيانات الوصفات، لنستخدِمه لإنشاء مصدر بيانات أساسي لإنشاء الوصفات. سيكون النهج الذي سنستخدمه مشابهًا للنهج الذي اتّبعناه مع برنامج الدردشة الآلي الخاص بالطبخ. سنستخدم Vertex AI Agent Builder لإنشاء "مخزن بيانات"، ثم نستخدمه كمصدر موثوق لتطبيق بحث.
يمكنك أن تطلب من Gemini في Google Cloud Console تذكيرك بخطوات إنشاء تطبيق بحث باستخدام Agent Builder، أو يمكنك اتّباع الخطوات الموضّحة أدناه.
- استخدِم "بحث Google" للانتقال إلى أداة إنشاء العملاء الآليين. افتح مخازن البيانات وإنشاء مخزن بيانات. في هذه المرة، اختَر نوع "مخزن بيانات BigQuery".
- في خلية اختيار الجدول، انقر على تصفّح وابحث عن
recipes. انقر على زر الاختيار بجانب الجدول. إذا ظهرت لك وصفات من مشاريع أخرى qwiklabs-gcp-...، احرص على اختيار الوصفة التي تخصّك.
ملاحظة: إذا نقرت على recipes بدلاً من زر الاختيار بجانبه، سيتم فتح علامة تبويب جديدة في المتصفّح ونقلك إلى صفحة النظرة العامة على الجدول في BigQuery. ما عليك سوى إغلاق علامة تبويب المتصفّح والنقر على زر الاختيار في "أداة إنشاء الوكيل". 3- راجِع بقية الخيارات التلقائية بدون تغييرها، ثم انقر على متابعة. 4. في صفحة مراجعة المخطط، افحص الإعدادات التلقائية الأولية، ولكن لا تغيّر أي شيء. متابعة 5. أدخِل اسمًا لمستودع البيانات recipe-data. عدِّل معرّف مستودع البيانات واضبطه على recipe-data-id. أنشئ "مستودع البيانات". 6. انتقِل إلى التطبيقات باستخدام قائمة التنقّل على يمين الصفحة، ثم انقر على إنشاء تطبيق. 7. انقر على تطبيق "بحث Google" مرة أخرى. أدخِل اسم التطبيق recipe-search واضبط رقم التعريف على recipe-search-id. اضبط اسم الشركة على Google ومتابعة. 8. في هذه المرة، تحقَّق من مصادر بيانات recipe-data. أنشئ التطبيق.
سيستغرق فهرسة جدول قاعدة البيانات بعض الوقت. في هذه الأثناء، لنستكشف ميزة "لوحة بيانات" الجديدة في BigQuery ونرى ما إذا كان بإمكاننا العثور على وصفة أو اثنتين مثيرة للاهتمام. 9- استخدِم مربّع البحث للانتقال إلى BigQuery. في أعلى BigQuery Studio، انقر على السهم المتّجه للأسفل بجانب علامة التبويب في أقصى اليسار، ثم اختَر لوحة عرض البيانات. اضبط المنطقة على us-central1.

- في مربّع البحث في لوحة عرض البيانات، ابحث عن
recipes، ثم أضِف جدولك إلى لوحة العرض. - سيتم تحميل تمثيل مرئي لجدول الوصفات في لوحة بيانات BigQuery. يمكنك استكشاف مخطط الجدول ومعاينة البيانات فيه والاطّلاع على تفاصيل أخرى. أسفل تمثيل الجدول، انقر على طلب بحث.
- ستحمّل لوحة العرض مربّع حوار طلب بحث نموذجيًا إلى حدّ ما في BigQuery مع إضافة واحدة: فوق نافذة طلب البحث، يوجد مربّع نص يمكنك استخدامه لطلب المساعدة من Gemini. لنرى ما إذا كان بإمكاننا العثور على بعض وصفات الكعك في العيّنة. نفِّذ الطلب التالي (عن طريق كتابة النص والضغط على Enter/Return لتفعيل إنشاء SQL):
Please select the title and ingredients for all the recipes with a title that contains the word cake.
- اطّلِع على لغة SQL التي تم إنشاؤها. بعد الانتهاء، نفِّذ الاستعلام.
- لا بأس بذلك! يمكنك تجربة بعض الطلبات والاستفسارات الأخرى قبل المتابعة. عند إجراء تجربة، حاوِل استخدام طلبات أقل تحديدًا لمعرفة ما ينجح وما لا ينجح. على سبيل المثال، هذا الطلب:
Do I have any chili recipes?
(لا تنسَ تنفيذ طلب البحث الجديد) تم عرض قائمة بوصفات الفلفل الحار ولكن بدون المكونات إلى أن عدّلتُ الطلب إلى:
Do I have any chili recipes? Please include their title and ingredients.
(نعم، أقول "من فضلك" عندما أطلب من الذكاء الاصطناعي إنشاء محتوى. كانت أمي ستكون فخورة جدًا بي.)
لاحظتُ أنّ إحدى وصفات الفلفل الحار تحتوي على الفطر، وهذا ليس من المكوّنات التي أريدها في الفلفل الحار. طلبتُ من Gemini مساعدتي في استبعاد هذه الوصفات.
Do I have any chili recipes? Please include their title and ingredients, and ignore any recipes with mushrooms as an ingredient.
8. المهمة رقم 5 تحديد إطار تطبيق الويب الأساسي المستند إلى Python وStreamlit، بمساعدة بسيطة من Gemini
بعد فهرسة مستودعَي البيانات في Vertex AI Agent Builder، وبعد أن أصبحت تطبيقات البحث جاهزة تقريبًا، لنبدأ في إنشاء تطبيق الويب.
سنستفيد من Gemini Code Assist أثناء العمل. لمزيد من المعلومات حول استخدام Gemini Code Assist في Visual Studio Code، يُرجى الاطّلاع على المستندات هنا.
سننفّذ عملية التطوير في محطة عمل Google Cloud، وهي بيئة تطوير مستندة إلى السحابة الإلكترونية، وفي حالتنا، تكون محملة مسبقًا بـ Eclipse Theia (وهي إصدار مفتوح المصدر من Visual Studio Code). أنشأ نص برمجي آلي في هذا التمرين مجموعة Cloud Workstation وإعداداتها، ولكن لا يزال علينا إنشاء Cloud Workstation نفسها. إذا أردت الحصول على مزيد من المعلومات حول Cloud Workstations واستخدامها، يمكنك سؤال Gemini Cloud Assist :-)
- استخدِم البحث للانتقال إلى محطات عمل Cloud، ثم انقر على إنشاء محطة عمل. أدخِل اسمًا لمحطة العمل
dev-envواستخدِم إعدادات my-config. أنشئ محطة العمل. - بعد بضع دقائق، ستظهر محطة العمل الجديدة في قائمة "محطات عملي". ابدأ
dev-env، وبعد تشغيله، شغِّل بيئة التطوير. - سيتم فتح محرِّر محطة العمل في علامة تبويب متصفّح جديدة، وبعد بضع لحظات، من المفترض أن تظهر لك واجهة Theia (Visual Studio Code) المألوفة. على يمين الواجهة، وسِّع علامة التبويب التحكّم بالمصدر وانقر على استنساخ المستودع.

- في حقل عنوان URL للمستودع، أدخِل
https://github.com/haggman/recipe-app. استنسِخ المستودع إلى المجلدuser، ثم افتح المستودع المستنسَخ لتعديله. - قبل استكشاف المجلد المستنسخ والبدء في العمل على تطبيق الويب، يجب تسجيل الدخول إلى Google Cloud باستخدام إضافة Cloud Code في المحرّر وتفعيل Gemini. لنبدأ الآن. في أسفل يمين أداة التعديل، انقر على Cloud Code - Sign in. إذا لم يظهر الرابط، انتظِر دقيقة وتحقّق مرة أخرى.

- ستعرض نافذة المحطة الطرفية عنوان URL طويلاً. افتح عنوان URL في المتصفّح واتّبِع الخطوات لمنح Cloud Code إذن الوصول إلى بيئة Google Cloud. تأكَّد من استخدام حسابك المؤقت
student-...المخصّص للتمرين وليس حسابك الشخصي على Google Cloud عند المصادقة. في مربّع الحوار الأخير، انقر على نسخ رمز التحقّق والصِقه في نافذة الوحدة الطرفية المعلقة في علامة تبويب متصفّح Cloud Workstation. - بعد بضع لحظات، سيتغيّر رابط Cloud Code في أسفل يمين المحرّر إلى Cloud Code - No Project. انقر على الرابط الجديد لاختيار مشروع. من المفترض أن تفتح لوحة الأوامر في أعلى المحرِّر. انقر على اختيار مشروع على السحابة الإلكترونية من Google واختَر مشروعك qwiklabs-gcp-.... بعد لحظات قليلة، سيتم تعديل الرابط في أسفل يمين المحرّر لعرض رقم تعريف مشروعك. يشير ذلك إلى أنّه تم ربط Cloud Code بمشروعك النشط بنجاح.
- بعد ربط Cloud Code بمشروعك، يمكنك الآن تفعيل Gemini Code Assist. في أسفل يسار واجهة المحرّر، انقر على شعار Gemini المشطوب. سيتم فتح لوحة Gemini Chat على يمين أداة التعديل. انقر على اختيار مشروع Google Cloud. عند فتح لوحة الأوامر، اختَر مشروعك qwiklabs-gcp-.... إذا اتّبعت الخطوات بشكل صحيح (ولم تُجرِ Google أي تغييرات)، من المفترض أن تظهر لك الآن نافذة محادثة نشطة مع Gemini.

- أخيرًا، لنضبط نافذة المحطة الطرفية للمحرّر بشكل متساوٍ. استخدِم قائمة الهمبرغر > عرض > المحطة الطرفية لفتح نافذة المحطة الطرفية. تنفيذ
gcloud initمرّة أخرى، استخدِم الرابط للسماح لمحطة Cloud Shell الطرفية بالعمل مع مشروعqwiklabs-gcp-.... عندما يُطلب منك ذلك، اختَر الخيار الرقمي لمشروعكqwiklabs-gcp-.... - ممتاز، بعد إعداد كل من نافذة الأوامر ومحادثة Gemini وإعدادات Cloud Code، افتح علامة التبويب المستكشف واستغرِق بضع دقائق لاستكشاف الملفات في المشروع الحالي.

- في "المستكشف"، افتح ملف
requirements.txtلتعديله. انتقِل إلى لوحة محادثة Gemini واطرح السؤال التالي:
From the dependencies specified in the requirements.txt file, what type of application are we building?
- إذًا، نحن بصدد إنشاء تطبيق ويب تفاعلي باستخدام Python وStreamlit يتفاعل مع Vertex AI وDiscovery Engine، وهذا أمر رائع. في الوقت الحالي، لنركّز على مكوّنات تطبيق الويب. كما يوضّح Gemini، فإنّ Streamlit هو إطار عمل لإنشاء تطبيقات ويب مستندة إلى البيانات في Python. اطرح السؤال التالي:
Does the current project's folder structure seem appropriate for a Streamlit app?s
وهنا يواجه Gemini عادةً مشاكل. يمكن لـ Gemini الوصول إلى الملف المفتوح حاليًا في المحرّر، ولكن لا يمكنه الاطّلاع على المشروع بأكمله. جرِّب طرح السؤال التالي:
Given the below, does the current project's file and folder structure seem appropriate for a Streamlit app?
- build.sh
- Home.py
- requirements.txt
- pages
-- Cooking_Advice.py
-- Recipe_Search.py
هل حصلت على إجابة أفضل؟
- إليك بعض المعلومات الإضافية حول Streamlit:
What can you tell me about Streamlit?
حسنًا، يمكننا أن نرى أنّ Gemini يقدّم لنا نبذة جيدة تتضمّن الإيجابيات والسلبيات.
- إذا أردت استكشاف السلبيات، يمكنك طرح السؤال التالي:
What are the major downsides or shortcomings?
لاحظ أنّنا لم نضطر إلى قول "من Streamlit" لأنّ محادثة Gemini تتيح إجراء محادثات (متعددة الجولات). يعرف Gemini ما كنا نتحدث عنه لأنّنا في جلسة محادثة. إذا أردت في أي وقت محو سجلّ محادثات Gemini، استخدِم رمز سلة المهملات في أعلى نافذة محادثة Gemini.
9- المهمة 6: نشر تطبيق الويب على Cloud Run
ممتاز، لقد أعددنا بنية التطبيق الأساسية، ولكن هل ستعمل جميعها؟ والأفضل من ذلك، أين يجب أن نستضيفه في Google Cloud؟
- في نافذة محادثة Gemini، اطرح السؤال التالي:
If I containerize this application, what compute technologies
in Google Cloud would be best for hosting it?
- تذكَّر أنّه إذا لم تكن تعمل في بيئة التطوير المتكاملة، يمكنك أيضًا استخدام Google Cloud Assist. افتح Google Cloud Console، ثم افتح Gemini Cloud Assist واطرح السؤال التالي:
If I have a containerized web application, where would be the
best place to run it in Google Cloud?
هل كانت مجموعتا النصائح متطابقتين؟ هل توافق على أي من النصائح؟ تذكَّر أنّ Gemini هو مساعد مستند إلى الذكاء الاصطناعي التوليدي، وكما هو الحال مع المساعد البشري، قد لا تتفق دائمًا مع كل ما يقوله. ومع ذلك، يمكن أن يساعدك هذا المساعد في زيادة كفاءتك بشكل كبير أثناء العمل في Google Cloud وفي أداة تعديل الرموز.
- إذا كنت بحاجة إلى تطبيق ويب قصير الأمد ومحفوظ في حاوية ولا يتم تسجيل بياناته، سيكون Cloud Run خيارًا رائعًا. في نافذة محادثة Gemini في أداة تعديل الرموز البرمجية، جرِّب الطلب التالي:
What steps would be required to run this application in
Cloud Run?
- يبدو أنّ أول ما علينا فعله هو إنشاء ملف Dockerfile. باستخدام المحرّر، أنشئ ملفًا باسم
Dockerfileفي جذر مجلد مشروعك. تأكَّد من عدم وضعه عن طريق الخطأ في مجلد الصفحات. افتح الملف لتعديله. - لنستخدِم لوحة محادثة Gemini الجانبية لإنشاء
Dockerfile. استخدِم طلبًا مشابهًا للطلب أدناه. عند عرض النتائج في المحادثة، استخدِم علامة الجمع (+) بجانب رمز النسخ أعلى Dockerfile المقترَح مباشرةً لإدراج الرمز المقترَح في Dockerfile.
Create a Dockerfile for the application in the current folder.
The dependencies are defined in requirements.txt and I want you
to use the Python 3 slim bookworm base image.
لا يعرض Gemini دائمًا الرد نفسه على الطلب نفسه. في المرة الأولى التي طلبت فيها من Gemini إنشاء Dockerfile، حصلت على الملف نفسه الذي سأقترحه عليك. تلقّيتُ للتوّ الاقتراح التالي:
```docker
# Base image
FROM python:3-bookworm-slim
# Set working directory
WORKDIR /app
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
gcc \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
# Install pip and virtualenv
RUN pip install --upgrade pip virtualenv
# Create virtual environment
RUN python3 -m venv venv
# Activate virtual environment
WORKDIR /app/venv/bin
RUN . activate
# Install Streamlit and libraries from requirements.txt
RUN pip install -r requirements.txt
# Copy application files
COPY . /app
# Expose port 8501 for Streamlit
EXPOSE 8501
# Start Streamlit app
CMD ["streamlit", "run", "main.py"]
That's a heck of a Dockerfile. I'd simplify it a bit. We don't need the apt-get section as anything needed for Python is already in our base image. Also, using a virtual environment in a Python container is a waste of space, so I'd remove that. The expose command isn't strictly necessary, but it's fine. Also, it's trying to start main.py which I don't have.
6. Tweak the Dockerfile so it resembles the following:
FROM python:3.11-slim-bookworm
WORKDIR /app
COPY requirements.txt . RUN pip install –no-cache-dir –upgrade pip &&
pip install –no-cache-dir -r requirements.txt
نسخ . .
CMD ["streamlit", "run", "Home.py"]
7. We need a place in Google cloud where we can store our container image. Let's get a little help from Gemini. In the Google Cloud Console Gemini Cloud Assist ask:
ما هو أفضل مكان في Google Cloud لتخزين صور Docker؟
8. If one of the answers you received is the Google Container Registry, then I guess Gemini hasn't gotten word that GCR is deprecated. Again, just like human assistants, you may get out of date or simply wrong answers (hallucinations). Always make sure to consider your choices carefully, even when Gemini is recommending something.
Let's go with Artifact Registry. Ask Gemini Cloud Assist how to create a docker registry in Artifact Registry named cooking-images.
كيف يمكنني استخدام gcloud لإنشاء سجل Docker في Artifact Registry؟
9. Now ask Gemini how you could use Cloud Build to build a new image named `recipe-web-app` from the Dockerfile in the current folder.
كيف يمكنني استخدام gcloud لإنشاء خدمة Cloud Run جديدة باسم recipe-web-app من صورة بالاسم نفسه من مستودع Artifact Registry الذي أنشأناه للتو؟
10. To save you a little time, I've created a script that will create the Artifact Registry repo (if needed), use Cloud Build to build and push the image to the repo, and finally to deploy the application to Cloud Run. In your code editor use the **Explorer** view to open `build.sh` and explore the file.
11. Gemini can operate via the chat window, but it can also work directly in your code file using comments, like we used in the Data Wrangling notebook, and it also may be invoked using Control+i on Windows or Command+i on Mac. Click somewhere in the build.sh script file, activate Gemini using the appropriate Command+i / Control+i command.
<img src="img/61ac2c9a245a3695.png" alt="61ac2c9a245a3695.png" width="624.00" />
12. At the prompt enter the below. Examine and **Accept** the change.
يُرجى إضافة تعليق على الملف الحالي.
How cool is that?! How many times have you had to work with someone elses code, only to have to waste time gaining a base understanding of their commentless work before you can even start making your changes. Gemini to the rescue!
13. Let's build and deploy our application. In the terminal window execute the `build.sh` file.
. build.sh
14. If you watch the build process, first it will build the Artifact Registry docker repo. Then, it uses Cloud Build to create the container image from the Dockerfile in the local folder (since we didn't supply a `cloudbuild.yaml`). Lastly, the docker image will be deployed into a new Cloud Run service. At the end of the script you'll get a Cloud Run test URL to use.
Open the returned link in a new tab of your browser. Take a moment and explore the application's structure and pages. Nice, now we need a hook in our generative AI functionality.
## Task 7: Connect the Cooking Advice page to our cookbook-search Agent Builder app
We have the framework for the web application running, but we need to connect the two work pages to our two Vertex AI Agent Builder search apps. Let's start with Cooking Advice.
1. In the Google Cloud console use search to navigate to **Chat** in Vertex AI.
2. In the right hand settings page pane set the model to **gemini-1.5-flash-002**. Slide the output token limit up to the max so the model can return longer answers if needed. Open the **Safety Filter Settings**. Set Hate speech, Sexually explicit content, and Harassment content to **Block some**. Set Dangerous content to **Block few** and **Save**. We're setting Dangerous Content a bit lower because talking about knives and cutting can be misinterpreted by Gemini as violence.
3. Slide on the toggle to enable **Grounding** then click **Customize**. Set the grounding source to **Vertex AI search** and for the datastore path use the following. Change YOUR_PROJECT_ID to the project ID found up near the End Lab button in these instructions, then **Save** the grounding settings
projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
**Note:** If you get an error then you either didn't change the project ID to your actual project ID, or you may have missed the step where you changed the old-cookbooks Agent Builder Data Store ID. Check your Agent Builder > Data Stores > old-cookbooks for its actual Data store ID.
4. Test a couple of chat messages. Perhaps start with the below. Try a few others if you like.
كيف يمكنني معرفة ما إذا كانت الطماطم ناضجة؟
5. The model works, now let's experiment with the code. Click **Clear Conversation** so our conversations don't become part of the code then click **Get Code**.
<img src="img/dce8ad7ee006cca1.png" alt="dce8ad7ee006cca1.png" width="624.00" />
6. At the top of the code window, press Open Notebook so we can experiment and perfect the code in Colab Enterprise before integrating it into our app.
7. Take a few minutes to familiarize yourself with the code. Let's make a couple of changes to adapt it to what we want. Before we start, run the first code cell to connect to the compute and install the AI Platform SDK. After the block runs you will be prompted to restart the session. Go ahead and do that.
8. Move to the code we pulled out of Vertex AI Studio. Change the name of the method *multiturn_generate_content* to `start_chat_session`.
9. Scroll to the `model = GenerativeModel(` method call. The existing code defines the `generation_config` and `safety_settings` but doesn't actually use them. Modify the creation of the `GenerativeModel` so it resembles:
model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, )
10. Lastly, add a final line to the method, just below `chat = model.start_chat()`, so the function returns the `chat` object. The finished function should look like the below.
**Note:** DO NOT COPY this code into your notebook. It is simply here as a sanity check.
def start_chat_session(): vertexai.init(project="qwiklabs-gcp-02-9a7298ceaaec", location="us-central1") tools = [ Tool.from_retrieval( retrieval=grounding.Retrieval( source=grounding.VertexAISearch(datastore="projects/qwiklabs-gcp-02-9a7298ceaaec/locations/global/collections/default_collection/dataStores/old-cookbooks-id"), ) ), ] model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, ) chat = model.start_chat() return chat
11. Scroll to the bottom of the code cell and change the final line calling the old function so it calls the new function name and stores the returned object in a variable `chat`. Once you are satisfied with your changes, run the cell.
chat = start_chat_session()
12. Create a new code cell and add the comment `# Use chat to invoke Gemini and print out the response`. Move to the next line and type resp and Gemini should auto complete the block for you. Update the prompt to `How can I tell if a tomato is ripe?`. Run the cell
response = chat.send_message("كيف يمكنني معرفة ما إذا كانت الطماطم ناضجة؟") print(response)
13. That's the response alright, but the part we really want is that nested text field. Modify the codeblock to print just that section, like:
response = chat.send_message("كيف يمكنني معرفة ما إذا كانت الطماطم ناضجة؟") print(response.candidates[0].content.parts[0].text)
14. Good, now that we have working chat code, let's integrate it into our web application. Copy all the contents of the code cell that creates the `start_chat_session` function (we won't need the test cell). If you click into the cell you can click the triple dot menu in the upper right corner and copy from there
<img src="img/17bf8d947393d4b.png" alt="17bf8d947393d4b.png" width="326.00" />
15. Switch to your Cloud Workstation editor and open pages\Cooking_Advice.py for editing.
16. Locate the comment:
أضِف الرمز الذي نسخته من دفتر ملاحظاتك أسفل هذه الرسالة
17. Paste your copied code just below the above comment. Nice, now we have the section which drives the chat engine via a grounded call to Gemini. Now let's integrate it into Streamlit.
18. Locate section of commented code directly below the comment:
في ما يلي الرمز البرمجي لإعداد متغيرات الجلسة
إزالة التعليق من هذا القسم عند توجيهك بذلك
19. Uncomment this section of code (Up till the next `Setup done, let's build the page UI` section) and explore it. It creates or retrieves the chat and history session variables.
20. Next, we need to integrate the history and chat functionality into the UI. Scroll in the code until you locate the below comment.
إليك الرمز البرمجي لإنشاء واجهة المحادثة
إزالة التعليق من الرمز أدناه عند توجيهك بذلك
21. Uncomment the rest of the code below the comment and take a moment to explore it. If you like, highlight it and get Gemini to explain its functionality.
22. Excellent, now let's build the application and deploy it. When the URL comes back, launch the application and give the Cooking Advisor page a try. Perhaps ask it about ripe tomatoes, or the bot knows a good way to prepare brussels sprouts.
. build.sh
How cool is that! Your own personal AI cooking advisor :-)
## Task 8: (Optional) Connect the Recipe Search page to the recipe-search Agent Builder app
When we connected the Cooking Advice page to its grounded source, we did so using the Gemini API directly. For Recipe Search, let's connect to the Vertex AI Agent Builder search app directly.
1. In your Cloud Workstation editor, open the `pages/Recipe_Search.py` page for editing. Investigate the structure of the page.
2. Towards the top of the file, set your project ID.
3. Examine the `search_sample` function. This code more or less comes directly from the Discovery Engine documentation [here](https://cloud.google.com/generative-ai-app-builder/docs/preview-search-results#genappbuilder_search-python). You can find a working copy in this notebook [here](https://github.com/GoogleCloudPlatform/generative-ai/blob/main/search/create_datastore_and_search.ipynb).
4. The only change I made was to return the `response.results` instead of just the results. Without this, the return type is an object designed to page through results, and that's something we don't need for our basic application.
5. Scroll to the very end of the file and uncomment the entire section below `Here are the first 5 recipes I found`.
6. Highlight the whole section you just uncommented and open Gemini Code chat. Ask, `Explain the highlighted code`. If you don't have something selected, Gemini can explain the whole file. If you highlight a section and ask Gemini to explain, or comment, or improve it, Gemini will.
Take a moment and read through the explanation. For what it's worth, using a Colab Enterprise notebook is a great way to explore the Gemini APIs before you integrate them into your application. It's especially helpful at exploring some of the newer APIs which may not be documented as well as they could be.
7. At your editor terminal window, run `build.sh` to deploy the final application. Wait until the new version is deployed before moving to the next step.
## Task 9: (Optional) Explore the final application
Take a few minutes to explore the final application.
1. In the Google Cloud console, use search to navigate to **Cloud Run**, then click into your **recipe-web-app**.
2. Locate the application test URL (towards the top) and open it in a new browser tab.
3. The application home page should appear. Note the basic layout and navigation provided by Streamlit, with the python files from the `pages` folder displayed as navigational choices, and the `Home.py` loaded as the home page. Navigate to the **Cooking Advice** page.
4. After a few moments the chat interface will appear. Again, note the nice core layout provided by Streamlit.
5. Try a few cooking related questions and see how the bot functions. Something like:
هل لديك أي نصائح لإعداد البروكلي؟
هل تريد وصفة حساء دجاج تقليدي؟
أريد معلومات عن حلوى المرينغ.
6. Now let's find a recipe or two. Navigate to the Recipe Search page and try a few searches. Something like:
لحم بالفلفل الحار
فلفل حار وذرة وأرز
فطيرة ميرنج الليمون
حلوى تحتوي على فراولة
## Congratulations!
You have created an application leveraging Vertex AI Agent Builder applications. Along the way you've explored Gemini Cloud Assist, Gemini Code Assist, and the natural language to SQL features of BigQuery's Data Canvas. Fantastic job!