AlloyDB AI ile vektör yerleştirmelerini kullanmaya başlama

AlloyDB AI ile vektör yerleştirmelerini kullanmaya başlama

Bu codelab hakkında

subjectSon güncelleme May 13, 2025
account_circleYazan: Gleb Otochkin

1. Giriş

Bu codelab'de, vektör aramayı Vertex AI gömmeleriyle birleştirerek AlloyDB AI'ı nasıl kullanacağınızı öğreneceksiniz.

17e86406ab251142.png

Ön koşullar

  • Google Cloud Console hakkında temel düzeyde bilgi
  • Komut satırı arayüzü ve Google Shell'de temel beceriler

Neler öğreneceksiniz?

  • AlloyDB kümesini ve birincil örneği dağıtma
  • Google Compute Engine sanal makinesinden AlloyDB'ye bağlanma
  • Veritabanı oluşturma ve AlloyDB AI'ı etkinleştirme
  • Verileri veritabanına yükleme
  • AlloyDB'de Vertex AI yerleştirme modelini kullanma
  • Vertex AI üretken modelini kullanarak sonucu zenginleştirme
  • Vektör dizini kullanarak performansı iyileştirme

Gerekenler

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

2. Kurulum ve Gereksinimler

Kendine ait tempoda ortam oluşturma

  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 hesap oluşturmanız gerekir.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcılarının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı değildir. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak istiyorsanız oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programına uygundur.

Cloud Shell'i başlatma

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

Google Cloud Console'da, sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortam sağlanıp bağlantı kurulabilmesi için birkaç saniye beklemeniz gerekir. İşlem tamamlandığında aşağıdakine benzer bir ekran görürsünüz:

7ffe5cbb04455448.png

Bu sanal makinede ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Hiçbir şey yüklemeniz gerekmez.

3. Başlamadan önce

API'yi etkinleştirme

Çıkış:

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

gcloud config set project [YOUR-PROJECT-ID]

PROJECT_ID ortam değişkenini 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 \
                       aiplatform
.googleapis.com

Beklenen çıkış

student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

Varsayılan bölgenizi Vertex AI embedding modellerini kullanacak şekilde yapılandırın. Vertex AI'ın kullanılabildiği yerler hakkında daha fazla bilgi edinin. Örnekte us-central1 bölgesini kullanıyoruz.

gcloud config set compute/region us-central1

4. AlloyDB'yi dağıtma

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 vardır. Bu yoksa oluşturmamız, dahili Google hizmetleri tarafından kullanılması için atamamız gerekir. Ardından kümeyi ve örneği oluşturabiliriz.

