برنامه های کاربردی ساختمان در عصر هوش مصنوعی

۱. مرور کلی

در این آزمایشگاه، شما از محصولات هوش مصنوعی مولد گوگل برای ساخت زیرساخت در Google Cloud با کمک Gemini Cloud Assist استفاده خواهید کرد، با استفاده از ویژگی‌های زبان طبیعی به SQL در Data Canvas، داده‌های BigQuery را جستجو خواهید کرد، با کمک Gemini Code Assist در نوت‌بوک‌های Colab Enterprise Jupyter و در Eclipse Theia (Visual Studio Code) کد خواهید نوشت و ویژگی‌های جستجو و چت هوش مصنوعی ساخته شده بر روی Cloud Storage و منابع پایه BigQuery را در Vertex AI Agent Builder ادغام خواهید کرد.

هدف ما ایجاد یک وب‌سایت دستور پخت و آشپزی به نام AI Recipe Haven است. این سایت با پایتون و Streamlit ساخته خواهد شد و شامل دو صفحه اصلی خواهد بود. Cooking Advice میزبان یک چت‌بات خواهد بود که ما با استفاده از Gemini و یک منبع مبتنی بر Vertex AI Agent Builder که به گروهی از کتاب‌های آشپزی مرتبط است، ایجاد خواهیم کرد و مشاوره آشپزی ارائه می‌دهد و به سوالات مربوط به آشپزی پاسخ می‌دهد. Recipe Search یک موتور جستجو خواهد بود که توسط Gemini تغذیه می‌شود و این بار مبتنی بر پایگاه داده دستور پخت BigQuery است.

اگر در هر یک از کدهای این تمرین با مشکل مواجه شدید، راه‌حل‌های مربوط به همه فایل‌های کد در مخزن گیت‌هاب تمرین در شاخه راه‌حل قرار دارند.

اهداف

در این آزمایشگاه، شما یاد می‌گیرید که چگونه وظایف زیر را انجام دهید:

  • فعال‌سازی و استفاده از Gemini Cloud Assist
  • یک برنامه جستجو در Vertex AI Agent Builder برای چت‌بات توصیه آشپزی ایجاد کنید
  • بارگذاری و پاکسازی داده‌ها در یک نوت‌بوک Colab Enterprise، با کمک Gemini Code Assist
  • یک برنامه جستجو در Vertex AI Agent Builder برای تولیدکننده دستور پخت ایجاد کنید
  • با کمی کمک Gemini، هسته پایتون و برنامه وب Streamlit را شکل دهید
  • برنامه وب را در Cloud Run مستقر کنید
  • صفحه «نکات آشپزی» را به اپلیکیشن «جستجوی کتاب آشپزی» ما متصل کنید.
  • (اختیاری) صفحه جستجوی دستور پخت را به برنامه جستجوی دستور پخت Agent Builder متصل کنید
  • (اختیاری) بررسی برنامه نهایی

۲. تنظیمات و الزامات

قبل از اینکه روی دکمه شروع آزمایشگاه کلیک کنید

این دستورالعمل‌ها را بخوانید. آزمایشگاه‌ها زمان‌بندی شده‌اند و نمی‌توانید آنها را متوقف کنید. تایمر، که با کلیک روی «شروع آزمایشگاه» شروع می‌شود، نشان می‌دهد که منابع Google Cloud تا چه مدت در دسترس شما قرار خواهند گرفت.

این آزمایشگاه عملی Qwiklabs به شما امکان می‌دهد فعالیت‌های آزمایشگاهی را خودتان در یک محیط ابری واقعی انجام دهید، نه در یک محیط شبیه‌سازی یا نمایشی. این کار را با ارائه اعتبارنامه‌های موقت جدید به شما انجام می‌دهد که برای ورود و دسترسی به Google Cloud در طول آزمایشگاه از آنها استفاده می‌کنید.

آنچه شما نیاز دارید

برای تکمیل این آزمایشگاه، به موارد زیر نیاز دارید:

  • دسترسی به یک مرورگر اینترنتی استاندارد (مرورگر کروم توصیه می‌شود).
  • وقتشه که آزمایشگاه رو تموم کنیم.

توجه: اگر از قبل حساب کاربری یا پروژه شخصی گوگل کلود دارید، از آن برای این آزمایش استفاده نکنید.

توجه: اگر از پیکسل‌بوک استفاده می‌کنید، برای اجرای این آزمایشگاه، یک پنجره ناشناس باز کنید.

