Building Applications in the AI Era

1. نظرة عامة

في هذا التمرين العملي، ستستخدم منتجات الذكاء الاصطناعي التوليدي من Google لإنشاء بنية أساسية في Google Cloud بمساعدة Gemini Cloud Assist، والاستعلام عن بيانات BigQuery باستخدام ميزات اللغة الطبيعية إلى SQL في Data Canvas، وكتابة الرموز البرمجية في دفاتر ملاحظات Colab Enterprise Jupyter وفي Eclipse Theia (Visual Studio Code) بمساعدة Gemini Code Assist، ودمج ميزات البحث والدردشة المستندة إلى الذكاء الاصطناعي والمبنية على مصادر التأسيس في Cloud Storage وBigQuery في Vertex AI Agent Builder.

هدفنا هو إنشاء موقع إلكتروني للوصفات والطهي باسم AI Recipe Haven. سيتم إنشاء الموقع الإلكتروني باستخدام Python وStreamlit وسيتضمّن صفحتَين رئيسيتَين. ستستضيف ميزة Cooking Advice روبوت دردشة سننشئه باستخدام 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

  1. انقر على الزر "بدء التمرين المعملي". إذا كنت بحاجة إلى الدفع مقابل المختبر، ستفتح نافذة منبثقة لتحديد طريقة الدفع. على يمين الشاشة، تظهر لوحة تتضمّن بيانات الاعتماد المؤقتة التي يجب استخدامها في هذا الدرس التطبيقي.

52e0878388c0d9ed.png

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

2a4b7165afebf5ab.png

ملاحظة: يمكنك فتح علامات التبويب في نوافذ منفصلة جنبًا إلى جنب.

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

6463aa9b492a3b60.png

  1. في صفحة تسجيل الدخول، الصِق اسم المستخدم الذي نسخته من لوحة "تفاصيل الاتصال". بعد ذلك، انسخ كلمة المرور والصِقها.

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

  1. اقبل الأحكام والشروط.
  2. لا تُضِف خيارات استرداد الحساب أو المصادقة الثنائية (لأنّ هذا الحساب مؤقت).
  3. لا تشترك في فترات تجريبية مجانية.

بعد لحظات قليلة، سيتم فتح Cloud Console في علامة التبويب هذه.

ملاحظة: يمكنك عرض القائمة التي تتضمّن منتجات وخدمات Google Cloud من خلال النقر على "قائمة التنقّل" في أعلى يمين الصفحة.

bbdc8ea800bf0adc.png

3- المهمة 0 التحقّق من مجموعة Workstation

في جزء لاحق من هذا الدرس التطبيقي، ستستخدم Google Cloud Workstation لتنفيذ بعض أعمال التطوير. من المفترض أنّ عملية بدء هذا المختبر قد بدأت في إنشاء مجموعة "محطة العمل". قبل المتابعة، تأكَّد من أنّ المجموعة قيد الإنشاء.

  1. في Google Cloud Console، استخدِم مربّع البحث للانتقال إلى محطات عمل Cloud.
  2. استخدِم قائمة التنقّل اليمنى لعرض إدارة المجموعات.
  3. إذا كانت حالة المجموعة هي "جارٍ التحديث"، يمكنك الانتقال إلى المهمة 1. إذا لم تظهر لك أي مجموعات في أي حالة، أعِد تحميل الصفحة. إذا لم يظهر لك بعد ذلك مجموعة "جارٍ التعديل" (جارٍ الإنشاء)، انقر على إنهاء الدرس باستخدام الزر في أعلى يمين هذه التعليمات وأعِد تشغيل الدرس.

4. المهمة رقم 1 تفعيل Gemini Cloud Assist واستخدامه

