Building Applications in the AI Era

1. Genel Bakış

Bu laboratuvarda, Gemini Cloud Assist'in yardımıyla Google Cloud'da altyapı oluşturmak için Google'ın üretken yapay zeka ürünlerini kullanacak, Data Canvas'ın doğal dil SQL özelliklerini kullanarak BigQuery verilerini sorgulayacaksınız. Ayrıca, Gemini Code Assist'in yardımıyla Colab Enterprise Jupyter not defterlerinde ve Eclipse Theia'da (Visual Studio Code) kod yazacak ve Cloud Storage ile BigQuery temel kaynaklarına dayalı yapay zeka arama ve sohbet özelliklerini Vertex AI Agent Builder'a entegre edeceksiniz.

Amacımız, AI Recipe Haven adlı bir yemek tarifleri ve yemek pişirme web sitesi oluşturmaktır. Site, Python ve Streamlit'te oluşturulacak ve iki ana sayfa içerecektir. Yemek Pişirme Önerileri, Gemini ve bir yemek kitabı grubuna bağlı Vertex AI Agent Builder kaynaklı bir chatbot'u barındıracak. Bu chatbot, yemek pişirmeyle ilgili tavsiyeler sunacak ve yemek pişirmeyle ilgili soruları yanıtlayacak. Recipe Search, Gemini tarafından beslenen bir arama motoru olacak. Bu sefer BigQuery yemek tarifi veritabanına dayalı olacak.

Bu alıştırmadaki kodlardan herhangi birinde takılırsanız tüm kod dosyalarının çözümleri, alıştırma GitHub deposundaki solution dalında yer alır.

Hedefler

Bu laboratuvarda, aşağıdaki görevleri nasıl gerçekleştireceğinizi öğreneceksiniz:

  • Gemini Cloud Assist'i etkinleştirme ve kullanma
  • Yemek tarifi önerisi veren chatbot için Vertex AI Agent Builder'da arama uygulaması oluşturma
  • Gemini Code Assist'in yardımıyla Colab Enterprise not defterine veri yükleme ve temizleme
  • Tarif oluşturucu için Vertex AI Agent Builder'da arama uygulaması oluşturma
  • Gemini'nin yardımıyla temel Python ve Streamlit web uygulamasını çerçeve içine alma
  • Web uygulamasını Cloud Run'a dağıtma
  • Yemek Tarifi sayfasını yemek kitabı araması yapan Agent Builder uygulamamıza bağlama
  • (İsteğe bağlı) Yemek Tarifi Arama sayfasını yemek tarifi araması yapan Agent Builder uygulamasına bağlama
  • (İsteğe bağlı) Nihai uygulamayı keşfetme

2. Kurulum ve şartlar

Laboratuvarı Başlat düğmesini tıklamadan önce

Buradaki talimatları okuyun. Laboratuvarlar süreli olduğundan duraklatılamaz. Laboratuvarı Başlat'ı tıkladığınızda başlayan zamanlayıcı, Google Cloud kaynaklarının ne süreyle kullanımınıza açık durumda kalacağını gösterir.

Bu Qwiklabs uygulamalı laboratuvarı, laboratuvar etkinliklerini gerçek bir bulut ortamında (simülasyon veya demo ortamında değil) kendi kendinize yapmanıza olanak tanır. Bu olanağın sunulabilmesi için size yeni, geçici kimlik bilgileri verilir. Bu kimlik bilgilerini laboratuvar süresince Google Cloud'da oturum açmak ve Google Cloud'a erişim için kullanırsınız.

Gerekenler

Bu laboratuvarı tamamlamak için şunlar gerekir:

  • Standart bir internet tarayıcısına erişim (Chrome tarayıcı önerilir).
  • Laboratuvarı tamamlamak için zaman.

Not: Kendi Google Cloud hesabınız veya projeniz zaten varsa bu laboratuvarda hesabınızı ya da projenizi kullanmayın.

Not: Pixelbook kullanıyorsanız bu laboratuvarı çalıştırmak için gizli pencere açın.

Laboratuvarınızı başlatma ve Google Cloud Console'da oturum açma

  1. Laboratuvarı Başlat düğmesini tıklayın. Laboratuvar için ödeme yapmanız gerekiyorsa ödeme yöntemini seçebileceğiniz bir pop-up pencere açılır. Sol taraftaki panel, bu laboratuvarda kullanmanız gereken geçici kimlik bilgileriyle doldurulur.

52e0878388c0d9ed.png

  1. Kullanıcı adını kopyalayıp Google Console'u Aç'ı tıklayın. Laboratuvar, kaynakları çalıştırır ve sonra oturum açma sayfasını gösteren başka bir sekme açar.

2a4b7165afebf5ab.png

İpucu: Sekmeleri ayrı pencerelerde, yan yana açın.

