MCP Toolbox ile AlloyDB Agentic RAG Uygulaması

1. Giriş

e71e051395674233.gif

Bu codelab'de AlloyDB kümesi oluşturmayı, MCP araç kutusunu dağıtmayı ve AlloyDB'yi veri kaynağı olarak kullanacak şekilde yapılandırmayı öğreneceksiniz. Ardından, isteklerini temellendirmek için dağıtılan araç kutusunu kullanan örnek bir etkileşimli RAG uygulaması oluşturacaksınız.

f753f71c7116358a.png

MCP Toolbox hakkında daha fazla bilgiyi belgeler sayfasında ve örnek Cymbal Air uygulamasında burada bulabilirsiniz.

Bu laboratuvar, AlloyDB AI özelliklerine ayrılmış bir laboratuvar koleksiyonunun parçasıdır. Belgelerdeki AlloyDB AI sayfasında daha fazla bilgi edinebilir ve diğer laboratuvarları inceleyebilirsiniz.

Ön koşullar

  • Google Cloud Console hakkında temel bilgiler
  • Komut satırı arayüzü ve Google Cloud Shell'deki temel beceriler

Neler öğreneceksiniz?

  • Vertex AI entegrasyonu ile AlloyDB kümesi dağıtma
  • AlloyDB'ye bağlanma
  • MCP Toolbox Hizmeti'ni yapılandırma ve dağıtma
  • Dağıtılan hizmeti kullanarak örnek uygulama dağıtma

Gerekenler

  • Google Cloud hesabı ve Google Cloud projesi
  • Chrome gibi bir web tarayıcısı

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa oluşturmanız gerekir.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da sağ üst araç çubuğundaki Cloud Shell simgesini tıklayın:

Cloud Shell'i etkinleştirme

Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer. İşlem tamamlandığında aşağıdakine benzer bir ekranla karşılaşırsınız:

Ortamın bağlandığını gösteren Google Cloud Shell terminalinin ekran görüntüsü

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir yazılım yüklemeniz gerekmez.

3. Başlamadan önce

API'yi etkinleştirme

Çıkış:

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun:

Proje kimliği genellikle resimde gösterildiği gibi Cloud Shell'deki komut isteminde parantez içinde gösterilir:

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

Ardından PROJECT_ID ortam değişkenini Google Cloud proje kimliğiniz olarak ayarlayın:

PROJECT_ID=$(gcloud config get-value project)

Gerekli tüm hizmetleri etkinleştirin:

gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com

Beklenen çıktı

student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.

4. AlloyDB kümesi dağıtma

AlloyDB kümesi ve birincil örnek oluşturun. Aşağıdaki prosedürde, Google Cloud SDK kullanarak AlloyDB kümesi ve örneği oluşturma adımları açıklanmaktadır. Konsol yaklaşımını tercih ederseniz buradaki belgeleri inceleyebilirsiniz.

AlloyDB kümesi oluşturmadan önce, gelecekteki AlloyDB örneği tarafından kullanılacak VPC'mizde kullanılabilir bir özel IP aralığına ihtiyacımız var. Bu kimlik yoksa oluşturmamız, dahili Google hizmetleri tarafından kullanılmak üzere atamamız ve ardından küme ile örneği oluşturabilmemiz gerekir.

Özel IP aralığı oluşturma

AlloyDB için VPC'mizde özel hizmet erişimi yapılandırmasını ayarlamamız gerekiyor. Buradaki varsayım, projede "varsayılan" VPC ağının olduğu ve tüm işlemler için bu ağın kullanılacağıdır.

Özel IP aralığını oluşturun:

gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default

Ayrılan IP aralığını kullanarak özel bağlantı oluşturma:

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].

student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.

student@cloudshell:~ (test-project-402417)$

AlloyDB kümesi oluşturma

Bu bölümde, us-central1 bölgesinde bir AlloyDB kümesi oluşturuyoruz.

Postgres kullanıcısı için şifre tanımlayın. Kendi şifrenizi tanımlayabilir veya rastgele bir işlev kullanarak şifre oluşturabilirsiniz.