نحوه شروع آزمایشگاه و ورود به کنسول ابری گوگل

  1. روی دکمه شروع آزمایشگاه کلیک کنید. اگر نیاز به پرداخت هزینه آزمایشگاه دارید، یک پنجره بازشو برای شما باز می‌شود تا روش پرداخت خود را انتخاب کنید. در سمت چپ، پنلی وجود دارد که حاوی اطلاعات احراز هویت موقت است که باید برای این آزمایشگاه استفاده کنید.

52e0878388c0d9ed.png

  1. نام کاربری را کپی کنید و سپس روی باز کردن کنسول گوگل کلیک کنید. آزمایشگاه منابع را نمایش می‌دهد و سپس برگه دیگری را باز می‌کند که صفحه ورود را نشان می‌دهد.

2a4b7165afebf5ab.png

نکته: تب‌ها را در پنجره‌های جداگانه و کنار هم باز کنید.

اگر صفحه «انتخاب حساب» را مشاهده کردید، روی «استفاده از یک حساب دیگر» کلیک کنید.

6463aa9b492a3b60.png

  1. در صفحه ورود ، نام کاربری که از پنل جزئیات اتصال کپی کرده‌اید را وارد کنید. سپس رمز عبور را کپی و وارد کنید.

مهم: شما باید از اعتبارنامه‌های پنل جزئیات اتصال استفاده کنید. از اعتبارنامه‌های Qwiklabs خود استفاده نکنید. اگر حساب Google Cloud خود را دارید، از آن برای این آزمایشگاه استفاده نکنید (از پرداخت هزینه جلوگیری می‌شود). ۴. روی صفحات بعدی کلیک کنید:

  1. شرایط و ضوابط را بپذیرید.
  2. گزینه‌های بازیابی یا احراز هویت دو مرحله‌ای را اضافه نکنید (زیرا این یک حساب کاربری موقت است).
  3. برای دوره‌های آزمایشی رایگان ثبت‌نام نکنید.

پس از چند لحظه، کنسول ابری در این برگه باز می‌شود.

توجه: می‌توانید با کلیک روی منوی ناوبری در بالا سمت چپ، منو را با لیستی از محصولات و خدمات Google Cloud مشاهده کنید.

bbdc8ea800bf0adc.png

۳. وظیفه ۰. بررسی خوشه ایستگاه کاری شما

در بخش بعدی این آزمایش، شما از یک ایستگاه کاری ابری گوگل برای انجام برخی کارهای توسعه استفاده خواهید کرد. فرآیند راه‌اندازی این آزمایش باید با ایجاد خوشه ایستگاه کاری شما آغاز شده باشد. قبل از ادامه، بیایید مطمئن شویم که خوشه در حال ساخت است.

  1. در کنسول گوگل کلود، از کادر جستجو برای یافتن Cloud Workstations استفاده کنید.
  2. برای مشاهده مدیریت خوشه (Cluster management) از منوی ناوبری سمت چپ استفاده کنید.
  3. اگر کلاستری دارید که در حال به‌روزرسانی است، مشکلی نیست و می‌توانید به وظیفه ۱ بروید. اگر هیچ کلاستری را در هیچ حالتی نمی‌بینید، صفحه را رفرش کنید. اگر هنوز کلاستری در حال به‌روزرسانی (ساخت) نمی‌بینید، با استفاده از دکمه سمت چپ بالای این دستورالعمل‌ها، این آزمایشگاه را پایان دهید و آزمایشگاه را مجدداً راه‌اندازی کنید.

۴. وظیفه ۱. فعال‌سازی و استفاده از Gemini Cloud Assist