في هذه المهمة، سنفعّل ميزة Gemini Cloud Assist ونستخدمها. أثناء العمل في "وحدة تحكّم Google Cloud"، يمكن أن يقدّم لك Gemini Cloud Assist نصائح ويساعدك في إنشاء البنية الأساسية لـ Google Cloud وضبطها ورصدها، ويمكنه حتى اقتراح أوامر gcloud وكتابة نصوص Terraform البرمجية.

  1. لتفعيل Cloud Assist، انقر في مربّع البحث في أعلى واجهة مستخدم Cloud Console واختَر اسأل Gemini (أو قد تكون العبارة اسأل Gemini عن Cloud Console).
  2. انتقِل إلى قسم "واجهة برمجة التطبيقات المطلوبة" في الصفحة وفعِّل واجهة برمجة التطبيقات Gemini في Google Cloud.
  3. إذا لم تظهر لك واجهة محادثة على الفور، انقر على بدء محادثة. ابدأ بطلب شرح من Gemini لبعض مزايا استخدام Cloud Workstations. خصِّص بضع دقائق لاستكشاف الردّ الذي تم إنشاؤه.
  4. بعد ذلك، اسأل عن مزايا "أداة إنشاء الوكلاء" وكيف يمكن أن تساعد في تقديم ردود توليدية مستندة إلى معلومات واقعية.
  5. أخيرًا، لنلقِ نظرة على مقارنة. في نافذة محادثة 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?
  1. الآن، في نافذة التصفّح العادية، انتقِل إلى موقع Gemini الإلكتروني العلني من هنا، وسجِّل الدخول إذا لزم الأمر، ثم اطرح السؤال نفسه. هل الردود هي نفسها أو متشابهة على الأقل؟ الخطوات المحدّدة؟ هل أحدهما أفضل بشكل ملحوظ؟ على أي حال، ضَع الردود في اعتبارك أثناء تنفيذ الخطوات التالية.

ملاحظة: إذا حاولت تنفيذ الخطوة أعلاه باستخدام حسابك المؤقت على Qwiklabs، سيتم حظرك. إذا كان حسابك التابع للعمل محظورًا أيضًا لأنّ مؤسستك لا تسمح باستخدام تطبيق Gemini للويب، ما عليك سوى تخطّي الخطوة والمتابعة. لن يؤثّر ذلك في قدرتك على إكمال هذا التمرين.

5- المهمة رقم 2 إنشاء تطبيق بحث في Vertex AI Agent Builder لروبوت الدردشة الذي يقدّم نصائح حول الطبخ

سيتضمّن الموقع الإلكتروني الذي نعمل على إنشائه صفحة نصائح حول الطهي تحتوي على روبوت محادثة مصمّم لمساعدة المستخدمين في العثور على إجابات عن الأسئلة المتعلقة بالطهي. سيتم توفير هذه الميزة من خلال Gemini استنادًا إلى مصدر يحتوي على 70 كتاب طبخ متاحًا ضمن النطاق العام. ستكون كتب الطبخ هي المصدر الموثوق الذي يستخدمه Gemini عند الإجابة عن الأسئلة.

  1. استخدِم مربّع البحث في Cloud Console للانتقال إلى Vertex AI. من لوحة البيانات، انقر على تفعيل جميع واجهات برمجة التطبيقات المقترَحة. إذا ظهر لك مربّع منبثق يطلب تفعيل واجهة Vertex AI API نفسها، يُرجى النقر على تفعيل أيضًا.
  2. استخدِم البحث للانتقال إلى أداة إنشاء الوكيل ثمّ متابعة وتفعيل واجهة برمجة التطبيقات.
  3. كما اقترح 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 السحابية، ويستفيد بشكل كامل من إمكانات الأمان والامتثال في بيئة Google Cloud Platform.

إحدى الميزات التي يوفّرها Colab Enterprise هي التكامل مع Gemini Code Assist من Google. يمكن استخدام Code Assist في عدد من أدوات تعديل الرموز البرمجية المختلفة، ويمكنه تقديم النصائح والاقتراحات المضمّنة بسلاسة أثناء كتابة الرموز البرمجية. سنستفيد من هذا المساعد المستنِد إلى الذكاء الاصطناعي التوليدي أثناء تنظيم بيانات وصفاتنا.

  1. استخدِم البحث للانتقال إلى Colab Enterprise وإنشاء دفتر ملاحظات. إذا تلقّيت عرضًا لتجربة ميزات جديدة في Colab، تجاهله. للحصول على وقت التشغيل، أي قدرة الحوسبة التي يستند إليها دفتر الملاحظات، وتشغيله، انقر على ربط في أعلى يسار دفتر الملاحظات الجديد.

386577c713522b4d.png

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

4cb787f255bac415.png

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

6a08b3ccc9c2174b.png

  1. عدِّل مربّع النص وأدخِل ما يلي:
# Data Wrangling

Import the Pandas library
  1. في مجموعة الرموز أسفل مجموعة النصوص التي أنشأتها للتو، ابدأ بكتابة imp، وسيُفترض أن تقترح Gemini Code Assist بقية عملية الاستيراد باللون الرمادي. اضغط على مفتاح التبويب لقبول الاقتراح.