Hesap seçin sayfasını görüyorsanız Başka Bir Hesap Kullan'ı tıklayın.

6463aa9b492a3b60.png

  1. Oturum aç sayfasında, Bağlantı Ayrıntıları panelinden kopyaladığınız kullanıcı adını yapıştırın. Ardından şifreyi kopyalayıp yapıştırın.

Önemli: Bağlantı Ayrıntıları panelindeki kimlik bilgilerini kullanmanız gerekir. Qwiklabs kimlik bilgilerinizi kullanmayın. Kendi Google Cloud hesabınızı bu laboratuvarda kullanmayın (ücret ödememek için). 4. Sonraki sayfalarda ilgili düğmeleri tıklayarak ilerleyin:

  1. Hükümler ve koşulları kabul edin.
  2. Geçici bir hesap kullandığınızdan kurtarma seçenekleri veya iki faktörlü kimlik doğrulama eklemeyin.
  3. Ücretsiz denemelere kaydolmayın.

Birkaç saniye sonra Cloud Console bu sekmede açılır.

Not: Sol üstteki Gezinme menüsünü tıklayarak Google Cloud ürün ve hizmetlerinin listelendiği menüyü görüntüleyebilirsiniz.

bbdc8ea800bf0adc.png

3. 0. görev: Workstation kümenizi kontrol etme

Bu laboratuvarın sonraki bölümünde, geliştirme çalışmaları yapmak için bir Google Cloud Workstation kullanacaksınız. Bu laboratuvarın başlangıç süreci, iş istasyonunuzun kümesinin oluşturulmasına başlamış olmalıdır. Devam etmeden önce, kümenin oluşturulduğundan emin olalım.

  1. Google Cloud Console'da arama kutusunu kullanarak Cloud Workstations'a gidin.
  2. Küme yönetimi'ni görüntülemek için soldaki gezinme menüsünü kullanın.
  3. Güncelleniyor durumdaki bir kümeniz varsa 1. göreve geçebilirsiniz. Hiçbir durumda küme görmüyorsanız sayfayı yenileyin. Hâlâ bir kümenin Güncelleniyor (oluşturuluyor) durumunu görmüyorsanız bu talimatların sol üst kısmındaki düğmeyi kullanarak laboratuvarı sonlandırın ve yeniden başlatın.

4. 1. görev: Gemini Cloud Assist'i etkinleştirme ve kullanma

Bu görevde Gemini Cloud Assist'i etkinleştirip kullanacağız. Google Cloud Console'da çalışırken Gemini Cloud Assist size tavsiye verebilir, Google Cloud altyapınızı oluşturma, yapılandırma ve izleme konusunda yardımcı olabilir, hatta gcloud komutları önerebilir ve Terraform komut dosyaları yazabilir.

  1. Cloud Assist'i kullanmak için Cloud Console kullanıcı arayüzünün üst kısmındaki arama kutusunu tıklayın ve Gemini'ye sor'u (veya Cloud Console için Gemini'ye sor) seçin.
  2. Sayfanın Gerekli API bölümüne gidin ve Google Cloud için Gemini API'yi etkinleştirin.
  3. Sohbet arayüzü hemen görünmüyorsa Sohbet başlat'ı tıklayın. Gemini'den Cloud Workstation'ları kullanmanın bazı avantajlarını açıklamasını isteyerek başlayın. Oluşturulan yanıtı incelemek için birkaç dakikanızı ayırın.
  4. Ardından, Agent Builder'ın avantajları ve üretken yanıtlar oluşturmaya nasıl yardımcı olabileceği hakkında bilgi verin.
  5. Son olarak, bir karşılaştırmaya bakalım. Google Cloud Console'un Gemini sohbet penceresinde aşağıdaki soruyu sorun:
What are the major steps to creating a search app grounded in a
GCS data source using Vertex AI Agent builder?
  1. Ardından, gizli olmayan pencerenizde buradaki herkese açık Gemini web sitesine gidin, gerekirse giriş yapın ve aynı soruyu sorun. Yanıtlar aynı mı yoksa en azından benzer mi? Belirli adımlar nedir? Hangisi belirgin şekilde daha iyi? Yine de sonraki adımları uygularken bu yanıtları göz önünde bulundurun.

Not: Yukarıdaki adımı geçici Qwiklabs hesabınızı kullanarak yapmaya çalışırsanız engellenirsiniz. Kuruluşunuz Gemini web uygulamasının kullanımına izin vermediği için iş hesabınız da engellenmişse adımı atlayıp devam edin. Bu durum, bu alıştırmayı tamamlama durumunuzu etkilemez.

5. 2. görev: Yemek tarifi önerisi veren chatbot için Vertex AI Agent Builder'da arama uygulaması oluşturma