Gizli 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 bulunduğ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şturun:

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ının şifresini 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`

Gelecekte kullanmak üzere PostgreSQL şifresini not edin:

echo $PGPASSWORD

Beklenen konsol çıkışı:

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

Ücretsiz deneme kümesi oluşturma

Daha önce AlloyDB kullanmıyorsanız ücretsiz deneme kümesi oluşturabilirsiniz:

Bölgeyi ve AlloyDB küme adını tanımlayın. us-central1 bölgesini ve alloydb-aip-01 küme adını 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 Standart Kümesi Oluşturma

Projedeki ilk AlloyDB kümeniz değilse standart bir küme oluşturmaya devam edin.

Bölgeyi ve AlloyDB küme adını tanımlayın. us-central1 bölgesini ve alloydb-aip-01 küme adını 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.                                                                                                                                                                                                                                                     

5. AlloyDB'ye bağlanma

AlloyDB yalnızca özel bağlantı kullanılarak dağıtılır. Bu nedenle, veritabanıyla çalışmak için PostgreSQL istemcisinin yüklü olduğu bir sanal makineye ihtiyacımız vardır.

GCE sanal makinesi dağıtma

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

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

export ZONE=us-central1-a
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

Beklenen konsol çıkışı:

student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
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

Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/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.71.192.233
STATUS: RUNNING

Postgres Müşterisini yükleme

PostgreSQL istemci yazılımını dağıtılan sanal makineye yükleme

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.us-central1-a.c.gleb-test-short-001-418811.internal 6.1.0-18-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) 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:~$ 

Yazılımı çalıştırma komutunu sanal makinenin içine 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 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B]
Get:2 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease [6406 B]   
Hit:3 https://deb.debian.org/debian bullseye InRelease  
Get:4 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]
Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable/main amd64 Packages [1930 B]
Get:6 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
Get:7 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]
...redacted...
update-alternatives: using /usr/share/postgresql/13/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (13+225) ...
Processing triggers for man-db (2.9.4-2) ...
Processing triggers for libc-bin (2.31-13+deb11u7) ...

Örneğe bağlanma

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

instance-1 sanal makinenize açık SSH oturumunun bulunduğu Cloud Shell sekmesinde.

GCE sanal makinesinden AlloyDB'ye bağlanmak için not edilen AlloyDB şifresini (PGPASSWORD) ve AlloyDB küme kimliğini kullanın:

export PGPASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export 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:~$ export PGPASSWORD=CQhOi5OygD4ps6ty
student@instance-1:~$ ADBCLUSTER=alloydb-aip-01
student@instance-1:~$ REGION=us-central1
student@instance-1:~$ INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
gleb@instance-1:~$ psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (15.6 (Debian 15.6-0+deb12u1), server 15.5)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=>

psql oturumunu kapatın:

exit

6. Veritabanı hazırlama

Bir veritabanı oluşturmamız, Vertex AI entegrasyonunu etkinleştirmemiz, veritabanı nesneleri oluşturmamız ve verileri içe aktarmamız gerekiyor.

AlloyDB'ye Gerekli İzinleri Verme

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

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

4ca978f5142bb6ce.png

Yeni Cloud Shell sekmesinde şunları yürütü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

Veritabanı Oluşturma

Veritabanı oluşturma hızlı başlangıç kılavuzu.

GCE sanal makinesi oturumunda şunları yürütün:

Veritabanı oluşturma:

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

Beklenen konsol çıkışı:

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

Vertex AI Entegrasyonu'nu etkinleştirme

Veritabanında Vertex AI entegrasyonunu ve pgvector uzantılarını etkinleştirin.

GCE sanal makinesinde şunları yapın:

psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE"
psql
"host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector"

Beklenen konsol çıkışı:

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE"
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector"
CREATE EXTENSION
CREATE EXTENSION
student@instance-1:~$ 

Verileri İçe Aktarma

Hazırlanan verileri indirip yeni veritabanına aktarın.

GCE sanal makinesinde şunları yapın:

gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
gsutil cat gs
://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header"
gsutil cat gs
://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header"
gsutil cat gs
://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header"

Beklenen konsol çıkışı:

student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
SET
SET
SET
SET
SET
 set_config 
------------
 
(1 row)
SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER TABLE
ALTER SEQUENCE
ALTER TABLE
ALTER TABLE
ALTER TABLE
student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header"
COPY 941
student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header"
COPY 263861
student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header"
COPY 4654
student@instance-1:~$

7. Yerleştirilmiş öğeleri hesaplama

Verileri içe aktardıktan sonra cymbal_products tablosunda ürün verilerini, cymbal_inventory tablosunda her mağazadaki mevcut ürün sayısını gösteren envanteri ve cymbal_stores tablosunda mağazaların listesini aldık. Vektör verilerini, ürünlerimizin açıklamalarına göre hesaplamamız gerekir. Bunun için embedding işlevini kullanacağız. Bu işlevi kullanarak, ürün açıklamalarımıza göre vektör verilerini hesaplamak ve tabloya eklemek için Vertex AI entegrasyonunu kullanacağız. Kullanılan teknoloji hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.

Embedding sütunu oluşturma

psql kullanarak veritabanına bağlanın ve cymbal_products tablosundaki yerleştirme işlevini kullanarak vektör verilerini içeren sanal bir sütun oluşturun. Yerleştirme işlevi, product_description sütunundan sağlanan verilere göre Vertex AI'dan vektör verileri döndürür.

psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"

Veritabanına bağlandıktan sonra psql oturumunda şunları yürütün:

ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-005',product_description)) STORED;

Komut, sanal sütunu oluşturur ve vektör verileriyle doldurur.

Beklenen konsol çıkışı:

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
psql (13.11 (Debian 13.11-0+deb11u1), server 14.7)
WARNING: psql major version 13, server major version 14.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

quickstart_db=> ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED;
ALTER TABLE
quickstart_db=> 

8. Benzerlik araması çalıştırma

Artık açıklamalarımız için hesaplanan vektör değerlerine ve isteğimiz için aldığımız vektör değerine dayalı benzerlik araması kullanarak aramamızı çalıştırabiliriz.

SQL sorgusu, aynı psql komut satırı arayüzünden veya alternatif olarak AlloyDB Studio'dan yürütülebilir. Çok satırlık ve karmaşık tüm çıkışlar AlloyDB Studio'da daha iyi görünebilir.

AlloyDB Studio'ya bağlanma

Aşağıdaki bölümlerde, veritabanına bağlantı gerektiren tüm SQL komutları alternatif olarak AlloyDB Studio'da da yürütülebilir. Komutu çalıştırmak için birincil örneği tıklayarak AlloyDB kümenizin web konsolu arayüzünü açmanız gerekir.

ef4bfbcf0ed2ef3a.png

Ardından soldaki AlloyDB Studio'yu tıklayın:

5c155cbcd7d43a1.png

quickstart_db veritabanını, postgres kullanıcısını seçin ve kümeyi oluştururken not ettiğimiz şifreyi girin. Ardından "Kimlik doğrula" düğmesini tıklayın.

432613065cac864f.png

AlloyDB Studio arayüzü açılır. Komutları veritabanında çalıştırmak için sağdaki "Düzenleyici 1" sekmesini tıklayın.

b36c28f8165119ca.png

SQL komutlarını çalıştırabileceğiniz arayüzü açar.

cf43aa20f292797e.png

Komut satırı psql'yi kullanmayı tercih ediyorsanız alternatif yolu uygulayın ve önceki bölümlerde açıklandığı gibi sanal makine SSH oturumunuzdan veritabanına bağlanın.

psql'den benzerlik araması çalıştırma

Veritabanı oturumunuzun bağlantısı kesildiyse psql veya AlloyDB Studio'yu kullanarak veritabanına tekrar bağlanın.

Veritabanına bağlanın:

psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"

Müşterinin isteğiyle en alakalı mevcut ürünlerin listesini almak için sorgu çalıştırın. Vektör değerini almak için Vertex AI'a ileteceğimiz istek "Burada hangi meyve ağaçları iyi yetişir?" şeklindedir.

İsteğimize en uygun ilk 10 öğeyi seçmek için çalıştırabileceğiniz sorgu aşağıda verilmiştir:

SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) as distance
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        distance ASC
LIMIT 10;

Beklenen çıktı şu şekildedir:

quickstart_db=> SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (cp.embedding <=> embedding('text-embedding-004','What kind of fruit trees grow well here?')::vector) as distance
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        distance ASC
LIMIT 10;
      product_name       |                                   description                                    | sale_price | zip_code |      distance       
-------------------------+----------------------------------------------------------------------------------+------------+----------+---------------------
 Cherry Tree             | This is a beautiful cherry tree that will produce delicious cherries. It is an d |      75.00 |    93230 | 0.43922018972266397
 Meyer Lemon Tree        | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by  |         34 |    93230 |  0.4685112926118228
 Toyon                   | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e |      10.00 |    93230 |  0.4835677149651668
 California Lilac        | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d |       5.00 |    93230 |  0.4947204525907498
 California Peppertree   | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e |      25.00 |    93230 |  0.5054166905547247
 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d |     100.00 |    93230 |  0.5084219510932597
 California Sycamore     | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is  |     300.00 |    93230 |  0.5140519790508755
 Coast Live Oak          | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev |     500.00 |    93230 |  0.5143126438081371
 Fremont Cottonwood      | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i |     200.00 |    93230 |  0.5174774727252058
 Madrone                 | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an |      50.00 |    93230 |  0.5227400803389093

9. Yanıtı iyileştirme

Sorgunun sonucunu kullanarak istemci uygulamasına verilen yanıtı iyileştirebilir ve Vertex AI üretken temel dil modeline verilen istem kapsamında sağlanan sorgu sonuçlarını kullanarak anlamlı bir çıkış hazırlayabilirsiniz.

Bunu başarmak için vektör aramasından elde ettiğimiz sonuçları içeren bir JSON oluşturmayı ve ardından anlamlı bir çıkış oluşturmak için Vertex AI'daki bir metin LLM modeli istemi için ek olarak bu oluşturulan JSON'u kullanmayı planlıyoruz. İlk adımda JSON'u oluştururuz, ardından Vertex AI Studio'da test ederiz ve son adımda bir uygulamada kullanılabilecek bir SQL ifadesine dahil ederiz.

Çıktıyı JSON biçiminde oluşturma

Sorguyu, çıkışı JSON biçiminde oluşturacak ve Vertex AI'ya aktarılacak yalnızca bir satır döndürecek şekilde değiştirin.

Sorgu örneğini aşağıda bulabilirsiniz:

WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

Çıktıda beklenen JSON şu şekildedir:

[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]

İstemi Vertex AI Studio'da çalıştırma

Oluşturulan JSON'u, Vertex AI Studio'daki üretken yapay zeka metin modeline istem olarak eklemek için kullanabiliriz.

Cloud Console'da Vertex AI Studio'yu açın.

e5405bb9d19b83ba.png

"Kabul et ve devam et" düğmesine basın.

700ba65eea612920.png

Arayüzün alt kısmına isteminizi yazın.

Ek API'leri etkinleştirmenizi isteyebilir ancak bu isteği yoksayabilirsiniz. Laboratuvarımızı tamamlamak için başka API'ye ihtiyacımız yok.

Ağaçlarla ilgili ilk sorgunun JSON çıkışıyla birlikte kullanacağımız istem:

Müşterinin ihtiyaçlarına göre ürün bulmalarına yardımcı olan samimi bir danışmansınız.

Müşteri isteğine göre, aramayla yakından ilişkili ürünlerin listesini yükledik.

{"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"} gibi değer listesi içeren JSON biçimindeki liste

Ürünlerin listesi aşağıda verilmiştir:

{"product_name":"Cherry Tree","description":"Bu, lezzetli kirazlar verecek güzel bir kiraz ağacıdır. d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}

Müşteri "Burada en iyi yetişen ağaç türü nedir?" diye sordu.

İstem olarak ürün, fiyat ve bazı ek bilgiler vermeniz gerekir

79eb43d67c93f200.png

İstemimizi JSON değerlerimizle ve gemini-2.0-flash-001 modelini kullanarak çalıştırdığımızda elde ettiğimiz sonuç:

db5abba481a371a2.png

Bu örnekte modelden aldığımız yanıtı aşağıda bulabilirsiniz. Zaman içinde model ve parametre değişiklikleri nedeniyle yanıtınızın farklı olabileceğini unutmayın:

"Tamam, size bu konuda yardımcı olabilirim. Elimdeki sınırlı ürün listesine göre Kiraz Ağacı iyi bir seçenek olabilir.

Şunları biliyoruz:

Ürün: Kiraz Ağacı

Açıklama: "Bu, lezzetli kirazlar verecek güzel bir kiraz ağacıdır. Bu bir d" (Maalesef açıklama eksik)

Fiyat: 75,00 ABD doları

Posta Kodu: 93230 (Bu bilgi, bitkinin bölgenizde iyi yetişip yetişmediğini anlamanız için önemlidir.) "

İstemi PSQL'de çalıştırma

Doğrudan veritabanında SQL kullanarak üretken bir modelden aynı yanıtı almak için AlloyDB yapay zeka entegrasyonunu Vertex AI ile kullanabiliriz. Ancak gemini-1.5-flash modelini kullanmak için önce modeli kaydetmemiz gerekir.

google_ml_integration uzantısını doğrulayın. 1.4.2 veya daha yeni bir sürüm olmalıdır.

Daha önce gösterildiği gibi psql'den quickstart_db veritabanına bağlanın (veya AlloyDB Studio'yu kullanın) ve aşağıdakileri yürütün:

SELECT extversion from pg_extension where extname='google_ml_integration';

google_ml_integration.enable_model_support veritabanı işaretini kontrol edin.

show google_ml_integration.enable_model_support;

psql oturumundan beklenen çıkış "on"dur:

postgres=> show google_ml_integration.enable_model_support;
 google_ml_integration.enable_model_support 
--------------------------------------------
 on
(1 row)

"Kapalı" yazıyorsa google_ml_integration.enable_model_support veritabanı işaretini "açık" olarak ayarlamamız gerekir. Bunu yapmak için AlloyDB web konsolu arayüzünü kullanabilir veya aşağıdaki gcloud komutunu çalıştırabilirsiniz.

PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
  --database-flags google_ml_integration.enable_model_support=on \
  --region=$REGION \
  --cluster=$ADBCLUSTER \
  --project=$PROJECT_ID \
  --update-mode=FORCE_APPLY

Komutun arka planda yürütülmesi yaklaşık 3-5 dakika sürer. Ardından işareti tekrar doğrulayabilirsiniz.

Şimdi iki model kaydetmemiz gerekiyor. İlki, daha önce kullanılan text-embedding-005 modelidir. Model tescil özelliklerini etkinleştirdiğimiz için kayıt edilmesi gerekir.

Aşağıdaki kodu çalıştırarak modeli psql veya AlloyDB Studio'ya kaydedin:

CALL
  google_ml.create_model(
    model_id => 'text-embedding-005',
    model_provider => 'google',
    model_qualified_name => 'text-embedding-005',
    model_type => 'text_embedding',
    model_auth_type => 'alloydb_service_agent_iam',
    model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
    model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform');

Kayıt etmemiz gereken bir sonraki model ise gemini-2.0-flash-001. Bu model, kullanıcı dostu çıkışı oluşturmak için kullanılır.

CALL
  google_ml.create_model(
    model_id => 'gemini-2.0-flash-001',
    model_request_url => 'publishers/google/models/gemini-2.0-flash-001:streamGenerateContent',
    model_provider => 'google',
    model_auth_type => 'alloydb_service_agent_iam');

google_ml.model_info_view kaynağından bilgi seçerek kayıtlı modellerin listesini istediğiniz zaman doğrulayabilirsiniz.

select model_id,model_type from google_ml.model_info_view;

Örnek çıktı

quickstart_db=> select model_id,model_type from google_ml.model_info_view;
        model_id         |   model_type   
-------------------------+----------------
 textembedding-gecko     | text_embedding
 textembedding-gecko@001 | text_embedding
 text-embedding-005      | text_embedding
 gemini-2.0-flash-001    | generic
(4 rows)

Artık SQL'i kullanarak üretken yapay zeka metin modeline istem olarak göndermek için oluşturulanı bir alt sorgu JSON'unda kullanabiliriz.

Veritabanına yönelik psql veya AlloyDB Studio oturumunda sorguyu çalıştırın

WITH trees AS (
SELECT
        cp.product_name,
        cp.product_description AS description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id AS product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci ON
        ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
        cs.store_id = ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005',
        'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
        'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
        trees),
response AS (
SELECT
        json_array_elements(google_ml.predict_row( model_id =>'gemini-2.0-flash-001',
        request_body => json_build_object('contents',
        json_build_object('role',
        'user',
        'parts',
        json_build_object('text',
        prompt_text)))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
        prompt)
SELECT
        string_agg(resp::text,
        ' ')
FROM
        response;

Beklenen çıktı şu şekildedir. Çıkışınız, model sürümüne ve parametrelere bağlı olarak farklı olabilir.:

"Okay" ", based on" " the product list, the \"Cherry Tree\" seems like a potential option for you.\n\n" "* **Product:** Cherry Tree\n* **Description:** It's a beautiful" " deciduous tree that grows to about 15 feet tall. You'll get dark green leaves in the summer that turn red in the fall. These trees are known for" " their beauty, shade, and privacy. Plus, you'll get delicious cherries!\n* **Growing Conditions:** Cherry trees prefer a cool, moist climate" " and sandy soil.\n* **USDA Zones:** They are best suited for USDA zones 4-9. (You may want to confirm that zone 4-9 is appropriate for your location.)\n* **Price:** \\$" "75.00\n\n**To make sure this is the *best* fit for you, could you tell me:**\n\n1. **Your Zip Code:** While the product lists zip code 93230, I" " would like to confirm where you are to verify that the USDA zone is a match for your area.\n2. **What kind of soil do you have?** The product description says that cherry trees prefer sandy soil.\n\nOnce I have this information, I can give you a more confident recommendation!\n"

10. Vektör dizini oluşturma

Veri kümemiz oldukça küçüktür ve yanıt süresi öncelikle yapay zeka modelleriyle etkileşime bağlıdır. Ancak milyonlarca vektörünüz varsa vektör arama kısmı, yanıt süremizin önemli bir bölümünü alabilir ve sisteme yüksek yük bindirebilir. Bunu iyileştirmek için vektörlerimizin üzerine bir dizin oluşturabiliriz.

ScaNN dizini oluşturma

SCANN dizini oluşturmak için bir uzantıyı daha etkinleştirmemiz gerekiyor. alloydb_scann uzantısı, Google ScaNN algoritmasını kullanarak ANN türü vektör dizini ile çalışmamızı sağlayan bir arayüz sağlar.

CREATE EXTENSION IF NOT EXISTS alloydb_scann;

Beklenen çıkış:

quickstart_db=> CREATE EXTENSION IF NOT EXISTS alloydb_scann;
CREATE EXTENSION
Time: 27.468 ms
quickstart_db=> 

Şimdi dizini oluşturabiliriz. Aşağıdaki örnekte çoğu parametreyi varsayılan olarak bırakıyorum ve dizin için yalnızca bir bölüm sayısı (num_leaves) sağlıyorum:

CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products
  USING scann
(embedding cosine)
  WITH
(num_leaves=31, max_num_levels = 2);

Dizin parametrelerini ayarlama hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.

Beklenen çıkış:

quickstart_db=> CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products
  USING scann (embedding cosine)
  WITH (num_leaves=31, max_num_levels = 2);
CREATE INDEX
quickstart_db=>

Yanıtı karşılaştırma

Şimdi vektör arama sorgusunu EXPLAIN modunda çalıştırabilir ve dizinin kullanılıp kullanılmadığını doğrulayabiliriz.

EXPLAIN (analyze) 
WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

Beklenen çıkış:

Aggregate (cost=16.59..16.60 rows=1 width=32) (actual time=2.875..2.877 rows=1 loops=1)
-> Subquery Scan on trees (cost=8.42..16.59 rows=1 width=142) (actual time=2.860..2.862 rows=1 loops=1)
-> Limit (cost=8.42..16.58 rows=1 width=158) (actual time=2.855..2.856 rows=1 loops=1)
-> Nested Loop (cost=8.42..6489.19 rows=794 width=158) (actual time=2.854..2.855 rows=1 loops=1)
-> Nested Loop (cost=8.13..6466.99 rows=794 width=938) (actual time=2.742..2.743 rows=1 loops=1)
-> Index Scan using cymbal_products_embeddings_scann on cymbal_products cp (cost=7.71..111.99 rows=876 width=934) (actual time=2.724..2.724 rows=1 loops=1)
Order By: (embedding <=> '[0.008864171,0.03693164,-0.024245683,-0.00355923,0.0055611245,0.015985578,...<redacted>...5685,-0.03914233,-0.018452475,0.00826032,-0.07372604]'::vector)
-> Index Scan using walmart_inventory_pkey on cymbal_inventory ci (cost=0.42..7.26 rows=1 width=37) (actual time=0.015..0.015 rows=1 loops=1)
Index Cond: ((store_id = 1583) AND (uniq_id = (cp.uniq_id)::text))

Çıktıda, sorgunun "cymbal_products üzerinde cymbal_products_embeddings_scann kullanarak dizine göz atma" kullandığını açıkça görebiliriz.

Sorguyu açıklama olmadan çalıştırırsak:

WITH trees as (
SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        cp.uniq_id as product_id
FROM
        cymbal_products cp
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        (cp.embedding <=> embedding('text-embedding-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

Beklenen çıkış:

[{"product_name":"Meyer Lemon Tree","description":"Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by ","sale_price":34,"zip_code":93230,"product_id":"02056727942aeb714dc9a2313654e1b0"}]

Sonuçların biraz farklı olduğunu ve dizine ekleme olmadan yaptığımız aramada en üstte olan kiraz ağacını değil, ikinci seçenek olan Meyer limon ağacını döndürdüğünü görüyoruz. Dolayısıyla dizin bize performans sağlıyor ancak iyi sonuçlar sunacak kadar doğru.

Vektörler için mevcut farklı dizinleri ve doküman sayfasında bulunan dil zinciri entegrasyonuna sahip daha fazla laboratuvar ve örneği deneyebilirsiniz.

11. Ortamı temizleme

Laboratuvarı tamamladığınızda AlloyDB örneklerini ve kümesini yok etme

AlloyDB kümesini ve tüm örneklerini silme

Zorunlu seçenekle küme 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üme için 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 sanal makinemizi silebiliriz.

GCE sanal makinesini silme

Cloud Shell'de şunları ç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 

12. Tebrikler

Codelab'i tamamladığınız için tebrikler.

Ele aldığımız konular

  • AlloyDB kümesini ve birincil örneği dağıtma
  • Google Compute Engine sanal makinesinden AlloyDB'ye bağlanma
  • Veritabanı oluşturma ve AlloyDB AI'ı etkinleştirme
  • Verileri veritabanına yükleme
  • AlloyDB'de Vertex AI yerleştirme modelini kullanma
  • Vertex AI üretken modelini kullanarak sonucu zenginleştirme
  • Vektör dizini kullanarak performansı iyileştirme

13. Anket

Çıkış:

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