در این کار، ما Gemini Cloud Assist را فعال و استفاده خواهیم کرد. در حین کار در کنسول Google Cloud، Gemini Cloud Assist می‌تواند به شما مشاوره ارائه دهد، در ساخت، پیکربندی و نظارت بر زیرساخت Google Cloud شما کمک کند و حتی می‌تواند دستورات gcloud را پیشنهاد دهد و اسکریپت‌های Terraform را بنویسد.

  1. برای فعال کردن Cloud Assist برای استفاده، روی کادر جستجو در بالای رابط کاربری Cloud Console کلیک کنید و Ask Gemini را انتخاب کنید (یا ممکن است عبارت Ask Gemini for Cloud console به صورت زیر باشد).
  2. به بخش API مورد نیاز در صفحه بروید و Gemini for Google Cloud API را فعال کنید .
  3. اگر بلافاصله رابط چت را مشاهده نکردید، روی شروع چت کلیک کنید. با درخواست از Gemini برای توضیح برخی از مزایای استفاده از Cloud Workstations شروع کنید. چند دقیقه وقت بگذارید تا پاسخ تولید شده را بررسی کنید.
  4. در مرحله بعد، درباره مزایای Agent Builder و اینکه چگونه می‌تواند به ایجاد پاسخ‌های سازنده کمک کند، بپرسید.
  5. در نهایت، بیایید به یک مقایسه نگاهی بیندازیم. در پنجره چت Gemini در کنسول ابری گوگل، سوال زیر را بپرسید:
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 را نمی‌دهد، به سادگی از این مرحله صرف نظر کنید و به مرحله بعد بروید. این امر تاثیری بر توانایی شما در انجام این تمرین نخواهد داشت.

۵. وظیفه ۲. ایجاد یک برنامه جستجو در Vertex AI Agent Builder برای چت‌بات مشاوره آشپزی

وب‌سایتی که ما در حال ساخت آن هستیم، یک صفحه توصیه‌های آشپزی خواهد داشت که شامل یک ربات گفتگو است که برای کمک به کاربران در یافتن پاسخ سوالات مربوط به آشپزی طراحی شده است. این وب‌سایت توسط Gemini پشتیبانی می‌شود که مبتنی بر منبعی شامل ۷۰ کتاب آشپزی عمومی است. این کتاب‌های آشپزی به عنوان منبع حقیقتی عمل می‌کنند که Gemini هنگام پاسخ دادن به سوالات از آن استفاده می‌کند.

  1. از کادر جستجوی Cloud Console برای رفتن به Vertex AI استفاده کنید. از داشبورد، روی Enable All Recommended APIs کلیک کنید. اگر یک کادر بازشو در مورد نیاز به فعال کردن خود Vertex AI API مشاهده کردید، لطفاً آن را نیز فعال کنید .
  2. از جستجو برای رفتن به Agent Builder استفاده کنید، سپس ادامه دهید و API را فعال کنید .
  3. همانطور که Gemini در مشاوره قبلی ما پیشنهاد داد، ایجاد یک برنامه جستجو در Agent Builder با ایجاد یک منبع داده معتبر آغاز می‌شود. هنگامی که کاربر جستجو می‌کند، Gemini سوال و نحوه نوشتن پاسخ‌های هوشمند را درک می‌کند، اما به جای استخراج از دانش ذاتی خود، به منبع اصلی برای اطلاعات مورد استفاده در آن پاسخ نگاه می‌کند.

از منوی سمت چپ، به قسمت «ذخیره‌های داده» بروید و «ایجاد فروشگاه داده» را انتخاب کنید. ۴. کتاب‌های آشپزی عمومی که ما برای پایه‌گذاری صفحه توصیه‌های آشپزی خود استفاده می‌کنیم، در حال حاضر در یک سطل ذخیره‌سازی ابری در یک پروژه خارجی قرار دارند. نوع منبع ذخیره‌سازی ابری را انتخاب کنید. ۵. گزینه‌های پیش‌فرض مربوط به نوع اطلاعاتی که وارد می‌کنیم را بررسی کنید اما تغییر ندهید. نوع واردات را روی «پوشه» تنظیم کنید و برای مسیر سطل از این استفاده کنید: labs.roitraining.com/labs/old-cookbooks ، سپس «ادامه» . ۶. نام فروشگاه داده را old-cookbooks بگذارید. شناسه را ویرایش کرده و به old-cookbooks-id تغییر دهید و فروشگاه داده را ایجاد کنید .