Hazırladığımız web sitesinde, kullanıcıların yemek pişirmeyle ilgili sorularına yanıt bulmalarına yardımcı olmak için tasarlanmış bir chatbot içeren bir yemek pişirme tavsiyeleri sayfası olacak. Gemini tarafından desteklenecek bu uygulama, herkese açık 70 yemek kitabı içeren bir kaynaktan yararlanacak. Yemek kitapları, Gemini'nin soruları yanıtlarken kullandığı bilgi kaynağı görevi görür.

  1. Vertex AI'a gitmek için Cloud Console arama kutusunu kullanın. Kontrol panelinde Önerilen Tüm API'leri Etkinleştir'i tıklayın. Vertex AI API'nin etkinleştirilmesi gerektiğine dair bir pop-up kutusu görürseniz lütfen bunu da etkinleştirin.
  2. Arama özelliğini kullanarak Agent Builder'a, ardından Devam ve API'yi Etkinleştir'e gidin.
  3. Gemini'nin daha önceki bir tavsiye isteğimizde önerdiği gibi, Agent Builder'da arama uygulaması oluşturma işlemi, yetkili bir veri kaynağının oluşturulmasıyla başlar. Kullanıcı arama yaptığında Gemini, soruyu ve akıllı yanıtların nasıl oluşturulacağını anlar ancak bu yanıtta kullanılan bilgiler için kendi bilgi havuzundan bilgi almak yerine güvenilir bir kaynağa bakar.

Soldaki menüden Veri Depoları'na ve Veri Deposu Oluştur'a gidin. 4. Yemek pişirme önerileri sayfamızı temellendirmek için kullandığımız herkese açık yemek kitapları şu anda harici bir projedeki Cloud Storage paketinde bulunuyor. Cloud Storage kaynak türünü seçin. 5. İçe aktardığımız bilgi türüyle ilgili varsayılan seçenekleri inceleyin ancak değiştirmeyin. İçe aktarma türünü Klasör olarak ayarlayın ve paket yolu için: labs.roitraining.com/labs/old-cookbooks kullanın, ardından Devam'ı tıklayın. 6. Veri deposuna ad verin: old-cookbooks. Kimliği old-cookbooks-id olarak değiştirip Düzenle'yi tıklayın ve veri deposunu Oluştur.

Vertex AI Agent Builder, çeşitli uygulama türlerini destekler ve Veri Deposu, her biri için doğru bilgi kaynağı olarak işlev görür. Arama uygulamaları genel kullanım ve arama için iyidir. Chat uygulamaları, Dataflow destekli chatbot/sesli bot uygulamalarındaki üretken akışlar içindir. Öneri uygulamaları, daha iyi öneri motorları oluşturmanıza yardımcı olur. Temsilci uygulamaları ise GenAI destekli temsilciler oluşturmak için kullanılır. Temsilci, yapmak istediğimiz şey için en iyi hizmeti sunacaktır. Ancak şu anda önizlemesi yapılan ürünle birlikte Arama uygulaması türünü kullanmaya devam edeceğiz. 7. Sol taraftaki menüden Uygulamalar'a gidin ve Uygulama Oluştur'u tıklayın. 8. Arama uygulaması türünü seçin. Çeşitli seçenekleri inceleyin ancak değiştirmeyin. Uygulamanın adını girin: cookbook-search. Uygulama kimliğini düzenleyin ve cookbook-search-id olarak ayarlayın. Şirketi Google olarak ayarlayın ve Devam'a gidin. 9. Birkaç adım önce oluşturduğunuz old-cookbooks veri deposunu kontrol edin ve arama uygulamasını oluşturun.

Etkinlik sekmesini incelerseniz yemek kitaplarının hâlâ içe aktarıldığını ve dizine eklendiğini görebilirsiniz. Agent Builder'ın, kendisine verdiğimiz 70 yemek kitabındaki binlerce sayfayı dizine eklemesi 5 dakikadan uzun sürer. Bu işlem devam ederken yemek tarifi üreticimiz için bazı yemek tarifi veritabanı verilerini yükleyip temizleyelim.

6. 3. görev: Gemini Code Assist'in yardımıyla Colab Enterprise not defterine veri yükleme ve temizleme

Google Cloud, Jupiter not defterleriyle çalışmanın birkaç önemli yolunu sunar. Google'ın en yeni ürünü olan Colab Enterprise'ı kullanacağız. Bazılarınız Google'ın Colab ürününü biliyor olabilir. Bu ürün, Jupiter not defterlerini ücretsiz bir ortamda denemek isteyen kişiler ve kuruluşlar tarafından yaygın olarak kullanılır. Colab Enterprise, Google'ın diğer bulut ürünleriyle tamamen entegre olan ve GCP ortamının güvenlik ve uygunluk özelliklerinden tam olarak yararlanan ticari bir Google Cloud teklifidir.

