Membangun aplikasi chat berbasis LLM dan RAG menggunakan AlloyDB AI dan LangChain

1. Pengantar

Dalam codelab ini, Anda akan mempelajari cara men-deploy Layanan Pengambilan Database GenAI dan membuat contoh aplikasi interaktif menggunakan lingkungan yang di-deploy.

98c2676cc78880e.png

Anda bisa mendapatkan informasi lebih lanjut tentang Layanan Pengambilan GenAI dan aplikasi contohnya di sini.

Prasyarat

  • Pemahaman dasar tentang Konsol Google Cloud
  • Keterampilan dasar dalam antarmuka command line dan Google Cloud shell

Yang akan Anda pelajari

  • Cara men-deploy Cluster AlloyDB
  • Cara terhubung ke AlloyDB
  • Cara mengonfigurasi dan men-deploy Layanan Pengambilan Database GenAI
  • Cara men-deploy aplikasi contoh menggunakan layanan yang di-deploy

Yang akan Anda butuhkan

  • Akun Google Cloud dan Project Google Cloud
  • Browser web seperti Chrome

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

55efc1aaa7a4d3ad.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

7ffe5cbb04455448.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.

3. Sebelum memulai

Aktifkan API

Output:

Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan:

Biasanya project ID ditampilkan dalam tanda kurung di command prompt di Cloud Shell seperti yang ditunjukkan dalam gambar:

edbf16c09a01fbab.png

gcloud config set project [YOUR-PROJECT-ID]

Kemudian, tetapkan variabel lingkungan PROJECT_ID ke project ID Google Cloud Anda:

PROJECT_ID=$(gcloud config get-value project)

Aktifkan semua layanan yang diperlukan:

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

Output yang diharapkan

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
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.

Konfigurasi region default Anda ke us-central1 untuk menggunakan model Vertex AI. Baca selengkapnya tentang pembatasan regional.

gcloud config set compute/region us-central1

4. Deploy Cluster AlloyDB

Sebelum membuat cluster AlloyDB, kita perlu mengalokasikan rentang IP pribadi di VPC untuk digunakan oleh instance AlloyDB mendatang. Setelah itu, kita akan dapat membuat cluster dan instance.

Buat rentang IP pribadi

Kita perlu menyetel konfigurasi Akses Layanan Pribadi di VPC untuk AlloyDB. Asumsinya di sini adalah kita memiliki jaringan VPC "default" dalam project dan jaringan tersebut akan digunakan untuk semua tindakan.

Buat rentang IP pribadi:

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

Buat koneksi pribadi menggunakan rentang IP yang dialokasikan:

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

Output konsol yang diharapkan:

student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --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)$

Buat Cluster AlloyDB

Buat cluster AlloyDB di region default:

export PGPASSWORD=`openssl rand -hex 12`
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION

Output konsol yang diharapkan:

student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -base64 12`
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.                                                                                                                                                                                                                                                           

Catat sandi PostgreSQL untuk penggunaan berikutnya:

echo $PGPASSWORD

Output konsol yang diharapkan:

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

Buat Instance Utama AlloyDB

Buat instance utama AlloyDB untuk cluster:

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

Output konsol yang diharapkan:

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. Siapkan Virtual Machine GCE

Buat Akun Layanan

Karena kita akan menggunakan VM untuk men-deploy layanan Pengambilan Database GenAI dan menghosting aplikasi contoh, langkah pertama adalah membuat Akun Layanan Google (GSA). GSA akan digunakan oleh VM GCE, dan kita perlu memberinya izin akses yang diperlukan agar dapat berfungsi dengan layanan lain.

Di Cloud Shell, jalankan:

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/aiplatform.user"

Deploy VM GCE

Buat VM GCE di region dan VPC yang sama dengan cluster AlloyDB.

Di Cloud Shell, jalankan:

export ZONE=us-central1-a
gcloud compute instances create instance-1 \
  --zone=$ZONE \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com

Output konsol yang diharapkan:

student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ gcloud compute instances create instance-1 \
  --zone=$ZONE \
  --scopes=https://www.googleapis.com/auth/cloud-platform
  --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
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

Instal Klien Postgres

Instal software klien PostgreSQL pada VM yang di-deploy

Hubungkan ke VM:

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

Output konsol yang diharapkan:

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:~$ 

Instal software yang menjalankan perintah dalam VM:

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

Output konsol yang diharapkan:

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) ...

Hubungkan ke Instance

Hubungkan ke instance utama dari VM menggunakan psql.

Lanjutkan dengan sesi SSH yang dibuka ke VM Anda. Jika koneksi Anda telah terputus, hubungkan kembali menggunakan perintah yang sama seperti di atas.

Gunakan $PGASSWORD yang dicatat sebelumnya dan nama cluster untuk terhubung ke AlloyDB dari VM GCE:

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"

Output konsol yang diharapkan:

student@instance-1:~$ export PGPASSWORD=P9...
student@instance-1:~$ export REGION=us-central1
student@instance-1:~$ export ADBCLUSTER=alloydb-aip-01
student@instance-1:~$ export INSTANCE_IP=export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres sslmode=require"
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.

postgres=> 

Keluar dari sesi psql dengan tetap mempertahankan koneksi SSH:

exit

Output konsol yang diharapkan:

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

6. Melakukan inisialisasi database

Kita akan menggunakan VM klien sebagai platform untuk mengisi database dengan data dan menghosting aplikasi. Langkah pertama adalah membuat database dan mengisinya dengan data.

Buat Database

Buat database dengan nama "assistantdemo".

Dalam sesi VM GCE, jalankan:

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

Output konsol yang diharapkan:

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

Aktifkan ekstensi pgVector.

psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "CREATE EXTENSION vector"  

Output konsol yang diharapkan:

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

Instal Python

Untuk melanjutkan, kita akan menggunakan skrip Python yang sudah disiapkan dari repositori GitHub. Namun, sebelum itu, kita perlu menginstal software yang diperlukan.

Di VM GCE, jalankan:

sudo apt install -y git build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec "$SHELL"

Output konsol yang diharapkan:

student@instance-1:~$ sudo apt install -y git build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec "$SHELL"
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
xz-utils is already the newest version (5.2.5-2.1~deb11u1).
The following additional packages will be installed:
...

Instal Python 3.11.x.

Di VM GCE, jalankan:

pyenv install 3.11.6
pyenv global 3.11.6
python -V

Output konsol yang diharapkan:

student@instance-1:~$ pyenv install 3.11.6
pyenv global 3.11.6
python -V
Downloading Python-3.11.6.tar.xz...
-> https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tar.xz
Installing Python-3.11.6...
Installed Python-3.11.6 to /home/student/.pyenv/versions/3.11.6
Python 3.11.6
student@instance-1:~$

Isi Database

Buat clone repositori GitHub dengan kode untuk layanan pengambilan dan aplikasi contoh.

Di VM GCE, jalankan:

git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git

Output konsol yang diharapkan:

student@instance-1:~$ git clone https://github.com/GoogleCloudPlatform/genai-databases-retrieval-app.git
Cloning into 'genai-databases-retrieval-app'...
remote: Enumerating objects: 525, done.
remote: Counting objects: 100% (336/336), done.
remote: Compressing objects: 100% (201/201), done.
remote: Total 525 (delta 224), reused 179 (delta 135), pack-reused 189
Receiving objects: 100% (525/525), 46.58 MiB | 16.16 MiB/s, done.
Resolving deltas: 100% (289/289), done.

Siapkan file konfigurasi

Di VM GCE, jalankan:

cd genai-databases-retrieval-app/retrieval_service
cp example-config.yml config.yml
sed -i s/127.0.0.1/$INSTANCE_IP/g config.yml
sed -i s/my-password/$PGPASSWORD/g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/postgres/g config.yml
cat config.yml

Output konsol yang diharapkan:

student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service
cp example-config.yml config.yml
sed -i s/127.0.0.1/$INSTANCE_IP/g config.yml
sed -i s/my-password/$PGPASSWORD/g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/postgres/g config.yml
cat config.yml
host: 0.0.0.0
# port: 8080
datastore:
  # Example for AlloyDB
  kind: "postgres"
  host: 10.65.0.2
  # port: 5432
  database: "assistantdemo"
  user: "postgres"
  password: "P9..."

Isi database dengan set data contoh.

Di VM GCE, jalankan:

pip install -r requirements.txt
python run_database_init.py

Output konsol yang diharapkan (disamarkan):

student@instance-1:~/genai-databases-retrieval-app/retrieval_service$ pip install -r requirements.txt
python run_database_init.py
Collecting asyncpg==0.28.0 (from -r requirements.txt (line 1))
  Obtaining dependency information for asyncpg==0.28.0 from https://files.pythonhosted.org/packages/77/a4/88069f7935b14c58534442a57be3299179eb46aace2d3c8716be199ff6a6/asyncpg-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
  Downloading asyncpg-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.3 kB)
Collecting fastapi==0.101.1 (from -r requirements.txt (line 2))
...
database init done.
student@instance-1:~/genai-databases-retrieval-app/retrieval_service$

7. Men-deploy Layanan Ekstensi ke Cloud Run

Sekarang kita dapat men-deploy layanan ekstensi ke Cloud Run.

Buat Akun Layanan

Buat akun layanan untuk layanan ekstensi dan berikan izin akses yang diperlukan.

Buka tab Cloud Shell lain menggunakan tanda "+" di bagian atas.

4ca978f5142bb6ce.png

Di tab Cloud Shell baru, jalankan:

export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create retrieval-identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

Output konsol yang diharapkan:

student@cloudshell:~ (gleb-test-short-003)$ gcloud iam service-accounts create retrieval-identity
Created service account [retrieval-identity].

Tutup tab dengan menjalankan perintah "exit" di tab:

exit

Deploy layanan ekstensi

Lanjutkan di tab pertama tempat Anda terhubung ke VM melalui SSH dengan men-deploy layanan.

Dalam sesi SSH VM, jalankan:

cd ~/genai-databases-retrieval-app
gcloud alpha run deploy retrieval-service \
    --source=./retrieval_service/\
    --no-allow-unauthenticated \
    --service-account retrieval-identity \
    --region us-central1 \
    --network=default \
    --quiet

Output konsol yang diharapkan:

student@instance-1:~/genai-databases-retrieval-app$ gcloud alpha run deploy retrieval-service \
    --source=./retrieval_service/\
    --no-allow-unauthenticated \
    --service-account retrieval-identity \
    --region us-central1 \
    --network=default
This command is equivalent to running `gcloud builds submit --tag [IMAGE] ./retrieval_service/` and `gcloud run deploy retrieval-service --image [IMAGE]`

Building using Dockerfile and deploying container to Cloud Run service [retrieval-service] in project [gleb-test-short-003] region [us-central1]
X Building and deploying... Done.
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/6ebe74bf-3039-4221-b2e9-7ca8fa8dad8e?project=1012713954588].
  ✓ Creating Revision...
  ✓ Routing traffic...
    Setting IAM Policy...
Completed with warnings:
  Setting IAM policy failed, try "gcloud beta run services remove-iam-policy-binding --region=us-central1 --member=allUsers --role=roles/run.invoker retrieval-service"
Service [retrieval-service] revision [retrieval-service-00002-4pl] has been deployed and is serving 100 percent of traffic.
Service URL: https://retrieval-service-onme64eorq-uc.a.run.app
student@instance-1:~/genai-databases-retrieval-app$

Verifikasi Layanan

Sekarang kita dapat memeriksa apakah layanan berjalan dengan benar dan VM memiliki akses ke endpoint.

Dalam sesi SSH VM, jalankan:

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

Output konsol yang diharapkan:

student@instance-1:~/genai-databases-retrieval-app$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")
{"message":"Hello World"}student@instance-1:~/genai-databases-retrieval-app$

Jika kita melihat pesan "Hello World", berarti layanan kita sudah aktif dan melayani permintaan.

8. Men-deploy Aplikasi Contoh

Sekarang kita memiliki layanan ekstensi yang aktif dan berjalan serta dapat men-deploy aplikasi contoh yang akan menggunakan layanan tersebut. Aplikasi dapat di-deploy di VM atau layanan lain seperti Cloud Run, Kubernetes, atau bahkan secara lokal di laptop. Di sini kita akan menunjukkan cara men-deploy-nya di VM.

Siapkan lingkungan

Kita tetap mengerjakan VM kita. Kita perlu menambahkan modul yang diperlukan ke Python.

Dalam sesi SSH VM, jalankan:

cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt

Output yang diharapkan (disamarkan):

student@instance-1:~$ cd ~/genai-databases-retrieval-app/llm_demo
pip install -r requirements.txt
Collecting fastapi==0.104.0 (from -r requirements.txt (line 1))
  Obtaining dependency information for fastapi==0.104.0 from https://files.pythonhosted.org/packages/db/30/b8d323119c37e15b7fa639e65e0eb7d81eb675ba166ac83e695aad3bd321/fastapi-0.104.0-py3-none-any.whl.metadata
  Downloading fastapi-0.104.0-py3-none-any.whl.metadata (24 kB)
...

Jalankan Aplikasi Asisten

Sekarang kita dapat memulai aplikasi

Dalam sesi SSH VM, jalankan:

export BASE_URL=$(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")
export ORCHESTRATION_TYPE=langchain-tools
python run_app.py

Output yang diharapkan (disamarkan):

student@instance-1:~/genai-databases-retrieval-app/langchain_tools_demo$ export BASE_URL=$(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")
student@instance-1:~/genai-databases-retrieval-app/langchain_tools_demo$ python main.py
INFO:     Started server process [28565]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)

Hubungkan ke Aplikasi

Anda memiliki beberapa cara untuk terhubung ke aplikasi yang berjalan di VM. Misalnya, Anda dapat membuka port 8081 di VM menggunakan aturan firewall di VPC atau membuat load balancer dengan IP publik. Di sini kita akan menggunakan tunnel SSH ke VM yang menerjemahkan port lokal 8081 ke port VM 8081.

Buka tab Cloud Shell lain menggunakan tanda "+" di bagian atas.

4ca978f5142bb6ce.png

Di tab Cloud Shell yang baru, mulai tunnel ke VM dengan menjalankan perintah gcloud:

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

Tindakan ini akan menampilkan pesan error "Cannot assign requested address" - harap abaikan.

Berikut output yang diharapkan:

student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -NL 8080:localhost:8081
bind [::1]:8081: Cannot assign requested address

Tindakan ini akan membuka port 8081 pada Cloud Shell yang dapat digunakan untuk "Web preview".

Klik tombol "Web preview" di bagian kanan atas Cloud Shell Anda. Dari menu drop-down, pilih "Preview on port 8080"

444fbf54dcd4d160.png

Alat ini akan membuka tab baru di browser web Anda dengan antarmuka aplikasi. Anda akan dapat melihat halaman "Cymbal Air Customer Service Assistant" dan dapat memposting pertanyaan ke asisten di bagian bawah halaman.

698b087b35c6ef94.png

Demo ini menampilkan asisten layanan pelanggan Cymbal Air. Cymbal Air adalah maskapai penumpang fiktif. Asisten ini adalah chatbot AI yang membantu wisatawan mengelola penerbangan dan mencari informasi tentang hub Cymbal Air di Bandar Udara Internasional San Francisco (SFO).

Aplikasi ini dapat membantu menjawab pertanyaan pengguna seperti:

Kapan penerbangan berikutnya ke Denver?

Apakah ada toko mewah di sekitar gerbang D50?

Di mana saya bisa mendapatkan kopi di dekat gerbang A6?

Di mana saya bisa membeli hadiah?

Aplikasi ini menggunakan model dasar Google terbaru untuk menghasilkan respons dan melengkapinya dengan informasi tentang penerbangan dan fasilitas dari database AlloyDB operasional. Anda dapat membaca selengkapnya tentang aplikasi demo ini di halaman GitHub project.

9. Membersihkan lingkungan

Setelah semua tugas selesai, kita dapat membersihkan lingkungan

Hapus Layanan Cloud Run

Di Cloud Shell, jalankan:

gcloud run services delete retrieval-service --region us-central1

Output konsol yang diharapkan:

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].

Hapus Akun Layanan untuk layanan Cloud Run

Di Cloud Shell, jalankan:

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

Output konsol yang diharapkan:

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)$

Hancurkan instance dan cluster AlloyDB setelah Anda selesai mengerjakan lab

Hapus cluster AlloyDB dan semua instance

Cluster tersebut dihancurkan dengan opsi paksa yang juga akan menghapus semua instance milik cluster tersebut.

Di Cloud Shell, tentukan variabel project dan lingkungan jika koneksi Anda terputus dan semua setelan sebelumnya hilang:

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

Hapus cluster:

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

Output konsol yang diharapkan:

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.   

Hapus Cadangan AlloyDB

Hapus semua cadangan AlloyDB untuk cluster:

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

Output konsol yang diharapkan:

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.                                                                                                                                                                                                                                                            

Sekarang kita bisa menghancurkan VM

Hapus VM GCE

Di Cloud Shell, jalankan:

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

Output konsol yang diharapkan:

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

Hapus Akun Layanan untuk VM GCE dan layanan Pengambilan

Di Cloud Shell, jalankan:

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

Output konsol yang diharapkan:

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. Selamat

Selamat, Anda telah menyelesaikan codelab.

Yang telah kita bahas

  • Cara men-deploy Cluster AlloyDB
  • Cara terhubung ke AlloyDB
  • Cara mengonfigurasi dan men-deploy Layanan Pengambilan Database GenAI
  • Cara men-deploy aplikasi contoh menggunakan layanan yang di-deploy

11. Survei

Output:

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membaca dan menyelesaikan latihannya