سازنده‌ی عامل هوش مصنوعی Vertex از چندین نوع برنامه پشتیبانی می‌کند و فروشگاه داده به عنوان منبع حقیقت برای هر کدام عمل می‌کند. برنامه‌های جستجو برای استفاده عمومی و جستجو مناسب هستند. برنامه‌های چت برای جریان‌های مولد در برنامه‌های چت‌بات/بات صوتی مبتنی بر جریان داده هستند. برنامه‌های توصیه به ایجاد موتورهای توصیه بهتر کمک می‌کنند. و برنامه‌های عامل برای ایجاد عامل‌های مبتنی بر GenAI هستند. در نهایت، عامل احتمالاً در کاری که می‌خواهیم انجام دهیم به ما بهترین خدمات را ارائه می‌دهد، اما با توجه به محصولی که در حال حاضر پیش‌نمایش آن ارائه می‌شود، ما به نوع برنامه جستجو پایبند خواهیم بود. 7. از منوی سمت چپ برای رفتن به برنامه‌ها استفاده کنید، سپس روی ایجاد برنامه کلیک کنید. 8. نوع برنامه جستجو را انتخاب کنید . گزینه‌های مختلف را بررسی کنید اما تغییر ندهید. نام برنامه را cookbook-search بگذارید. شناسه برنامه را ویرایش و روی cookbook-search-id تنظیم کنید. شرکت را روی Google تنظیم کنید و ادامه دهید . 9. فروشگاه داده old-cookbooks را که چند مرحله پیش ایجاد کرده‌اید، بررسی کنید و برنامه جستجو را ایجاد کنید .

اگر تب Activity را بررسی کنید، احتمالاً خواهید دید که کتاب‌های آشپزی هنوز در حال وارد کردن و فهرست‌بندی هستند. بیش از ۵ دقیقه طول می‌کشد تا Agent Builder هزاران صفحه موجود در ۷۰ کتاب آشپزی که به آن داده‌ایم را فهرست‌بندی کند. در حالی که کار می‌کند، بیایید برخی از داده‌های پایگاه داده دستور پخت را برای تولیدکننده دستور پخت خود بارگذاری و پاک کنیم.

۶. وظیفه ۳. بارگذاری و پاکسازی داده‌ها در یک دفترچه یادداشت Colab Enterprise، با کمک Gemini Code Assist

گوگل کلود چند روش اصلی برای کار با ژوپیتر نوت‌بوکز ارائه می‌دهد. ما قصد داریم از جدیدترین محصول گوگل، یعنی Colab Enterprise، استفاده کنیم. برخی از شما ممکن است با محصول Colab گوگل آشنا باشید که معمولاً توسط افراد و سازمان‌هایی که مایل به آزمایش ژوپیتر نوت‌بوکز در یک محیط رایگان هستند، استفاده می‌شود. Colab Enterprise یک محصول تجاری گوگل کلود است که کاملاً با سایر محصولات ابری گوگل یکپارچه شده و از قابلیت‌های امنیتی و انطباق محیط GCP به طور کامل بهره می‌برد.

یکی از ویژگی‌هایی که Colab Enterprise ارائه می‌دهد، ادغام با Gemini Code Assist گوگل است. Code Assist را می‌توان در تعدادی از ویرایشگرهای کد مختلف استفاده کرد و می‌تواند در حین کدنویسی، مشاوره و همچنین پیشنهادهای درون‌خطی یکپارچه‌ای ارائه دهد. ما از این دستیار مولد در حین بررسی داده‌های دستور پخت خود استفاده خواهیم کرد.

  1. از جستجو برای رفتن به Colab Enterprise و ایجاد یک نوت‌بوک استفاده کنید. اگر پیشنهادی برای آزمایش ویژگی‌های جدید Colab دریافت کردید، آن را رد کنید. برای فعال کردن زمان اجرا، یعنی قدرت محاسباتی پشت نوت‌بوک، روی Connect در گوشه سمت راست بالای نوت‌بوک جدید خود کلیک کنید.

386577c713522b4d.png

  1. از منوی سه‌نقطه کنار نام فعلی دفترچه یادداشت در پنل Colab Enterprise Files برای تغییر نام آن Data Wrangling استفاده کنید.

4cb787f255bac415.png

  1. یک کادر + متن جدید ایجاد کنید و از فلش بالا برای جابجایی آن استفاده کنید تا اولین سلول در صفحه باشد.

6a08b3ccc9c2174b.png

  1. کادر متن را ویرایش کنید و وارد کنید:
# Data Wrangling

Import the Pandas library
  1. در بلوک کد زیر بلوک متنی که ایجاد کرده‌اید، شروع به تایپ imp کنید و Gemini Code Assist باید بقیه‌ی ایمپورت را با رنگ خاکستری پیشنهاد دهد. برای پذیرش پیشنهاد، کلید tab را فشار دهید.
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 را بررسی کنید. اگر یک لیست کشویی خودکار از کلمات کلیدی پایتون را روی پیشنهاد تولید شده مشاهده کردید، کلید escape را بزنید تا کد پیشنهادی خاکستری روشن را ببینید. دوباره کلید tab را بزنید تا پیشنهاد را بپذیرید. اگر پیشنهاد شما شامل فراخوانی تابع head() نبود، آن را اضافه کنید.
df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
df.head()
  1. روی اولین سلول کد خود، جایی که Pandas را وارد کرده‌اید، کلیک کنید و از منوی Commands یا صفحه کلید برای اجرای سلول انتخاب شده استفاده کنید. در صفحه کلید، shift+enter سلول را اجرا می‌کند و در صورت نیاز، فوکوس را به سلول بعدی منتقل می‌کند و یکی ایجاد می‌کند. قبل از ادامه کار، منتظر اجرای سلول بمانید.