Colab Enterprise'ın sunduğu özelliklerden biri, Google'ın Gemini Code Assist ile entegrasyonudur. Code Assist, çeşitli kod düzenleyicilerde kullanılabilir ve kod yazarken hem tavsiyeler hem de sorunsuz satır içi öneriler sunabilir. Tarif verilerimizde düzenlemeler yaparken bu üretken asistandan yararlanacağız.

  1. Colab Enterprise'a ve Not defteri oluştur'a gitmek için aramayı kullanın. Yeni Colab özelliklerini deneme teklifi alırsanız teklifi reddedin. Not defterinin arkasındaki bilgi işlem gücünü (çalışma zamanı) kullanmak için yeni not defterinizin sağ üst köşesindeki Bağlan'a basın.

386577c713522b4d.png

  1. Colab Enterprise Dosyalar bölmesinde mevcut not defteri adının yanındaki üç nokta menüsünü kullanarak dosyayı Data Wrangling olarak yeniden adlandırın.

4cb787f255bac415.png

  1. Yeni bir + Metin kutusu oluşturun ve yukarı oku kullanarak sayfadaki ilk hücreye taşıyın.

6a08b3ccc9c2174b.png

  1. Metin kutusunu düzenleyip şunları girin:
# Data Wrangling

Import the Pandas library
  1. Az önce oluşturduğunuz metin bloğunun altındaki kod bloğuna imp yazın. Gemini Code Assist, içe aktarma işleminin geri kalanını gri renkte önerir. Öneriyi kabul etmek için sekme tuşuna basın.
import pandas as pd
  1. İçe aktarma kodu kutusunun altına başka bir metin kutusu oluşturun ve şunu girin:
Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
  1. Başka bir kod bloğu oluşturun ve düzenleyin. Tekrar df yazmaya başlayın ve Gemini Code Assistant tarafından oluşturulan kodu inceleyin. Oluşturulan önerinin üzerinde Python anahtar kelimelerinin yer aldığı bir otomatik tamamlama açılır listesi görürseniz önerilen açık gri kodu görmek için Esc tuşuna basın. Öneriyi kabul etmek için tekrar sekme tuşuna basın. Önerilerinizde head() işlev çağrısı yoksa bunu ekleyin.
df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
df.head()
  1. Pandas'ı içe aktardığınız ilk kod hücrenizi tıklayın ve seçili hücreyi çalıştırmak için Komutlar menüsünü veya klavyeyi kullanın. Klavyede üst karakter+enter tuşlarına basıldığında hücre çalıştırılır ve odak sonraki hücreye kaydırılır. Gerekirse yeni bir hücre oluşturulur. Devam etmeden önce hücrenin yürütülmesini bekleyin.

Not: Bir hücre yürütülmemişse hemen sol tarafta [ ] işaretini görürsünüz. Bir hücre yürütülürken dönen, çalışan bir animasyon görürsünüz. Hücre tamamlandığında [13] gibi bir sayı görünür. 9. CSV'yi DataFrame'e yükleyen hücreyi yürütün. Dosyanın yüklenmesini bekleyin ve verilerin ilk beş satırını inceleyin. Bunlar, BigQuery'ye yükleyeceğimiz ve nihayetinde yemek tarifi oluşturucumuzu temellendirmek için kullanacağımız yemek tarifi verileridir. 10. Yeni bir kod bloğu oluşturun ve aşağıdaki yorumu girin. Yorumu yazdıktan sonra bir sonraki kod satırına geçin. df.columns önerisini alırsınız. Kabul ettikten sonra hücreyi çalıştırın.

# List the current DataFrame column names

Jupyter not defterinde Gemini Code Assist'ten yardım alma konusunda iki seçeneğiniz olduğunu gösterdik: kod hücrelerinin üzerindeki metin hücreleri veya kod hücresinin içindeki yorumlar. Kod hücrelerindeki yorumlar Jupyter not defterlerinde iyi çalışır ancak bu yaklaşım, Google'ın Gemini kod yardımı özelliğini destekleyen diğer tüm IDE'lerde de işe yarar.

  1. Sütunları biraz temizleyelim. Unnamed: 0 sütununu id, link sütununu ise uri olarak yeniden adlandırın. İstem > kod teknikleri seçiminizi kullanarak kodu oluşturun, ardından tatmin edici bir sonuç elde ettiğinizde hücreyi çalıştırın.
# Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri'
df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True)
  1. source ve NER sütunlarını kaldırın ve ilk birkaç satırı görüntülemek için head() simgesini kullanın. Gemini'den yardım alın. Son iki satırı çalıştırın ve sonuçları inceleyin.
# Remove the source and NER columns
df.drop(columns=['source', 'NER'], inplace=True)
df.head()
  1. Veri kümemizde kaç kayıt olduğunu görelim. Yine istem tekniği seçiminizle başlayın ve Gemini'nin kodu oluşturmanıza yardımcı olup olamayacağını öğrenin.