export PGPASSWORD=`openssl rand -hex 12`

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`

PostgreSQL şifresini ileride kullanmak üzere not edin.

echo $PGPASSWORD

Gelecekte postgres kullanıcısı olarak örneğe bağlanmak için bu şifreye ihtiyacınız olacaktır. Daha sonra kullanabilmek için bu kodu bir yere yazmanızı veya kopyalamanızı öneririz.

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD
bbefbfde7601985b0dee5723

Ücretsiz deneme kümesi oluşturma

AlloyDB'yi daha önce kullanmadıysanız ücretsiz bir deneme kümesi oluşturabilirsiniz:

Bölgeyi ve AlloyDB küme adını tanımlayın. us-central1 bölgesini ve alloydb-aip-01'i küme adı olarak kullanacağız:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

Kümeyi oluşturmak için komutu çalıştırın:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL

Beklenen konsol çıkışı:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

Aynı Cloud Shell oturumunda kümemiz için bir AlloyDB birincil örneği oluşturun. Bağlantınız kesilirse bölge ve küme adı ortam değişkenlerini tekrar tanımlamanız gerekir.

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

AlloyDB Standard kümesi oluşturma

Projedeki ilk AlloyDB kümeniz değilse standart küme oluşturma işlemine devam edin.

Bölgeyi ve AlloyDB küme adını tanımlayın. us-central1 bölgesini ve alloydb-aip-01'i küme adı olarak kullanacağız:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

Kümeyi oluşturmak için komutu çalıştırın:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION

Beklenen konsol çıkışı:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION 
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

Aynı Cloud Shell oturumunda kümemiz için bir AlloyDB birincil örneği oluşturun. Bağlantınız kesilirse bölge ve küme adı ortam değişkenlerini tekrar tanımlamanız gerekir.

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

AlloyDB'ye Gerekli İzinleri Verme

AlloyDB hizmet aracısına Vertex AI izinleri ekleyin.

En üstteki "+" işaretini kullanarak başka bir Cloud Shell sekmesi açın.

4ca978f5142bb6ce.png

Yeni Cloud Shell sekmesinde şunu çalıştırın:

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-11039]
student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"
Updated IAM policy for project [test-project-001-402417].
bindings:
- members:
  - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com
  role: roles/aiplatform.user
- members:
...
etag: BwYIEbe_Z3U=
version: 1
 

Sekmede "exit" yürütme komutunu kullanarak sekmeyi kapatın:

exit

5. GCE sanal makinesini hazırlama

Veritabanıyla çalışmak ve örnek uygulamanın farklı bölümlerini dağıtmak için platform olarak Google Compute Engine (GCE) sanal makinesini kullanacağız. Sanal makine kullanmak, yüklü bileşenler konusunda daha fazla esneklik sunuyor ve veri hazırlama adımları için özel AlloyDB IP'sine doğrudan erişim sağlıyor.

Hizmet Hesabı Oluşturma

MCP Toolbox'ı hizmet olarak dağıtmak ve örnek uygulamayı dağıtmak ya da barındırmak için sanal makinemizi kullanacağımızdan ilk adım, bir Google hizmet hesabı (GSA) oluşturmaktır. GSA, GCE VM tarafından kullanılır ve diğer hizmetlerle çalışabilmesi için gerekli ayrıcalıkların verilmesi gerekir.

Cloud Shell'de şunu çalıştırın:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create compute-aip --project $PROJECT_ID

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudbuild.builds.editor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/artifactregistry.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/storage.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/run.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.viewer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.client"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com \
    --role roles/secretmanager.admin

GCE sanal makinesi dağıtma

AlloyDB kümesiyle aynı bölgede ve VPC'de bir GCE VM oluşturun.

Cloud Shell'de şunu çalıştırın:

ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
Your active configuration is: [cloudshell-10282]
Created [https://www.googleapis.com/compute/v1/projects/gleb-test-short-002-470613/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE: 
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.28.55.32
STATUS: RUNNING

Postgres istemcisini yükleme

Dağıtılan sanal makineye PostgreSQL istemci yazılımını yükleyin.

Sanal makineye bağlanın:

gcloud compute ssh instance-1 --zone=us-central1-a

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417].                                                                                                                                                         
Updating project ssh metadata...done.                                                                                                                                                                                                                                              
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts.
Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$ 

Sanal makinenin içinde aşağıdaki komutu çalıştırarak yazılımı yükleyin:

sudo apt-get update
sudo apt-get install --yes postgresql-client

Beklenen konsol çıkışı:

student@instance-1:~$ sudo apt-get update
sudo apt-get install --yes postgresql-client
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
Get:4 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]
Hit:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease
Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [1652 B]
Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB]
Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
...redacted...
update-alternatives: using /usr/share/postgresql/15/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (15+248) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u7) ...

AlloyDB örneğine bağlanma

psql kullanarak sanal makineden birincil örneğe bağlanın.

Sanal makinenize açılan SSH oturumuna devam edin. Bağlantınız kesildiyse yukarıdaki komutu kullanarak tekrar bağlanın.

GCE VM'den AlloyDB'ye bağlanmak için daha önce not ettiğiniz $PGASSWORD değişkenini ve küme adını kullanın:

export PGPASSWORD=<Noted password>
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

Beklenen konsol çıkışı:

student@instance-1:~$ PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (15.13 (Debian 15.13-0+deb12u1), server 16.8)
WARNING: psql major version 15, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=>

SSH bağlantısını açık tutarak psql oturumundan çıkın:

exit

Beklenen konsol çıkışı:

postgres=> exit
student@instance-1:~$ 

6. Veritabanını başlatma

Veritabanımızı verilerle doldurmak ve uygulamamızı barındırmak için istemci VM'mizi platform olarak kullanacağız. İlk adım, bir veritabanı oluşturup bu veritabanını verilerle doldurmaktır.

Veritabanı Oluşturma

"assistantdemo" adlı bir veritabanı oluşturun.

GCE sanal makine oturumunda şunu çalıştırın:

psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"  

Beklenen konsol çıkışı:

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
CREATE DATABASE
student@instance-1:~$  

Python Ortamını Hazırlama

Devam etmek için GitHub deposundaki hazır Python komut dosyalarını kullanacağız ancak bunu yapmadan önce gerekli yazılımı yüklememiz gerekiyor.

GCE sanal makinesinde şunu çalıştırın:

sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip

Beklenen konsol çıkışı:

student@instance-1:~$ sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
The following NEW packages will be installed:
  git git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl python3.11-venv
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 52.2 MB of additional disk space will be used.
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
...redacted...
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed pip-24.0
(.venv) student@instance-1:~$

Python sürümünü doğrulayın.

GCE sanal makinesinde şunu çalıştırın:

python -V

Beklenen konsol çıkışı:

(.venv) student@instance-1:~$ python -V
Python 3.11.2
(.venv) student@instance-1:~$ 

MCP Araç Kutusu'nu yerel olarak yükleme

Veritabanları için MCP Araç Kutusu (metnin ilerleyen kısımlarında MCP araç kutusu veya araç kutusu olarak anılacaktır), farklı veri kaynaklarıyla çalışan açık kaynaklı bir MCP sunucusudur. Farklı veri kaynakları için bir soyutlama düzeyi sağlayarak ve kimlik doğrulama ile bağlantı havuzu oluşturma gibi özellikler ekleyerek araçları daha hızlı geliştirmenize yardımcı olur. Tüm özellikler hakkında resmi sayfadan bilgi edinebilirsiniz.

Örnek veri kümemizi başlatmak için MCP araç kutusunu kullanacağız. Daha sonra bu araç kutusu, Retrieval Augmented Generation (RAG) akışı sırasında uygulamamızdan gelen veri kaynağı isteklerini işlemek için MCP sunucusu olarak kullanılacak.

assistantdemo veritabanını doldurmak için MCP araç kutusunu yerel olarak yükleyelim.

GCE sanal makinesinde şunu çalıştırın:

export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

Beklenen konsol çıkışı:

(.venv) student@instance-1:~$ export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  133M  100  133M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M

Veri başlatma için araç kutusunu çalıştırma

GCE sanal makinesinde şunu çalıştırın:

Veritabanı doldurma için ortam değişkenlerini dışa aktarın:

export ALLOYDB_POSTGRES_PROJECT=$(gcloud config get-value project)
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"

Veritabanı başlatma işlemi için araç kutusunu başlatın. Bu işlem, AlloyDB'deki hedef veritabanına sorunsuz bir şekilde bağlanarak örnek verilerle doldurmanıza yardımcı olacak yerel bir süreç başlatır.

./toolbox --prebuilt alloydb-postgres

Beklenen konsol çıkışı. Çıktının son satırında "Server ready to serve!" (Sunucu hizmet vermeye hazır!) ifadesini görmelisiniz:

student@instance-1:~$ cexport ALLOYDB_POSTGRES_PROJECT=$PROJECT_ID
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"
student@instance-1:~$ ./toolbox --prebuilt alloydb-postgres
2025-09-02T18:30:58.957655886Z INFO "Using prebuilt tool configuration for alloydb-postgres" 
2025-09-02T18:30:59.507306664Z INFO "Initialized 1 sources." 
2025-09-02T18:30:59.50748379Z INFO "Initialized 0 authServices." 
2025-09-02T18:30:59.507618807Z INFO "Initialized 2 tools." 
2025-09-02T18:30:59.507726704Z INFO "Initialized 2 toolsets." 
2025-09-02T18:30:59.508258894Z INFO "Server ready to serve!" 

Veri doldurma işlemi tamamlanana kadar Cloud Shell'in bu sekmesinden çıkmayın veya sekmeyi kapatmayın.

Veritabanını Doldurma

En üstteki "+" işaretini kullanarak başka bir Cloud Shell sekmesi açın.

4ca978f5142bb6ce.png

Ardından instance-1 sanal makinesine bağlanın:

gcloud compute ssh instance-1 --zone=us-central1-a

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Linux instance-1 6.1.0-37-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep  2 21:44:07 2025 from 35.229.111.9
student@instance-1:~$ 

Alma hizmeti ve örnek uygulama kodunu içeren GitHub deposunu klonlayın.

GCE sanal makinesinde şunu çalıştırın:

git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git

Beklenen konsol çıkışı:

student@instance-1:~$ git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git
Cloning into 'cymbal-air-toolbox-demo'...
remote: Enumerating objects: 3481, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 3481 (delta 16), reused 7 (delta 5), pack-reused 3434 (from 3)
Receiving objects: 100% (3481/3481), 57.96 MiB | 6.04 MiB/s, done.
Resolving deltas: 100% (2549/2549), done.
student@instance-1:~

Hata varsa lütfen dikkat edin.

Python ortamını hazırlayın ve gerekli paketleri yükleyin:

source .venv/bin/activate
cd cymbal-air-toolbox-demo
pip install -r requirements.txt

Python yolunu depo kök klasörüne ayarlayın ve veritabanını örnek veri kümesiyle doldurmak için komut dosyasını çalıştırın. İlk komut, Python modüllerimize bir yol ekleyerek ortamımızı oluşturur. İkinci komut ise veritabanımızı verilerle doldurur.

export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py

Beklenen konsol çıkışı(redaksiyonlu). En sonunda "database init done" (Veritabanı başlatma işlemi tamamlandı) mesajını görmelisiniz:

student@instance-1:~$ source .venv/bin/activate
(.venv) student@instance-1:~$ 
(.venv) student@instance-1:~$ cd cymbal-air-toolbox-demo/
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ pip install -r requirements.txt
python run_database_init.py
Collecting fastapi==0.115.0 (from -r requirements.txt (line 1))
  Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB)
Collecting google-auth==2.40.3 (from -r requirements.txt (line 2))
  Downloading google_auth-2.40.3-py2.py3-none-any.whl.metadata (6.2 kB)
Collecting google-cloud-aiplatform==1.97.0 (from google-cloud-aiplatform[evaluation]==1.97.0->-r requirements.txt (line 3))
  Downloading google_cloud_aiplatform-1.97.0-py2.py3-none-any.whl.metadata (36 kB)
Collecting itsdangerous==2.2.0 (from -r requirements.txt (line 4))
  Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting jinja2==3.1.5 (from -r requirements.txt (line 5))
  Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)
Collecting langchain-community==0.3.25 (from -r requirements.txt (line 6))
  Downloading langchain_community-0.3.25-py3-none-any.whl.metadata (2.9 kB)
Collecting langchain==0.3.25 (from -r requirements.txt (line 7))
...

(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py
Airports table initialized
Amenities table initialized
Flights table initialized
Tickets table initialized
Policies table initialized
database init done.
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 

Artık bu sekmeyi kapatabilirsiniz.

Sanal makine oturumunda şunu çalıştırın:

exit

Cloud Shell oturumunda ise Ctrl+D tuşlarına basın veya şu komutu çalıştırın :

exit

Çalışan MCP Toolbox'ın bulunduğu ilk sekmede, çalışan araç kutusu oturumundan çıkmak için ctrl+c tuşlarına basın.

Veritabanı, uygulama için örnek verilerle doldurulmuştur.

Veritabanına bağlanıp havaalanları tablosundaki satır sayısını kontrol ederek bunu doğrulayabilirsiniz. Daha önce kullandığımız gibi psql yardımcı programını veya AlloyDB Studio'yu kullanabilirsiniz . psql kullanarak nasıl kontrol edeceğiniz aşağıda açıklanmıştır.

instance-1 VM'ye yönelik SSH oturumunda şunu çalıştırın:

export PGPASSWORD=<Noted AlloyDB password>
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"  

Beklenen konsol çıkışı:

student@instance-1:~$ REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"
 count 
-------
  7698
(1 row)

Veritabanı hazır. MCP Toolbox dağıtımına geçebiliriz.

7. MCP Toolbox'ı Cloud Run'a dağıtma

Artık MCP Toolbox'ı Cloud Run'a dağıtabiliriz. MCP araç kutusunun farklı dağıtım yöntemleri vardır. En basit yol, komut satırından çalıştırmaktır ancak ölçeklenebilir ve güvenilir bir hizmet olarak kullanmak istiyorsak Cloud Run daha iyi bir çözümdür.

İstemci kimliğini hazırlama

Uygulamanın rezervasyon işlevini kullanmak için Cloud Console'u kullanarak OAuth 2.0 istemci kimliği hazırlamamız gerekir. Bu izin olmadan, rezervasyon yapmak ve rezervasyonu veritabanına kaydetmek için Google kimlik bilgilerimizle uygulamaya giriş yapamayız.

Cloud Console'da API'ler ve Hizmetler'e gidip "OAuth izin ekranı"nı tıklayın. Sayfanın bağlantısını burada bulabilirsiniz. Bu işlem, Başlayın'ı tıkladığımız Oauth Genel Bakış sayfasını açar.

2f13a26289362f20.png

Sonraki sayfada uygulama adını ve kullanıcı desteği e-posta adresini girip İleri'yi tıklayın.

dd3721c042db26ae.png

Sonraki ekranda uygulamamız için Internal'ı (Dahili) seçip tekrar Next'i (Sonraki) tıklıyoruz.

71b6d11179ed872b.png

Ardından, iletişim e-posta adresini tekrar girip İleri'yi tıklıyoruz.

8ff29dfd959b41f0.png

Ardından, Google API hizmetleri politikalarını kabul edip Oluştur düğmesine basıyoruz.

ca87d1200662b7f7.png

Bu işlem, bizi OAuth istemcisi oluşturabileceğimiz sayfaya yönlendirir.

56e5040805632a53.png

Ekranda açılır menüden "Web Uygulaması"nı seçip uygulama olarak "Cymbal Air"i girip URI Ekle düğmesine basın.

4e28c6700426735a.png

URI'ler, uygulama için güvenilir kaynakları temsil eder ve uygulamaya nereden erişmeye çalıştığınıza bağlıdır. Yetkili URI olarak "http://localhost:8081", yönlendirme URI'si olarak da "http://localhost:8081/login/google" adresini girdik. Tarayıcınıza bağlantı için URI olarak "http://localhost:8081" girerseniz bu değerler çalışır. Örneğin, bilgisayarınızdan SSH tüneli üzerinden bağlanırken. Bunu nasıl yapacağınızı daha sonra göstereceğiz.

9dc25f2d318097e2.png

"Oluştur" düğmesine bastıktan sonra, müşterilerinizin kimlik bilgilerini içeren bir pop-up pencere gösterilir. Kimlik bilgileri sisteme kaydedilir. Uygulamanızı başlattığınızda kullanılacak istemci kimliğini her zaman kopyalayabilirsiniz.

f5a7b6ad0858d95c.png

Bu istemci kimliğini daha sonra nerede sağlayacağınızı göreceksiniz.

Hizmet Hesabı Oluşturma

Cloud Run hizmetimiz için gerekli tüm ayrıcalıklara sahip özel bir hizmet hesabına ihtiyacımız var. Hizmetimiz için AlloyDB ve Cloud Secret Manager'a erişmemiz gerekir. Hizmet hesabı için ise toolbox-identity adını kullanacağız.

En üstteki "+" işaretini kullanarak başka bir Cloud Shell sekmesi açın.

4ca978f5142bb6ce.png

Yeni Cloud Shell sekmesinde şunu çalıştırın:

export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create toolbox-identity

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/secretmanager.secretAccessor"

Hata varsa lütfen dikkat edin. Bu komut, Cloud Run hizmeti için bir hizmet hesabı oluşturmalı ve Secret Manager, veritabanı ve Vertex AI ile çalışmak üzere ayrıcalıklar vermelidir.

Ctrl+d tuşlarına basarak veya sekmede "exit" komutunu çalıştırarak sekmeyi kapatın:

exit

MCP Araç Kutusu Yapılandırmasını Hazırlama

MCP Toolbox için yapılandırma dosyası hazırlayın. Tüm yapılandırma seçenekleri hakkında dokümanlardan bilgi edinebilirsiniz. Ancak burada, örnek tools.yaml dosyasını kullanıp küme ve örnek adı, AlloyDB şifresi ve proje kimliği gibi bazı değerleri gerçek değerlerimizle değiştireceğiz.

AlloyDB şifresini dışa aktarma:

export PGPASSWORD=<noted AlloyDB password>

Önceki adımda hazırladığımız istemci kimliğini dışa aktarın:

export CLIENT_ID=<noted OAuth 2.0 client ID for our application>

Yapılandırma dosyasını hazırlayın.

PROJECT_ID=$(gcloud config get-value project)
ADBCLUSTER=alloydb-aip-01
sed -e "s/project: retrieval-app-testing/project: $(gcloud config get-value project)/g" \
-e "s/cluster: my-alloydb-cluster/cluster: $ADBCLUSTER/g" \
-e "s/instance: my-alloydb-instance/instance: $ADBCLUSTER-pr/g" \
-e "s/password: postgres/password: $PGPASSWORD\\n    ipType: private/g" \
-e "s/^ *clientId: .*/    clientId: $CLIENT_ID/g" \
cymbal-air-toolbox-demo/tools.yaml >~/tools.yaml

Hedef veri kaynağını tanımlayan dosya bölümüne bakarsanız bağlantı için özel IP kullanmak üzere bir satır da eklediğimizi görürsünüz.

sources:
  my-pg-instance:
    kind: alloydb-postgres
    project: gleb-test-short-003-471020
    region: us-central1
    cluster: alloydb-aip-01
    instance: alloydb-aip-01-pr
    database: assistantdemo
    user: postgres
    password: L23F...
    ipType: private
authServices:
  my_google_service:
    kind: google
    clientId: 96828*******-***********.apps.googleusercontent.com

Kaynak olarak tools.yaml yapılandırmasını kullanarak bir gizli dizi oluşturun.

Sanal makine SSH konsolunda şunu çalıştırın:

gcloud secrets create tools --data-file=tools.yaml

Beklenen konsol çıkışı:

student@instance-1:~$ gcloud secrets create tools --data-file=tools.yaml
Created version [1] of the secret [tools].

MCP araç kutusunu Cloud Run hizmeti olarak dağıtma

Artık MCP Toolbox'ı Cloud Run'a hizmet olarak dağıtmaya hazırsınız. Yerel test için "./toolbox –tools-file=./tools.yaml" komutunu çalıştırabilirsiniz ancak uygulamamızın bulutta çalışmasını istiyorsak Cloud Run'da dağıtım yapmak çok daha mantıklıdır.

Sanal makine SSH oturumunda şunu çalıştırın:

export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated

Beklenen konsol çıkışı:

student@instance-1:~$ export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
gcloud run deploy toolbox \
    --image $IMAGE \
    --service-account toolbox-identity \
    --region us-central1 \
    --set-secrets "/app/tools.yaml=tools:latest" \
    --args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated
Deploying container to Cloud Run service [toolbox] in project [gleb-test-short-002-470613] region [us-central1]
✓ Deploying new service... Done.                                                                                                                                                                                                
  ✓ Creating Revision...                                                                                                                                                                                                        
  ✓ Routing traffic...                                                                                                                                                                                                          
Done.                                                                                                                                                                                                                           
Service [toolbox] revision [toolbox-00001-l9c] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-868691532292.us-central1.run.app

student@instance-1:~$

Hizmeti Doğrulama

Artık hizmetin çalışıp çalışmadığını ve uç noktaya erişip erişemediğimizi kontrol edebiliriz. Alma hizmeti uç noktasını ve kimlik doğrulama jetonunu almak için gcloud yardımcı programını kullanırız. Alternatif olarak, hizmet URI'sini Cloud Console'da da kontrol edebilirsiniz.

dd1a16ee00a861a0.png

Değeri kopyalayıp curl komutundaki "$(gcloud run services list –filter="(toolbox)" –format="value(URL)" bölümünü değiştirebilirsiniz .

URL'yi komut satırından dinamik olarak almak için:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

Beklenen konsol çıkışı:

student@instance-1:~$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")
🧰 Hello, World! 🧰student@instance-1:~$

"Hello World" mesajını görüyorsak hizmetimiz çalışıyor ve isteklere hizmet veriyor demektir.

8. Örnek Uygulama Dağıtma

Alma hizmeti çalışır duruma geldiğine göre artık örnek bir uygulama dağıtabiliriz. Uygulama, uçuşlar ve havaalanları hakkında bilgi verebilen, hatta veritabanımızdaki uçuş ve havaalanı verilerine göre uçuş rezervasyonu yapabilen bir online havaalanı asistanıdır.

Uygulama yerel olarak, buluttaki bir sanal makineye veya Cloud Run ya da Kubernetes gibi başka bir hizmete dağıtılabilir. Burada, önce sanal makineye nasıl dağıtılacağını göstereceğiz.

Ortamı hazırlama

Aynı SSH oturumunu kullanarak sanal makinemizde çalışmaya devam ediyoruz. Uygulamamızı çalıştırmak için bazı Python modüllerine ihtiyacımız var. Bunları, veritabanımızı başlatırken eklemiştik. Python sanal ortamımıza geçelim ve konumumuzu uygulama dizini olarak değiştirelim.

Sanal makine SSH oturumunda şunu çalıştırın:

source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo

Beklenen çıktı (redaksiyonlu):

student@instance-1:~$ source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$

Asistan uygulamasını çalıştırma

Uygulamayı başlatmadan önce bazı ortam değişkenlerini ayarlamamız gerekir. Uygulamanın temel işlevleri (ör. uçuş sorgulama ve havalimanı olanakları) için yalnızca uygulamayı alma hizmetine yönlendiren TOOLBOX_URL gerekir. Bu bilgiyi gcloud komutunu kullanarak alabiliriz .

Sanal makine SSH oturumunda şunu çalıştırın:

export TOOLBOX_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

Beklenen çıktı (redaksiyonlu):

student@instance-1:~/cymbal-air-toolbox-demo$ export BASE_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

Uygulamanın uçuş rezervasyonu yapma ve uçuş değiştirme gibi daha gelişmiş özelliklerini kullanmak için Google Hesabımızı kullanarak uygulamada oturum açmamız gerekir. Bu amaçla, İstemci Kimliğini Hazırlama bölümündeki OAuth istemci kimliğini kullanarak CLIENT_ID ortam değişkenini sağlamamız gerekir:

export CLIENT_ID=215....apps.googleusercontent.com

Beklenen çıktı (redaksiyonlu):

student@instance-1:~/cymbal-air-toolbox-demo$ export CLIENT_ID=215....apps.googleusercontent.com

Şimdi uygulamamızı çalıştırabiliriz:

python run_app.py

Beklenen çıktı:

student@instance-1:~/cymbal-air-toolbox-demo/llm_demo$ python run_app.py
INFO:     Started server process [2900]
INFO:     Waiting for application startup.
Loading application...
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)

Uygulamaya bağlanma

Sanal makinede çalışan uygulamaya bağlanmanın çeşitli yolları vardır. Örneğin, VPC'deki güvenlik duvarı kurallarını kullanarak sanal makinede 8081 numaralı bağlantı noktasını açabilir veya genel IP'ye sahip bir yük dengeleyici oluşturabilirsiniz. Burada, yerel bağlantı noktası 8080'i sanal makine bağlantı noktası 8081'e çeviren bir SSH tüneli kullanacağız.

Yerel makineden bağlanma

Yerel bir makineden bağlanmak istediğimizde SSH tüneli çalıştırmamız gerekir. Bu işlem gcloud compute ssh kullanılarak yapılabilir:

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081

Beklenen çıktı:

student-macbookpro:~ student$ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Warning: Permanently added 'compute.7064281075337367021' (ED25519) to the list of known hosts.
Linux instance-1.us-central1-c.c.gleb-test-001.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$

Artık tarayıcıyı açabilir ve uygulamamıza bağlanmak için http://localhost:8081 adresini kullanabiliriz. Uygulama ekranını görmemiz gerekir.

c667b9013afac3f9.png

Cloud Shell'den bağlanma

Alternatif olarak, bağlanmak için Google Cloud Shell'i kullanabiliriz. En üstteki "+" işaretini kullanarak başka bir Cloud Shell sekmesi açın.

4ca978f5142bb6ce.png

Yeni sekmede, gcloud komutunu yürüten web istemcinizin kaynak ve yönlendirme URI'sini alın:

echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"

Beklenen çıktı:

student@cloudshell:~ echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
origin:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev
redirect:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev/login/google

Ayrıca, "İstemci Kimliğini Hazırlama" bölümünde oluşturulan kimlik bilgilerimiz için "Yetkilendirilmiş JavaScript kaynakları" ve "Yetkilendirilmiş yönlendirme URI'leri" olarak URI'lerin kaynağını ve yönlendirmesini kullanın. Bu işlem, başlangıçta sağlanan http://localhost:8080 değerlerini değiştirir veya bu değerlere ekleme yapar.

OAuth 2.0 istemci kimlikleri sayfasında "Cymbal Air"i tıklayın.

b4c1430329886d9c.png

Cloud Shell için başlangıç noktası ve yönlendirme URI'lerini girip Kaydet düğmesine basın.

5651bdd6d0d1c88.png

Yeni Cloud Shell sekmesinde, gcloud komutunu çalıştırarak sanal makinenize tünel oluşturmaya başlayın:

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081

"İstenen adres atanamıyor" hatası gösterilirse lütfen bu hatayı dikkate almayın.

Beklenen çıktı:

student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
bind [::1]:8081: Cannot assign requested address
inux instance-1.us-central1-a.c.gleb-codelive-01.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat May 25 19:15:46 2024 from 35.243.235.73
student@instance-1:~$

Bu komut, Cloud Shell'inizde 8080 bağlantı noktasını açar. Bu bağlantı noktası, "Web önizlemesi" için kullanılabilir.

Cloud Shell'inizin sağ üst kısmındaki "Web önizlemesi" düğmesini tıklayın ve açılır menüden "8080 numaralı bağlantı noktasında önizle"yi seçin.

444fbf54dcd4d160.png

Uygulama arayüzü, web tarayıcınızda yeni bir sekmede açılır. "Cymbal Air Müşteri Hizmetleri Asistanı" sayfasını görebilirsiniz.

389f0ae2945beed5.png

Uygulamada oturum açma

Her şey ayarlandığında ve uygulamamız açıldığında kimlik bilgilerimizi sağlamak için uygulama ekranımızın sağ üst kısmındaki "Oturum aç" düğmesini kullanabiliriz. Bu isteğe bağlıdır ve yalnızca uygulamanın rezervasyon işlevini denemek istiyorsanız gereklidir.

a1f571371b957129.png

Kimlik bilgilerimizi seçebileceğimiz bir pop-up pencere açılır.

Uygulamada oturum açtıktan sonra uygulama hazır olur ve isteklerinizi pencerenin alt kısmındaki alana göndermeye başlayabilirsiniz.

Bu demoda, Cymbal Air müşteri hizmetleri asistanı tanıtılmaktadır. Cymbal Air, kurgusal bir yolcu havayoludur. Bu asistan, yolcuların uçuşlarını yönetmesine ve Cymbal Air'in San Francisco Uluslararası Havaalanı'ndaki (SFO) merkezi hakkında bilgi edinmesine yardımcı olan bir yapay zeka chatbot'tur.

Oturum açmadan (CLIENT_ID olmadan) aşağıdaki gibi kullanıcı sorularını yanıtlamaya yardımcı olabilir:

Denver'a bir sonraki uçuş ne zaman?

C28 kapısının çevresinde lüks mağazalar var mı?

A6 kapısının yakınında nereden kahve alabilirim?

Nereden hediye alabilirim?

Lütfen bugün SFO'dan Denver'a kalkan bir uçuş bulun.

Uygulamada oturum açtığınızda uçuş rezervasyonu yapma veya size atanan koltuğun pencere kenarı mı yoksa koridor tarafı mı olduğunu kontrol etme gibi diğer özellikleri deneyebilirsiniz.

6e7758f707c67c3e.png

Uygulama, yanıt oluşturmak için en yeni Google temel modellerini kullanır ve AlloyDB operasyonel veritabanındaki uçuşlar ve olanaklar hakkındaki bilgilerle yanıtları zenginleştirir. Bu demo uygulaması hakkında daha fazla bilgiyi projenin GitHub sayfasında bulabilirsiniz.

9. Ortamı temizleme

Artık tüm görevler tamamlandığında ortamımızı temizleyebiliriz.

Cloud Run hizmetini silme

Cloud Shell'de şunu çalıştırın:

gcloud run services delete toolbox --region us-central1

Beklenen konsol çıkışı:

student@cloudshell:~ (gleb-test-short-004)$ gcloud run services delete retrieval-service --region us-central1
Service [retrieval-service] will be deleted.

Do you want to continue (Y/n)?  Y

Deleting [retrieval-service]...done.                                                                                                                                                                                                                 
Deleted service [retrieval-service].

Cloud Run hizmeti için hizmet hesabını silme

Cloud Shell'de şunu çalıştırın:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet

Beklenen konsol çıkışı:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-222]
student@cloudshell:~ (gleb-test-short-004)$ gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
deleted service account [retrieval-identity@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$

Laboratuvarı tamamladığınızda AlloyDB örneklerini ve kümeyi yok edin.

AlloyDB kümesini ve tüm örnekleri silme

AlloyDB'nin deneme sürümünü kullandıysanız Deneme kümesini kullanarak diğer laboratuvarları ve kaynakları test etmeyi planlıyorsanız deneme kümesini silmeyin. Aynı projede başka bir deneme kümesi oluşturamazsınız.

Küme, zorlama seçeneğiyle yok edilir. Bu seçenek, kümeye ait tüm örnekleri de siler.

Bağlantınız kesildiyse ve önceki tüm ayarlar kaybolduysa Cloud Shell'de proje ve ortam değişkenlerini tanımlayın:

gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)

Kümeyi silme:

gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
All of the cluster data will be lost when the cluster is deleted.

Do you want to continue (Y/n)?  Y

Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f
Deleting cluster...done.   

AlloyDB Yedeklemelerini Silme

Kümenin tüm AlloyDB yedeklerini silin:

for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f
Deleting backup...done.                                                                                                                                                                                                                                                            

Artık VM'mizi yok edebiliriz.

GCE sanal makinesini silme

Cloud Shell'de şunu çalıştırın:

export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet
Deleted 

GCE VM ve alma hizmeti için hizmet hesabını silin

Cloud Shell'de şunu çalıştırın:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet

Beklenen konsol çıkışı:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Your active configuration is: [cloudshell-222]
deleted service account [compute-aip@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$ 

10. Tebrikler

Codelab'i tamamladığınız için tebrik ederiz.

İşlediğimiz konular

  • AlloyDB kümesini dağıtma
  • AlloyDB'ye bağlanma
  • MCP Toolbox Hizmeti'ni yapılandırma ve dağıtma
  • Dağıtılan hizmeti kullanarak örnek uygulama dağıtma

11. Anket

Çıkış:

Bu eğitimi nasıl kullanacaksınız?

Sadece okuyun Okuyun ve alıştırmaları tamamlayın