توجه: وقتی سلولی اجرا نشده باشد، علامت [ ] را درست در سمت چپ خواهید دید. در حین اجرای یک سلول، یک انیمیشن چرخان و فعال خواهید دید. پس از اتمام اجرای سلول، عددی مانند [13] ظاهر می‌شود. 9. سلولی را که CSV را در DataFrame بارگذاری می‌کند، اجرا کنید. منتظر بمانید تا فایل بارگذاری شود و پنج ردیف اول داده‌ها را بررسی کنید. این داده‌های دستور پخت است که ما در BigQuery بارگذاری خواهیم کرد و در نهایت از آن برای راه‌اندازی مولد دستور پخت خود استفاده خواهیم کرد. 10. یک بلوک کد جدید ایجاد کنید و عبارت زیر را وارد کنید. پس از تایپ عبارت، به خط کد بعدی بروید و باید پیشنهاد df.columns را دریافت کنید. آن را بپذیرید و سپس سلول را اجرا کنید.

# List the current DataFrame column names

ما به تازگی نشان دادیم که شما واقعاً دو انتخاب برای نحوه دریافت کمک از Gemini Code Assist در یک Jupyter notebook دارید: سلول‌های متنی بالای سلول‌های کد، یا کامنت‌ها درون خود سلول کد. کامنت‌های درون سلول‌های کد در Jupyter notebooks به خوبی کار می‌کنند، اما این رویکرد در هر IDE دیگری که از Gemini Code assist گوگل پشتیبانی می‌کند نیز کار خواهد کرد.

  1. بیایید کمی ستون را پاکسازی کنیم. نام ستون Unnamed: 0 را به id تغییر دهید و آن را به uri link . از تکنیک‌های دلخواه خود برای ایجاد کد استفاده کنید، سپس وقتی به نتیجه رسیدید، سلول را اجرا کنید.
# 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. احتمالاً ۲.۲۳ میلیون رکورد، دستور پخت‌های بیشتری نسبت به زمانی است که داریم. فرآیند ایندکس‌گذاری در Agent Builder برای تمرین امروز ما احتمالاً خیلی طول می‌کشد. به عنوان یک راه حل، بیایید ۱۵۰،۰۰۰ دستور پخت را نمونه‌برداری کنیم و با آن کار کنیم. از رویکرد prompt > code خود برای گرفتن نمونه و ذخیره آن در یک DataFrame جدید به نام dfs (s برای small) استفاده کنید.
# Sample out 150,000 records into a DataFrame named dfs
dfs = df.sample(n=150000)
  1. داده‌های منبع دستور پخت ما آماده بارگذاری در BigQuery است. قبل از بارگذاری، بیایید به BigQuery برویم و یک مجموعه داده برای نگهداری جدول خود آماده کنیم. در کنسول Google Cloud از کادر جستجو برای رفتن به BigQuery استفاده کنید. می‌توانید روی BigQuery کلیک راست کرده و آن را در یک برگه مرورگر جدید باز کنید.
  2. اگر هنوز قابل مشاهده نیست، پنل گفتگوی هوش مصنوعی Gemini را با استفاده از لوگوی Gemini در سمت راست بالای کنسول ابری باز کنید. اگر از شما خواسته شد که دوباره API را فعال کنید، یا دکمه فعال‌سازی را فشار دهید یا صفحه را رفرش کنید. اعلان را اجرا کنید: 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 Explorer، روی منوی سه‌نقطه‌ای View actions در کنار شناسه پروژه خود کلیک کنید. سپس Create dataset را انتخاب کنید.

e28c2fc55a04c694.png

  1. مجموعه داده و شناسه recipe_data را وارد کنید. نوع مکان را US بگذارید و Create Dataset را انتخاب کنید . اگر خطایی مبنی بر وجود مجموعه داده از قبل دریافت کردید، به مرحله بعد بروید.