# Count the records in the DataFrame
df.shape # count() will also work
  1. 2,23 milyon kayıt, muhtemelen zaman ayırabileceğimizden daha fazla yemek tarifi. Agent Builder'daki dizine ekleme işlemi, bugünkü alıştırmamız için muhtemelen çok uzun sürer. Bir uzlaşma olarak 150.000 tarifi örnekleyelim ve bu örnekle çalışalım. Sana sor > kod yaklaşımınızı kullanarak örnek alın ve dfs (küçük için s) adlı yeni bir DataFrame'de depolayın.
# Sample out 150,000 records into a DataFrame named dfs
dfs = df.sample(n=150000)
  1. Tarif kaynak verileri BigQuery'ye yüklenmeye hazır. Yüklemeyi yapmadan önce BigQuery'ye gidip tablomuzu barındıracak bir veri kümesi hazırlayalım. Google Cloud Console'da, BigQuery'ye gitmek için arama kutusunu kullanın. BigQuery'yi sağ tıklayıp yeni bir tarayıcı sekmesinde açabilirsiniz.
  2. Henüz görünmüyorsa Cloud Console'un sağ üst köşesindeki Gemini logosunu kullanarak Gemini AI Chat panelini açın. API'yi tekrar etkinleştirmeniz istenirse etkinleştir'e basın veya sayfayı yenileyin. İstemleri çalıştırın: What is a dataset used for in BigQuery? Yanıtı inceledikten sonra şu soruyu sorun: How can I create a dataset named recipe_data using the Cloud Console? Sonuçları aşağıdaki birkaç adımla karşılaştırın.

3c38e5975c5c519.png

  1. BigQuery Gezgin bölmesinde, proje kimliğinizin yanındaki üç noktalı İşlemleri göster menüsünü tıklayın. Ardından Veri kümesi oluştur'u seçin.

e28c2fc55a04c694.png

  1. recipe_data veri kümesini ve kimliğini belirtin. Konum türünü US olarak bırakın ve Veri Kümesi Oluştur'u tıklayın. Veri kümesinin zaten mevcut olduğuyla ilgili bir hata alırsanız devam edin.

BigQuery'de oluşturulan veri kümesiyle, not defterimize geri dönüp ekleme işlemini yapalım. 19. Colab Enterprise'daki Veri Düzenleme not defterinize geri dönün. Yeni bir kod hücresinde project_id adlı bir değişken oluşturun ve mevcut proje kimliğinizi saklamak için kullanın. Mevcut proje kimliğini, bu talimatların sol üst kısmındaki "Laboratuvarı sonlandır" düğmesinin altında bulabilirsiniz. Dilerseniz Cloud Console ana sayfasında da bulabilirsiniz. Değeri project_id değişkeninize atayın ve hücreyi çalıştırın.

# Create a variable to hold the current project_id
project_id='YOUR_PROJECT_ID'
  1. dfs adlı DataFrame'i, az önce oluşturduğumuz recipe_data veri kümesindeki recipes adlı bir tabloya ekleyebilecek bir kod bloğu oluşturmak için istem > kod yaklaşımını kullanın. Hücreyi çalıştırın.
dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')

7. 4. görev: Tarif oluşturucu için Vertex AI Agent Builder'da arama uygulaması oluşturma

Mükemmel. Tarif verileri tablomuzu oluşturduk. Şimdi tarif oluşturucumuz için sağlam bir veri kaynağı oluşturmak üzere bu tabloyu kullanalım. Kullanacağımız yaklaşım, yemek pişirme chatbot'umuz için uyguladığımıza benzer olacak. Vertex AI Agent Builder'ı kullanarak bir Veri Deposu oluşturacağız ve ardından bunu bir arama uygulaması için doğruluk kaynağı olarak kullanacağız.

İsterseniz Google Cloud Console'da Gemini'den Agent Builder arama uygulaması oluşturma adımlarını hatırlatmasını isteyebilir veya aşağıda listelenen adımları uygulayabilirsiniz.

  1. Temsilci Oluşturucu'ya gitmek için aramayı kullanın. Veri Depoları'nı ve Veri Deposu Oluştur'u açın. Bu kez BigQuery Veri Deposu türünü seçin.
  2. Tablo seçim hücresinde Göz at'a basın ve recipes öğesini arayın. Tablonuzun yanındaki radyo düğmesini seçin. Diğer qwiklabs-gcp-... projelerinden gelen tarifler görürseniz size ait olanı seçme unutmayın.