import pandas as pd
  1. أسفل مربّع رمز الاستيراد، أنشئ مربّع نص آخر وأدخِل ما يلي:
Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
  1. أنشئ مجموعة رموز أخرى وعدِّلها. مرّة أخرى، ابدأ بكتابة df وافحص الرمز البرمجي الذي أنشأه Gemini Code Assistant. إذا ظهرت لك قائمة منسدلة للإكمال التلقائي لكلمات Python الرئيسية فوق الاقتراح الذي تم إنشاؤه، اضغط على مفتاح Escape للاطّلاع على الرمز البرمجي المقترَح باللون الرمادي الفاتح. اضغط على مفتاح التبويب مرة أخرى لقبول الاقتراح. إذا لم يتضمّن اقتراحك استدعاء الدالة head()، أضِفه.
df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
df.head()
  1. انقر في خلية الرمز الأولى، حيث استوردت مكتبة 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.

  1. لننظّف بعض الأعمدة. أعِد تسمية العمود 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)
  1. أزِل العمودَين source وNER واستخدِم head() لعرض الصفوف القليلة الأولى. يمكنك طلب المساعدة من Gemini مرة أخرى. نفِّذ السطرَين الأخيرَين وافحص النتائج.
# Remove the source and NER columns
df.drop(columns=['source', 'NER'], inplace=True)
df.head()
  1. لنتعرّف على عدد السجلات في مجموعة البيانات. مرّة أخرى، ابدأ باختيار أسلوب الطلب الذي تفضّله، واطرح الطلب على Gemini ليرى ما إذا كان بإمكانه مساعدتك في إنشاء الرمز.
# Count the records in the DataFrame
df.shape # count() will also work
  1. من المحتمل أنّ يكون عدد السجلات البالغ 2.23 مليون أكبر من عدد الوصفات التي يمكننا إعدادها. من المحتمل أن تستغرق عملية الفهرسة في "أداة إنشاء العملاء الافتراضيين" وقتًا طويلاً بالنسبة إلى التمرين الذي سنقوم به اليوم. كحلّ وسط، يمكننا أخذ عيّنة من 150,000 وصفة طعام والعمل عليها. استخدِم أسلوب "الطلب > الرمز البرمجي" لأخذ العيّنة وتخزينها في DataFrame جديد باسم dfs (s تعني صغير).
# Sample out 150,000 records into a DataFrame named dfs
dfs = df.sample(n=150000)
  1. بيانات مصدر وصفات الطعام جاهزة للتحميل في BigQuery. قبل بدء عملية التحميل، لننتقل إلى BigQuery ونجهّز مجموعة بيانات لتضمين جدولنا. في Google Cloud Console، استخدِم مربّع البحث للانتقال إلى BigQuery. يمكنك النقر بزر الماوس الأيمن على BigQuery وفتحها في علامة تبويب جديدة في المتصفّح.
  2. إذا لم تكن لوحة "التحدّث مع الذكاء الاصطناعي من 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? قارِن النتائج بالخطوات القليلة التالية.

3c38e5975c5c519.png

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

e28c2fc55a04c694.png

  1. أعطِني مجموعة البيانات ومعرّف 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'
  1. استخدِم أسلوب "الطلب > الرمز" لإنشاء مجموعة من الرموز البرمجية التي ستُدرِج 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" تذكيرك بخطوات إنشاء تطبيق بحث باستخدام Agent Builder، أو يمكنك اتّباع الخطوات الموضّحة أدناه.

  1. استخدِم "بحث Google" للانتقال إلى أداة إنشاء العملاء الآليين. افتح مخازن البيانات وإنشاء مخزن بيانات. في هذه المرة، اختَر نوع "مخزن بيانات BigQuery".
  2. في خلية اختيار الجدول، انقر على تصفّح وابحث عن 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.

5d562cddb1717c32.png

  1. في مربّع البحث في "لوحة البيانات"، ابحث عن recipes، ثم أضِف جدولك إلى اللوحة.
  2. سيتم تحميل تمثيل مرئي لجدول الوصفات في لوحة BigQuery Data. يمكنك استكشاف مخطط الجدول ومعاينة البيانات فيه والاطّلاع على تفاصيل أخرى. أسفل تمثيل الجدول، انقر على طلب بحث.
  3. ستحمّل لوحة العرض مربّع حوار طلب بحث نموذجيًا إلى حدّ ما في BigQuery مع إضافة واحدة: فوق نافذة طلب البحث، يوجد مربّع نص يمكنك استخدامه لطلب المساعدة من Gemini. لنرى ما إذا كان بإمكاننا العثور على بعض وصفات الكعك في العيّنة. نفِّذ الطلب التالي (عن طريق كتابة النص والضغط على Enter/Return لتفعيل إنشاء SQL):