با ایجاد مجموعه داده در BigQuery، بیایید به دفترچه یادداشت خود برگردیم و درج را انجام دهیم. ۱۹. به دفترچه یادداشت Data Wrangling خود در Colab Enterprise برگردید. در یک سلول کد جدید، یک متغیر به نام project_id ایجاد کنید و از آن برای نگهداری شناسه پروژه فعلی خود استفاده کنید. در سمت چپ بالای این دستورالعمل‌ها، زیر دکمه End Lab، نگاه کنید تا شناسه پروژه فعلی را پیدا کنید. در صورت تمایل، این شناسه در صفحه اصلی Cloud Console نیز موجود است. مقدار را به متغیر project_id خود اختصاص دهید و سلول را اجرا کنید.

# Create a variable to hold the current project_id
project_id='YOUR_PROJECT_ID'
  1. از رویکرد prompt > code برای ایجاد یک بلوک کد استفاده کنید که dfs DataFrame را در جدولی به نام recipes در مجموعه داده‌ای که اخیراً recipe_data ایجاد کرده‌ایم، درج کند. سلول را اجرا کنید.
dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')

۷. وظیفه ۴. ایجاد یک برنامه جستجو در Vertex AI Agent Builder برای تولیدکننده دستور پخت

عالی شد، حالا که جدول داده‌های دستور پخت ما ایجاد شده، بیایید از آن برای ساخت یک منبع داده پایه برای مولد دستور پخت خود استفاده کنیم. رویکردی که استفاده خواهیم کرد مشابه کاری است که برای چت‌بات آشپزی خود انجام دادیم. ما از Vertex AI Agent Builder برای ایجاد یک فروشگاه داده استفاده خواهیم کرد و سپس از آن به عنوان منبع داده برای یک برنامه جستجو استفاده خواهیم کرد.

اگر مایل باشید، می‌توانید از Gemini در کنسول Google Cloud بخواهید مراحل ایجاد یک برنامه جستجوی Agent Builder را به شما یادآوری کند، یا می‌توانید مراحل ذکر شده در زیر را دنبال کنید.

  1. از جستجو برای یافتن Agent Builder استفاده کنید. Data Stores را باز کنید و Create Data Store را انتخاب کنید . این بار، نوع BigQuery Data Store را انتخاب کنید .
  2. در سلول انتخاب جدول، دکمه مرور (Browse) را فشار دهید و recipes را جستجو کنید. دکمه رادیویی کنار جدول خود را انتخاب کنید. اگر دستور پخت‌هایی از پروژه‌های دیگر qwiklabs-gcp-... می‌بینید، حتماً دستور پختی را که متعلق به شماست انتخاب کنید .

توجه: اگر به جای انتخاب دکمه رادیویی کنار recipes ، روی آنها کلیک کنید، یک تب جدید در مرورگر شما باز می‌شود و شما را به صفحه نمای کلی جدول در BigQuery می‌برد. فقط تب مرورگر را ببندید و دکمه رادیویی را در Agent Builder انتخاب کنید. ۳. بقیه گزینه‌های پیش‌فرض را بررسی کنید اما تغییر ندهید، سپس ادامه دهید . ۴. در صفحه بررسی طرحواره، پیکربندی‌های پیش‌فرض اولیه را بررسی کنید، اما چیزی را تغییر ندهید. ادامه دهید . ۵. نام datastore را recipe-data بگذارید. شناسه datastore را ویرایش کنید و آن را روی recipe-data-id تنظیم کنید. فروشگاه داده را ایجاد کنید . ۶. با استفاده از منوی ناوبری سمت چپ و Create App به Apps بروید. ۷. یک بار دیگر برنامه Search را انتخاب کنید . نام برنامه را recipe-search بگذارید و شناسه آن را recipe-search-id تنظیم کنید. نام شرکت را Google تنظیم کنید و ادامه دهید . ۸. این بار، منابع داده recipe-data را بررسی کنید. برنامه را ایجاد کنید .

مدتی طول می‌کشد تا جدول پایگاه داده ما ایندکس شود. در این مدت، بیایید با Data Canvas جدید BigQuery آزمایش کنیم و ببینیم آیا می‌توانیم یک یا دو دستور غذای جالب پیدا کنیم. ۹. از کادر جستجو برای رفتن به BigQuery استفاده کنید. در بالای BigQuery Studio، روی فلش رو به پایین کنار سمت راست‌ترین تب کلیک کنید و Data canvas را انتخاب کنید. منطقه را روی us-central1 تنظیم کنید.