Not: Yanındaki radyo düğmesini seçmek yerine recipes simgesini tıklarsanız tarayıcınızda yeni bir sekme açılır ve BigQuery'deki tabloya genel bakış sayfasına yönlendirilirsiniz. Tarayıcı sekmesini kapatıp Agent Builder'da radyo düğmesini seçmeniz yeterlidir. 3. Varsayılan seçeneklerin geri kalanını inceleyin ancak değiştirmeyin, ardından Devam'ı tıklayın. 4. Şema inceleme sayfasında ilk varsayılan yapılandırmaları inceleyin ancak hiçbir şeyi değiştirmeyin. Devam 5. Veri deposuna recipe-data adını verin. Veri deposu kimliğini düzenleyip recipe-data-id olarak ayarlayın. Veri deposunu oluşturun. 6. Soldaki gezinme menüsünü kullanarak Uygulamalar'a ve Uygulama Oluştur'a gidin. 7. Arama uygulamasını tekrar seçin. Uygulamayı recipe-search olarak adlandırın ve kimliği recipe-search-id olarak ayarlayın. Şirket adını Google olarak ayarlayın ve Devam'ı tıklayın. 8. Bu kez recipe-data veri kaynaklarını kontrol edin. Uygulamayı oluşturun.

Veritabanı tablomuzun dizine eklenmesi biraz zaman alır. Bu işlem devam ederken BigQuery'nin yeni Veri Kanvası'nı deneyelim ve birkaç ilginç tarif bulabilecek miyiz bir bakalım. 9. Arama kutusunu kullanarak BigQuery'ye gidin. BigQuery Studio'nun en üstünde, en sağdaki sekmenin yanındaki aşağı oku tıklayın ve Veri kanvası'nı seçin. Bölgeyi us-central1 olarak ayarlayın.

5d562cddb1717c32.png

  1. Veri kanvası arama kutusuna recipes yazın ve tablonuzu Kanvaya ekle'yi tıklayın.
  2. Tarifler tablonuzun görsel bir temsili BigQuery veri kanvasına yüklenir. Tablonun şemasını keşfedebilir, tablodaki verileri önizleyebilir ve diğer ayrıntıları inceleyebilirsiniz. Tablo temsilinin altında Sorgula'yı tıklayın.
  3. Tuvalde, bir ek içeren, aşağı yukarı tipik bir BigQuery sorgu iletişim kutusu yüklenir: Sorgu penceresinin üzerinde, Gemini'den yardım istemek için kullanabileceğiniz bir metin kutusu bulunur. Örneğimizde pasta tarifi bulup bulamayacağımıza bakalım. Aşağıdaki istemi çalıştırın (SQL oluşturmayı tetiklemek için metni yazıp Enter/Return tuşuna basarak):
Please select the title and ingredients for all the recipes with a title that contains the word cake.
  1. Oluşturulan SQL'e bakın. İstediğiniz sonucu aldığınızda sorguyu Çalıştırın.
  2. Fena değil. Devam etmeden önce birkaç istem ve sorguyla denemeler yapabilirsiniz. Deneme yaparken neyin işe yarayıp neyin yaramadığını görmek için daha genel istemler deneyin. Örneğin, şu istem:
Do I have any chili recipes?

(Yeni sorguyu çalıştırmayı unutmayın) Acı biber tariflerinin bir listesini döndürür ancak şu şekilde değiştirene kadar malzemeleri dışarıda bırakır:

Do I have any chili recipes?  Please include their title and ingredients.

(Evet, istemde bulunduğumda lütfen diyorum. Annem çok gurur duyardı.)

Bir acı biber tarifinde mantar olduğunu fark ettim. Kim acı biberde mantar ister? Gemini'den bu tarifleri hariç tutmama yardım etmesini istedim.

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

8. 5. görev: Gemini'nin yardımıyla temel Python ve Streamlit web uygulamasını çerçeve içine alma

Her iki Vertex AI Agent Builder veri depomuzun da dizine eklenmesiyle ve arama uygulamalarımız kullanıma hazır olduğu için web uygulamamızı oluşturmaya başlayalım.

Çalışmalarımız sırasında Gemini Code Assist'ten yararlanacağız. Visual Studio Code'ta Gemini Code Assist'i kullanma hakkında daha fazla bilgi için buradaki dokümanları inceleyin.

Geliştirmemizi, bulut tabanlı bir geliştirme ortamı olan Google Cloud Workstation'da yapacağız. Bu durumda, Eclipse Theia (açık kaynak Visual Studio Code) önceden yüklenmiş olarak gelir. Bu alıştırmadaki otomatik komut dosyası, Cloud Workstation kümesini ve yapılandırmasını bizim için oluşturdu ancak Cloud Workstation'ı oluşturmamız gerekiyor. Cloud Workstation'lar ve kullanımları hakkında daha fazla bilgi edinmek istiyorsanız Gemini Cloud Assist'e sormanız gerekir :-)

  1. Arama özelliğini kullanarak Cloud Workstations'a, ardından Workstation Oluştur'a gidin. İş istasyonunu dev-env olarak adlandırın ve my-config yapılandırmasını kullanın. İş istasyonunu oluşturun.
  2. Birkaç dakika sonra yeni iş istasyonunuzu İş istasyonlarım listesinde görürsünüz. dev-env'yi başlatın ve çalıştıktan sonra geliştirme ortamını başlatın.
  3. İş istasyonu düzenleyicisi yeni bir tarayıcı sekmesinde açılır ve birkaç dakika sonra tanıdık bir Theia (Visual Studio Code) arayüzü görürsünüz. Arayüzün sol tarafında Kaynak Kontrolü sekmesini genişletin ve Depoyu Klonla'ya basın.