Please select the title and ingredients for all the recipes with a title that contains the word cake.
  1. اطّلِع على لغة SQL التي تم إنشاؤها. بعد الانتهاء، نفِّذ الاستعلام.
  2. لا بأس بذلك! يمكنك تجربة بعض الطلبات والاستفسارات الأخرى قبل المتابعة. عند إجراء تجربة، حاوِل استخدام طلبات أقل تحديدًا لمعرفة ما ينجح وما لا ينجح. على سبيل المثال، هذا الطلب:
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 :-)

  1. استخدِم البحث للانتقال إلى Cloud Workstations، ثم انقر على إنشاء محطة عمل. أدخِل اسمًا لمحطة العمل dev-env واستخدِم إعدادات my-config. أنشئ محطة العمل.
  2. بعد بضع دقائق، ستظهر محطة العمل الجديدة في قائمة "محطات عملي". ابدأ dev-env وبعد تشغيله، شغِّل بيئة التطوير.
  3. سيتم فتح محرِّر محطة العمل في علامة تبويب متصفّح جديدة، وبعد بضع لحظات، من المفترض أن تظهر لك واجهة Theia (Visual Studio Code) المألوفة. على يمين الواجهة، وسِّع علامة التبويب التحكّم بالمصدر واضغط على استنساخ المستودع.

c03d05b42d28a518.png

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

f4ebfbd96026c0d8.png

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

70e4e06ed6565329.png

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

3b2dc3820ed643e2.png

  1. في "المستكشف" (Explorer)، افتح ملف requirements.txt لتعديله. انتقِل إلى لوحة محادثة Gemini واطرح السؤال التالي:
From the dependencies specified in the requirements.txt file, what type of application are we building?
  1. لذا، نحن بصدد إنشاء تطبيق ويب تفاعلي باستخدام 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

هل حصلت على إجابة أفضل؟

  1. إليك بعض المعلومات الإضافية عن Streamlit:
What can you tell me about Streamlit?

حسنًا، يمكننا أن نرى أنّ Gemini يقدّم لنا نبذة جيدة تتضمّن الإيجابيات والسلبيات.

  1. إذا أردت استكشاف السلبيات، يمكنك طرح السؤال التالي:
What are the major downsides or shortcomings?

لاحظ أنّنا لم نضطر إلى قول "من Streamlit" لأنّ Gemini Chat يتيح إجراء محادثات مترابطة. يعرف Gemini ما كنا نتحدث عنه لأنّنا في جلسة محادثة. إذا أردت في أي وقت محو سجلّ محادثات Gemini، استخدِم رمز سلة المهملات في أعلى نافذة محادثة Gemini مع الرمز.

9. المهمة 6: نشر تطبيق الويب على Cloud Run

ممتاز، لقد وضعنا بنية التطبيق الأساسية، ولكن هل ستعمل جميعها؟ والأفضل من ذلك، أين يجب استضافته في Google Cloud؟

  1. في نافذة محادثة Gemini، اطرح السؤال التالي:
If I containerize this application, what compute technologies
in Google Cloud would be best for hosting it?
  1. تذكَّر أنّه إذا لم تكن تعمل في بيئة التطوير المتكاملة، يمكنك أيضًا استخدام 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 وفي محرّر الرموز البرمجية.

  1. إذا كنت بحاجة إلى تطبيق ويب قصير الأمد ومحفوظ في حاوية ولا يتم تسجيل بياناته، سيكون Cloud Run خيارًا رائعًا. في نافذة محادثة Gemini ضمن أداة تعديل الرموز البرمجية، جرِّب الطلب التالي:
What steps would be required to run this application in
Cloud Run?
  1. يبدو أنّ أول ما علينا فعله هو إنشاء ملف Dockerfile. باستخدام المحرّر، أنشئ ملفًا باسم Dockerfile في جذر مجلد مشروعك. تأكَّد من عدم وضعه في مجلد الصفحات عن طريق الخطأ. افتح الملف لتعديله.
  2. لنستخدِم لوحة محادثة 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

COPY . .

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 &gt; Data Stores &gt; 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("How can I tell if a tomato is ripe?") 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!