5d562cddb1717c32.png

  1. در کادر جستجوی بوم داده، recipes را جستجو کنید و جدول خود را به بوم اضافه کنید .
  2. یک نمایش بصری از جدول دستور پخت‌های شما در بوم داده BigQuery بارگذاری خواهد شد. می‌توانید طرح جدول را بررسی کنید، داده‌های موجود در جدول را پیش‌نمایش کنید و سایر جزئیات را بررسی کنید. در زیر نمایش جدول، روی Query کلیک کنید.
  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.

(بله، وقتی از کسی خواهش می‌کنم، می‌گویم لطفاً. مامانم خیلی به من افتخار می‌کند.)

متوجه شدم که یکی از دستورهای پخت چیلی حاوی قارچ است، و چه کسی می‌خواهد که قارچ هم در چیلی باشد؟ از جمینی خواستم در حذف آن دستورها به من کمک کند.

Do I have any chili recipes?  Please include their title and ingredients, and ignore any recipes with mushrooms as an ingredient.

۸. وظیفه ۵. چارچوب‌بندی برنامه وب پایتون و Streamlit اصلی، با کمی کمک Gemini

حالا که هر دو مخزن داده‌ی Vertex AI Agent Builder ما ایندکس شده‌اند و برنامه‌های جستجوی ما تقریباً آماده‌ی اجرا هستند، بیایید به سراغ ساخت برنامه‌ی وب خود برویم.

ما در حین کار از Gemini Code Assist استفاده خواهیم کرد. برای اطلاعات بیشتر در مورد استفاده از Gemini Code Assist در Visual Studio Code، به مستندات اینجا مراجعه کنید.

ما توسعه خود را در یک ایستگاه کاری ابری گوگل انجام خواهیم داد؛ یک محیط توسعه مبتنی بر ابر، در مورد ما، که از قبل با Eclipse Theia (کد ویژوال استودیو متن‌باز) بارگذاری شده است. یک اسکریپت خودکار در این تمرین، خوشه و پیکربندی ایستگاه کاری ابری را برای ما ایجاد کرده است، اما ما هنوز نیاز به ایجاد خود ایستگاه کاری ابری داریم. اگر اطلاعات بیشتری در مورد ایستگاه‌های کاری ابری و کاربرد آنها می‌خواهید، باید از Gemini Cloud Assist بپرسید :-)

  1. از جستجو برای رفتن به Cloud Workstations و سپس Create Workstation استفاده کنید. نام Workstation را dev-env قرار دهید و از پیکربندی my-config استفاده کنید. ایستگاه کاری را ایجاد کنید .
  2. بعد از چند دقیقه، ایستگاه کاری جدید خود را در لیست ایستگاه‌های کاری من (My workstations) مشاهده خواهید کرد. محیط dev-env را اجرا کنید و پس از اجرا، محیط توسعه را راه‌اندازی کنید .
  3. ویرایشگر ایستگاه کاری در یک برگه مرورگر جدید باز می‌شود و پس از چند لحظه، باید رابط کاربری آشنای Theia (Visual Studio Code) را ببینید. در سمت چپ رابط، برگه Source Control را باز کرده و Clone Repository را فشار دهید.

c03d05b42d28a518.png

  1. برای آدرس مخزن، https://github.com/haggman/recipe-app را وارد کنید. مخزن را در پوشه user خود کپی کنید، سپس مخزن کپی شده را برای ویرایش باز کنید .
  2. قبل از اینکه پوشه کلون شده را بررسی کنیم و شروع به کار بر روی برنامه وب خود کنیم، باید افزونه Cloud Code ویرایشگر را در Google Cloud وارد کنیم و 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 تغییر خواهد کرد. برای انتخاب یک پروژه، روی لینک جدید کلیک کنید. پالت فرمان باید در بالای ویرایشگر باز شود. روی Select a Google Cloud project کلیک کنید و پروژه qwiklabs-gcp-... خود را انتخاب کنید. پس از چند لحظه، لینک موجود در پایین سمت چپ ویرایشگر شما به‌روزرسانی می‌شود تا شناسه پروژه شما نمایش داده شود. این نشان می‌دهد که Cloud Code با موفقیت به پروژه کاری شما متصل شده است.
  3. با اتصال Cloud Code به پروژه خود، اکنون می‌توانید Gemini Code Assist را فعال کنید. در پایین سمت راست رابط ویرایشگر خود، روی لوگوی Gemini که خط خورده است کلیک کنید. پنجره گفتگوی Gemini در سمت چپ ویرایشگر باز می‌شود. روی Select a Google Cloud Project کلیک کنید. وقتی پالت فرمان باز شد، پروژه qwiklabs-gcp-... خود را انتخاب کنید. اگر مراحل را به درستی دنبال کرده باشید (و گوگل چیزی را تغییر نداده باشد)، اکنون باید یک پنجره گفتگوی Gemini فعال را ببینید.