c03d05b42d28a518.png

  1. Depo URL'si için https://github.com/haggman/recipe-app değerini girin. Depoyu user klasörünüze klonlayın, ardından klonlanmış depoyu düzenlemek için 'ın.
  2. Klonlanmış klasörü keşfedip web uygulamamız üzerinde çalışmaya başlamadan önce düzenleyicinin Cloud Code eklentisinin Google Cloud'da oturum açmasını sağlamamız ve Gemini'yi etkinleştirmemiz gerekir. Şimdi bunu yapalım. Düzenleyicinizin sol alt kısmında Cloud Code - Oturum aç'ı tıklayın. Bağlantıyı görmüyorsanız bir dakika bekleyip tekrar kontrol edin.

f4ebfbd96026c0d8.png

  1. Terminal penceresinde uzun bir URL gösterilir. URL'yi tarayıcıda açın ve Cloud Code'a Google Cloud ortamınıza erişim izni vermek için adımları uygulayın. Kimlik doğrulama işleminde kişisel Google Cloud hesabınız yerine egzersiz geçici student-... hesabınızı kullandığınızdan emin olun. Son iletişim kutusunda doğrulama kodunu kopyalayın ve Cloud Workstation tarayıcı sekmesindeki bekleme terminali penceresine yapıştırın.
  2. Birkaç dakika sonra, düzenleyicinizin sol alt kısmındaki Cloud Code bağlantısı Cloud Code - No Project (Cloud Code - Proje Yok) olarak değişir. Proje seçmek için yeni bağlantıyı tıklayın. Komut paleti, düzenleyicinin en üstünde açılır. Bir Google Cloud projesi seçin'i tıklayın ve qwiklabs-gcp-... projenizi seçin. Birkaç dakika sonra, düzenleyicinizin sol alt kısmındaki bağlantı, proje kimliğinizi gösterecek şekilde güncellenir. Bu, Cloud Code'un çalışma projenize başarıyla eklendiğini gösterir.
  3. Cloud Code projenize bağlıyken artık Gemini Code Assist'i etkinleştirebilirsiniz. Düzenleyici arayüzünüzün sağ alt kısmında, üzeri çizili Gemini logosunu tıklayın. Gemini Chat bölmesi, düzenleyicinin sol tarafında açılır. Bir Google Cloud projesi seçin'i tıklayın. Komut paleti açıldığında qwiklabs-gcp-... projenizi seçin. Adımları doğru bir şekilde uyguladıysanız (ve Google herhangi bir değişiklik yapmadıysa) etkin bir Gemini sohbet penceresi görmelisiniz.

70e4e06ed6565329.png

  1. Son olarak, düzenleyici terminal penceresini de aynı şekilde yapılandıralım. Terminal penceresini açmak için hamburger menüsü > Görünüm > Terminal'i kullanın. gcloud init dosyasını çalıştırın. Cloud Shell terminalinin qwiklabs-gcp-... projenizle çalışmasına izin vermek için bağlantıyı tekrar kullanın. İstendiğinde qwiklabs-gcp-... projenizin sayısal seçeneğini belirleyin.
  2. Mükemmel. Terminalimiz, Gemini sohbetimiz ve Cloud Code yapılandırmalarımız hazır. Gezgin sekmesini açın ve mevcut projedeki dosyaları keşfetmek için birkaç dakikanızı ayırın.

3b2dc3820ed643e2.png

  1. Gezgin'de düzenlemek için requirements.txt dosyanızı açın. Gemini sohbet bölmesine geçin ve şunu sorun:
From the dependencies specified in the requirements.txt file, what type of application are we building?
  1. Python ve Streamlit'i kullanarak Vertex AI ve Discovery Engine ile etkileşime geçen etkileşimli bir web uygulaması oluşturuyoruz. Şimdilik web uygulaması bileşenlerine odaklanalım. Gemini'nin de belirttiği gibi Streamlit, Python'da veri odaklı web uygulamaları oluşturmaya yönelik bir çerçevedir. Şimdi şunu sorun:
Does the current project's folder structure seem appropriate for a Streamlit app?s

Gemini'nin sorun yaşama olasılığı bu aşamada artar. Gemini, şu anda düzenleyicide açık olan dosyaya erişebilir ancak projenin tamamını göremez. Şunu sormayı deneyin:

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