70e4e06ed6565329.png

  1. در نهایت، بیایید پنجره ترمینال ویرایشگر را به طور یکسان پیکربندی کنیم. از منوی همبرگری > مشاهده > ترمینال برای باز کردن پنجره ترمینال استفاده کنید. gcloud init اجرا کنید. یک بار دیگر، از لینک استفاده کنید تا به ترمینال Cloud Shell اجازه دهید در برابر پروژه qwiklabs-gcp-... شما کار کند. وقتی از شما پرسیده شد، گزینه عددی پروژه qwiklabs-gcp-... خود را انتخاب کنید.
  2. عالی، حالا که تنظیمات ترمینال، چت جمینی و Cloud Code ما انجام شده، تب اکسپلورر را باز کنید و چند دقیقه‌ای وقت بگذارید و فایل‌های پروژه فعلی را بررسی کنید.

3b2dc3820ed643e2.png

  1. در اکسپلورر، فایل requirements.txt خود را برای ویرایش باز کنید. به پنل چت Gemini بروید و بپرسید:
From the dependencies specified in the requirements.txt file, what type of application are we building?
  1. خب، ما در حال ساخت یک برنامه وب تعاملی با استفاده از پایتون و Streamlit هستیم که با Vertex AI و Discovery Engine در تعامل است، عالیه. فعلاً، بیایید روی اجزای برنامه وب تمرکز کنیم. همانطور که Gemini می‌گوید، Streamlit چارچوبی برای ساخت برنامه‌های وب داده‌محور در پایتون است. حالا بپرسید:
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 مکالمه‌ای (چند نوبتی) است. Gemini می‌داند که ما در مورد چه چیزی صحبت می‌کردیم زیرا ما در یک جلسه چت هستیم. اگر در هر مرحله‌ای خواستید تاریخچه چت Gemini را پاک کنید، از نماد سطل زباله در بالای پنجره چت کد Gemini استفاده کنید.

۹. وظیفه ۶: استقرار برنامه وب در Cloud Run

عالی، ما ساختار اصلی برنامه خود را آماده کرده‌ایم، اما آیا همه چیز کار خواهد کرد؟ بهتر است بگوییم، کجا باید آن را در Google Cloud میزبانی کنیم؟

  1. در پنجره چت Gemini، بپرسید:
If I containerize this application, what compute technologies
in Google Cloud would be best for hosting it?
  1. به یاد داشته باشید، اگر قبلاً در IDE خود کار نمی‌کردید، می‌توانید از Google Cloud Assist نیز استفاده کنید. کنسول Google Cloud را باز کنید، سپس 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 در ریشه پوشه پروژه خود ایجاد کنید. مطمئن شوید که آن را به طور تصادفی در پوشه pages قرار نمی‌دهید. فایل را برای ویرایش باز کنید.
  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.

جمینی همیشه به یک درخواست، پاسخ یکسانی نمی‌دهد. اولین باری که از جمینی یک فایل داکر خواستم، دقیقاً همان فایلی را که به شما پیشنهاد می‌کنم استفاده کنید، دریافت کردم. همین الان این پیشنهاد را دریافت کردم:

```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:


از پایتون: نسخه ۳.۱۱-slim-bookworm

دایرکتوری کاری / برنامه

‎فایل requirements.txt را کپی کنید. اجرا کنید: pip install –no-cache-dir –upgrade pip &&‎
نصب با pip –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:

بهترین مکان در گوگل کلود برای ذخیره تصاویر داکر کجاست؟

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 استفاده کنم؟

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.

.ساخت.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:

مدل = 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.

چت = شروع_چت_سشن()

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

پاسخ = chat.send_message("چگونه می‌توانم بفهمم که یک گوجه فرنگی رسیده است؟") چاپ(پاسخ)

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.

.ساخت.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:

Chili con carne

فلفل چیلی، ذرت، برنج

پای مرنگ لیمویی

دسری حاوی توت فرنگی

## 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!