Daha iyi bir yanıt mı almak istiyorsunuz?

  1. Streamlit hakkında daha fazla bilgi edinelim:
What can you tell me about Streamlit?

Güzel. Gemini'nin avantajları ve dezavantajları içeren güzel bir genel bakış sunduğunu görüyoruz.

  1. Dezavantajları öğrenmek isterseniz şu soruları sorabilirsiniz:
What are the major downsides or shortcomings?

Gemini sohbeti sohbet biçiminde (çoklu turlu) olduğundan "Streamlit'ten" dememiz gerekmedi. Gemini, sohbet oturumunda olduğumuz için konuştuğumuz konuları bilir. Gemini sohbet geçmişini herhangi bir zamanda silmek isterseniz Gemini kod sohbet penceresinin üst kısmındaki çöp kutusu simgesini kullanın.

9. 6. Görev: Web uygulamasını Cloud Run'a dağıtma

Mükemmel. Temel uygulama yapımızı oluşturduk. Ancak tüm bu yapı çalışacak mı? Daha da iyisi, Google Cloud'da nerede barındırmalıyız?

  1. Gemini sohbet penceresinde şunları sorabilirsiniz:
If I containerize this application, what compute technologies
in Google Cloud would be best for hosting it?
  1. IDE'nizde çalışmıyorsanız Google Cloud Assist'i de kullanabileceğinizi unutmayın. Google Cloud Console'u, ardından Gemini Cloud Assist'i açın ve şunları sorun:
If I have a containerized web application, where would be the
best place to run it in Google Cloud?

İki öneri de aynı mıydı? Tavsiyelerden herhangi birine katılıyor musunuz yoksa katılmıyor musunuz? Gemini'nin üretken yapay zeka asistanı olduğunu ve gerçek bir asistan gibi her zaman söyledikleriyle aynı fikirde olmayacağınızı unutmayın. Yine de Google Cloud'da ve kod düzenleyicinizde çalışırken bu yardımcının her zaman yanınızda olması, işinizi çok daha verimli hale getirebilir.

  1. Durum bilgisi olmayan, kısa ömürlü, container mimarisine alınmış bir web uygulaması için Cloud Run mükemmel bir seçenektir. Kod düzenleyicinizin Gemini sohbet penceresinde şu isteği deneyin:
What steps would be required to run this application in
Cloud Run?
  1. Öncelikle bir Dockerfile oluşturmamız gerekiyor. Düzenleyiciyi kullanarak proje klasörünüzün kökünde Dockerfile adlı bir dosya oluşturun. Dosyayı yanlışlıkla Sayfalar klasörüne yerleştirmediğinizden emin olun. Dosyayı düzenlemek için açın.
  2. Dockerfile'mizi oluşturmak için yan Gemini sohbet panelini kullanalım. Aşağıdaki gibi bir istem kullanın. Sonuçlar sohbette gösterildiğinde, önerilen kodu Dockerfile'e eklemek için önerilen Dockerfile'in hemen üzerindeki kopyalama simgesinin yanındaki + simgesini kullanın.
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, aynı istem için her zaman aynı yanıtı vermez. Gemini'den ilk kez Dockerfile istediğimde, kullanmanızı önereceğim dosyayı aldım. Şu anda şu öneriyi aldım:

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

requirements.txt dosyasını kopyalayın . 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'da Docker görüntülerini depolamak için en iyi yer neresidir?

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.

Artifact Registry'de docker kayıt defteri oluşturmak için gcloud'u nasıl kullanabilirim?

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.

Yeni oluşturduğum Artifact Registry deposundaki aynı ada sahip bir görüntüden recipe-web-app adlı yeni bir Cloud Run hizmeti oluşturmak için gcloud'u nasıl kullanabilirim?

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.

Lütfen mevcut dosyaya yorum ekleyin.

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.


Bir domatesin olgun olup olmadığını nasıl anlayabilirim?

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("How can I tell if a tomato is ripe?") 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("Domatesin olgun olup olmadığını nasıl anlayabilirim?") 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:


Not defterinizden kopyaladığınız kodu bu mesajın altına ekleyin

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:

Oturum değişkenlerinizi ayarlamak için kullanabileceğiniz kod

Talimat verildiğinde bu bloğun yorumunu kaldırın

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.

Sohbet arayüzünü oluşturmak için kullanabileceğiniz kod

Talimat verildiğinde aşağıdaki kodun yorumunu kaldırın

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:

Brokoli hazırlamayla ilgili tavsiyeniz var mı?

Klasik bir tavuk çorbası tarifine ne dersiniz?

Meringues hakkında bilgi verin.

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

Acı biber, mısır, pirinç

Limonlu Bezeli Tart

Çilek içeren bir tatlı

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