ساخت یک برنامه چت مبتنی بر LLM و RAG با استفاده از پایگاه داده های Cloud SQL و LangChain

۱. مقدمه

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

8727a44c8c402834.png

می‌توانید اطلاعات بیشتری در مورد سرویس بازیابی GenAI و نمونه درخواست را از اینجا دریافت کنید.

پیش‌نیازها

  • درک اولیه از کنسول ابری گوگل
  • مهارت‌های پایه در رابط خط فرمان و پوسته گوگل کلود

آنچه یاد خواهید گرفت

  • نحوه ایجاد یک نمونه Cloud SQL
  • نحوه اتصال به نمونه
  • نحوه پیکربندی و استقرار سرویس بازیابی پایگاه‌های داده GenAI
  • نحوه استقرار یک برنامه نمونه با استفاده از سرویس مستقر شده

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

  • یک حساب کاربری گوگل کلود و پروژه گوگل کلود
  • یک مرورگر وب مانند کروم

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

تنظیم محیط خودتنظیم

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

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

از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۳. قبل از شروع

فعال کردن API

در داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است:

معمولاً شناسه پروژه در خط فرمان در پوسته ابری، همانطور که در تصویر نشان داده شده است، در داخل پرانتز نشان داده می‌شود:

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

سپس متغیر محیطی PROJECT_ID را روی شناسه پروژه Google Cloud خود تنظیم کنید:

PROJECT_ID=$(gcloud config get-value project)

فعال کردن تمام سرویس‌های لازم:

gcloud services enable sqladmin.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

خروجی مورد انتظار کنسول:

student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable sqladmin.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.

۴. یک نمونه SQL ابری ایجاد کنید

یک نمونه Cloud SQL با پشتیبانی برداری فعال ایجاد کنید.

ایجاد رمز عبور

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

export CLOUDSQL_PASSWORD=`openssl rand -hex 12`

به مقدار تولید شده برای رمز عبور توجه کنید

echo $CLOUDSQL_PASSWORD

خروجی زیر

شما می‌توانید پرچم cloudsql_vector را در هنگام ایجاد نمونه فعال کنید. در حال حاضر، پشتیبانی از بردار در MySQL نسخه‌های 8.0.36 و 8.0.37 ارائه می‌شود.

export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=MYSQL_8_0_36 --database-flags=cloudsql_vector=ON --root-password=$CLOUDSQL_PASSWORD

خروجی مورد انتظار کنسول (آدرس IP حذف شده است):

student@cloudshell:~ export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=MYSQL_8_0_36 --database-flags=cloudsql_vector=ON --root-password=$CLOUDSQL_PASSWORD
Creating Cloud SQL instance for MYSQL_8_0_36...done.                                                                                                                                 
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance].
NAME                   DATABASE_VERSION  LOCATION       TIER             PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
my-cloudsql-instance  MYSQL_8_0_36      us-central1-a  db-n1-standard-1  00.000.00.00   -                RUNNABLE

پستگراسکیو‌ال

افزونه‌ی pgvector در نسخه‌های >= 11 ارائه می‌شود.

export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=POSTGRES_15 --tier=db-g1-small

خروجی مورد انتظار کنسول (آدرس IP حذف شده است):

student@cloudshell:~ export region=us-central1
gcloud sql instances create my-cloudsql-instance --region=$region --database-version=POSTGRES_15 --tier=db-g1-small
Creating Cloud SQL instance for POSTGRES_15...done.                                                                                                                                  
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance].
NAME                   DATABASE_VERSION  LOCATION       TIER         PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
my-cloudsql-instance  POSTGRES_15       us-central1-a  db-g1-small  00.000.00.00     -                RUNNABLE

پس از ایجاد نمونه، باید یک رمز عبور برای کاربر پیش‌فرض در نمونه تعریف کنیم و بررسی کنیم که آیا می‌توانیم با رمز عبور متصل شویم یا خیر. رمز عبور خود را در اعلان اتصال وارد کنید، زمانی که آماده اتصال شد.

gcloud sql users set-password postgres \
    --instance=my-cloudsql-instance \
    --password=$CLOUDSQL_PASSWORD
gcloud sql connect my-cloudsql-instance --user=postgres

خروجی مورد انتظار کنسول:

student@cloudshell:~ (test-project-402417)$ gcloud sql users set-password postgres \
    --instance=my-cloudsql-instance \
    --password=$CLOUDSQL_PASSWORD
gcloud sql connect my-cloudsql-instance --user=postgres
Updating Cloud SQL user...done.                                                                                                                                                                                                                                            
Allowlisting your IP for incoming connection for 5 minutes...done.                                                                                                                                                                                                         
Connecting to database with SQL user [postgres].Password: 
psql (16.3 (Ubuntu 16.3-1.pgdg22.04+1), server 15.7)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=>

از جلسه psql خارج شوید:

exit

۵. آماده‌سازی ماشین مجازی GCE

ایجاد حساب کاربری سرویس

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

در Cloud Shell دستور زیر را اجرا کنید:

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/cloudsql.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudsql.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

استقرار ماشین مجازی GCE

یک ماشین مجازی GCE در همان منطقه و VPC به عنوان نمونه Cloud SQL ایجاد کنید.

در Cloud Shell اجرا کنید:

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 \
  --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com

خروجی مورد انتظار کنسول:

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

به ماشین مجازی اجازه اتصال به Cloud SQL را بدهید

ما باید IP عمومی ماشین مجازی خود را به لیست شبکه‌های مجاز برای نمونه Cloud SQL خود اضافه کنیم. در پوسته ابری دستور زیر را اجرا کنید:

VM_EXTERNAL_IP=$(gcloud compute instances describe instance-1 --zone=us-central1-a --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$VM_EXTERNAL_IP

خروجی مورد انتظار کنسول:

student@cloudshell:~ (test-project-402417)$ export ZONE=us-central1-a
student@cloudshell:~ (test-project-402417)$ VM_EXTERNAL_IP=$(gcloud compute instances describe instance-1 --zone=us-central1-a --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$VM_EXTERNAL_IP
When adding a new IP address to authorized networks, make sure to also include any IP addresses that have already been authorized. Otherwise, they will be overwritten and de-authorized.

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

The following message will be used for the patch API method.
{"name": "my-cloudsql-instance", "project": "test-project-402417", "settings": {"ipConfiguration": {"authorizedNetworks": [{"value": "34.71.252.173"}]}}}
Patching Cloud SQL instance...done.                                                                                                                                                                                     
Updated [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-project-402417/instances/my-cloudsql-instance].

نصب کلاینت پایگاه داده

خروجی زیر

نرم‌افزار کلاینت MySQL را روی ماشین مجازی مستقر شده نصب کنید.

اتصال به ماشین مجازی:

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

خروجی مورد انتظار کنسول:

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

دستور اجرای نرم‌افزار را درون ماشین مجازی نصب کنید:

sudo apt-get update
sudo apt-get install --yes default-mysql-client

خروجی مورد انتظار کنسول:

student@instance-1:~$ sudo apt-get update
sudo apt-get install --yes mysql-client
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libgdbm-compat4 libperl5.32 libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5 perl perl-modules-5.32
Suggested packages:
  libclone-perl libmldbm-perl libnet-daemon-perl libsql-statement-perl perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make libtap-harness-archive-perl
The following NEW packages will be installed:
  default-mysql-client libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libgdbm-compat4 libperl5.32 libterm-readkey-perl mariadb-client-10.5 mariadb-client-core-10.5 perl
  Perl-modules-5.32
...redacted...
Processing triggers for libc-bin (2.31-13+deb11u10) ...

پستگراسکیو‌ال

نرم‌افزار کلاینت PostgreSQL را روی ماشین مجازی مستقر شده نصب کنید.

اتصال به ماشین مجازی:

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

خروجی مورد انتظار کنسول:

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

دستور اجرای نرم‌افزار را درون ماشین مجازی نصب کنید:

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

خروجی مورد انتظار کنسول:

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

اتصال به نمونه

خروجی زیر

با استفاده از MySQL از ماشین مجازی به نمونه اصلی متصل شوید.

با استفاده از جلسه SSH باز شده به ماشین مجازی خود ادامه دهید. اگر اتصال شما قطع شده است، دوباره با استفاده از همان دستور بالا متصل شوید.

برای اتصال به Cloud SQL از ماشین مجازی GCE، از $CLOUDSQL_PASSWORD که قبلاً ذکر شد و نام نمونه استفاده کنید:

export CLOUDSQL_PASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export INSTANCE_NAME=my-cloudsql-instance
export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD

خروجی مورد انتظار کنسول:

student@instance-1:~$ export CLOUDSQL_PASSWORD=P9...
student@instance-1:~$ export REGION=us-central1
student@instance-1:~$ export INSTANCE_NAME=my-cloud-sql-instance
student@instance-1:~$ export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
student@instance-1:~$ mysql  –host=$INSTANCE_IP –user=root –password=$CLOUDSQL_PASSWORD –sslmode=require 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2824706
Server version: 8.0.36-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

خروج از نشست MySQL با حفظ اتصال SSH:

exit

خروجی مورد انتظار کنسول:

MySQL [(none)]> exit
Bye
student@instance-1:~$ 

پستگراسکیو‌ال

با استفاده از psql از ماشین مجازی به نمونه اصلی متصل شوید.

با استفاده از جلسه SSH باز شده به ماشین مجازی خود ادامه دهید. اگر اتصال شما قطع شده است، دوباره با استفاده از همان دستور بالا متصل شوید.

برای اتصال به PostgreSQL از ماشین مجازی GCE، از متغیر $CLOUDSQL_PASSWORD که قبلاً ذکر شد و نام نمونه استفاده کنید:

export PGPASSWORD=<Noted password (CLOUDSQL_PASSWORD)>
export CLOUDSQL_PASSWORD=$PGPASSWORD
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export INSTANCE_NAME=my-cloudsql-instance
export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

خروجی مورد انتظار کنسول:

student@instance-1:~$ export CLOUDSQL_PASSWORD=P9...
student@instance-1:~$ export REGION=us-central1
student@instance-1:~$ export INSTANCE_IP=$(gcloud sql instances list --filter=name:$INSTANCE_NAME --format="value(PRIMARY_ADDRESS)")
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=> 

خروج از جلسه psql با حفظ اتصال SSH:

exit

خروجی مورد انتظار کنسول:

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

۶. مقداردهی اولیه پایگاه داده

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

ایجاد پایگاه داده

خروجی زیر

یک پایگاه داده با نام "assistantdemo" ایجاد کنید.

در جلسه GCE VM دستور زیر را اجرا کنید:

mysql --host=$INSTANCE_IP  --user=root --password=$CLOUDSQL_PASSWORD -e "CREATE DATABASE assistantdemo"

خروجی مورد انتظار کنسول (بدون خروجی):

student@instance-1:~$ mysql --host=$INSTANCE_IP  --user=root --password=$CLOUDSQL_PASSWORD -e "CREATE DATABASE assistantdemo"
student@instance-1:~$  

پستگراسکیو‌ال

یک پایگاه داده با نام "assistantdemo" ایجاد کنید.

در جلسه GCE VM دستور زیر را اجرا کنید:

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

خروجی مورد انتظار کنسول:

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

افزونه‌ی pgvector را فعال کنید.

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

خروجی مورد انتظار کنسول (بدون خروجی):

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

آماده‌سازی محیط پایتون

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

در ماشین مجازی GCE دستور زیر را اجرا کنید:

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

خروجی مورد انتظار کنسول:

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

نسخه پایتون را تأیید کنید.

در ماشین مجازی GCE دستور زیر را اجرا کنید:

python -V

خروجی مورد انتظار کنسول:

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

آماده‌سازی فایل پیکربندی

مخزن گیت‌هاب را به همراه کد سرویس بازیابی و برنامه نمونه، کلون کنید.

در ماشین مجازی GCE دستور زیر را اجرا کنید:

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

خروجی مورد انتظار کنسول:

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.

خروجی زیر

در ماشین مجازی GCE دستور زیر را اجرا کنید:

cd ~/genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
cp example-config-cloudsql.yml config.yml
sed -i s/engine/mysql/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/g config.yml
sed -i s/my-password//g config.yml
sed -i s/my_database/assistantdemo/g config.yml
sed -i s/my-user/root/g config.yml
cat config.yml

خروجی مورد انتظار کنسول:

student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
sed -i s/127.0.0.1/$INSTANCE_IP/g config.yml
sed -i s/my-password/$CLOUDSQL_PASSWORD/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 MySQL
  kind: "cloudsql-mysql"
  host: 10.65.0.2
  # port: 5432
  database: "assistantdemo"
  user: "root"
  password: "P9..."

پستگرس

در ماشین مجازی GCE دستور زیر را اجرا کنید:

cd ~/genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
sed -i s/engine/postgres/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/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

خروجی مورد انتظار کنسول:

student@instance-1:~$ cd genai-databases-retrieval-app/retrieval_service
cp example-config-cloudsql.yml config.yml
sed -i s/engine/postgres/g config.yml
sed -i s/my-project/$PROJECT_ID/g config.yml
sed -i s/my-region/$REGION/g config.yml
sed -i s/my-instance/$INSTANCE_NAME/g config.yml
sed -i s/my-password/$CLOUDSQL_PASSWORD/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 Postgres
  kind: "cloudsql-postgres"
  host: 10.65.0.2
  # port: 5432
  database: "assistantdemo"
  user: "postgres"
  password: "P9..."

پر کردن پایگاه داده

پایگاه داده را با مجموعه داده نمونه پر کنید. دستور اول تمام بسته‌های مورد نیاز را به محیط مجازی پایتون ما اضافه می‌کند و دستور دوم پایگاه داده ما را با داده‌ها پر می‌کند.

در ماشین مجازی GCE دستور زیر را اجرا کنید:

cd ~/genai-databases-retrieval-app/retrieval_service
pip install -r requirements.txt
python run_database_init.py

خروجی مورد انتظار کنسول (حذف شده):

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$

۷. سرویس بازیابی را روی Cloud Run مستقر کنید

اکنون می‌توانیم سرویس بازیابی را در Cloud Run مستقر کنیم. این سرویس وظیفه دارد با پایگاه داده کار کند و اطلاعات لازم را بر اساس درخواست یک برنامه هوش مصنوعی از پایگاه داده استخراج کند.

ایجاد حساب کاربری سرویس

یک حساب کاربری برای سرویس بازیابی ایجاد کنید و امتیازات لازم را اعطا کنید.

با استفاده از علامت "+" در بالا، یک تب Cloud Shell دیگر باز کنید.

4ca978f5142bb6ce.png

در تب جدید cloud shell دستور زیر را اجرا کنید:

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"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudsql.client"

خروجی مورد انتظار کنسول:

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

با اجرای هر یک از دستورهای "exit" در تب، تب را ببندید:

exit

سرویس بازیابی را مستقر کنید

در اولین تبی که از طریق SSH به ماشین مجازی متصل هستید، با استقرار سرویس، ادامه دهید.

در جلسه SSH ماشین مجازی دستور زیر را اجرا کنید:

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

خروجی مورد انتظار کنسول:

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$

سرویس را تأیید کنید

حالا می‌توانیم بررسی کنیم که آیا سرویس به درستی اجرا می‌شود و ماشین مجازی به نقطه پایانی دسترسی دارد یا خیر. ما از ابزار gcloud برای دریافت نقطه پایانی سرویس بازیابی استفاده می‌کنیم. به عنوان یک روش جایگزین، می‌توانید آن را در کنسول ابری بررسی کنید و در دستور curl عبارت "$(gcloud run services list –filter="(retrieval-service)" را با مقداری که در آنجا وجود دارد جایگزین کنید.

در جلسه SSH ماشین مجازی دستور زیر را اجرا کنید:

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

خروجی مورد انتظار کنسول:

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$

اگر پیام "سلام دنیا" را ببینیم، به این معنی است که سرویس ما فعال است و به درخواست‌ها پاسخ می‌دهد.

۸. پیاده‌سازی نمونه برنامه

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

محیط را آماده کنید

ما با استفاده از همان جلسه SSH به کار روی ماشین مجازی خود ادامه می‌دهیم. برای اجرای برنامه خود باید چند ماژول پایتون اضافه کنیم. این دستور از دایرکتوری برنامه در همان محیط مجازی پایتون اجرا خواهد شد.

در جلسه SSH ماشین مجازی دستور زیر را اجرا کنید:

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

خروجی مورد انتظار (حذف شده):

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

تهیه شناسه مشتری

برای استفاده از قابلیت رزرو برنامه، باید شناسه مشتری OAuth 2.0 را با استفاده از Cloud Console آماده کنیم. این کار هنگام ورود به برنامه انجام خواهد شد، زیرا رزرو از اعتبارنامه‌های مشتری برای ثبت داده‌های رزرو در پایگاه داده استفاده می‌کند.

در کنسول ابری، به بخش APIها و سرویس‌ها بروید و روی «صفحه رضایت OAuth» کلیک کنید و کاربر «داخلی» را انتخاب کنید.

2400e5dcdb93eab8.png

سپس روی «ایجاد» کلیک کنید و در صفحه بعدی مراحل را دنبال کنید.

6c34d235156e571f.png

شما باید فیلدهای مورد نیاز مانند «نام برنامه» و «ایمیل پشتیبانی کاربر» را پر کنید. همچنین می‌توانید دامنه‌ای را که می‌خواهید در صفحه رضایت‌نامه نمایش داده شود و در نهایت «اطلاعات تماس توسعه‌دهنده» را اضافه کنید.

2b7cd51aff915072.png

سپس دکمه «ذخیره و ادامه» را در پایین صفحه فشار می‌دهید و به صفحه بعد هدایت می‌شوید.

d90c10c88fd347f9.png

لازم نیست چیزی را در آنجا تغییر دهید، مگر اینکه بخواهید محدوده‌ها را مشخص کنید. در نهایت با فشار دادن دوباره دکمه «ذخیره و ادامه» آن را تأیید می‌کنید. به این ترتیب صفحه رضایت برنامه تنظیم می‌شود.

مرحله بعدی ایجاد شناسه کلاینت است. در پنل سمت چپ روی «اعتبارنامه‌ها» کلیک می‌کنید که شما را به اعتبارنامه‌های OAuth2 هدایت می‌کند.

7ad97432390f224c.png

در اینجا روی «ایجاد اعتبارنامه‌ها» در بالا کلیک کنید و «OAuth ClientID» را انتخاب کنید. سپس صفحه دیگری باز می‌شود.

325a926431c8f16d.png

از لیست کشویی نوع برنامه، گزینه "Web application" را انتخاب کنید و آدرس اینترنتی (URI) برنامه خود (و پورت - به صورت اختیاری) را به عنوان "Authorized JavaScript origins" قرار دهید. و برای استفاده از صفحه نمایش پاپ‌آپ احراز هویت، باید میزبان برنامه خود را به همراه "/login/google" در انتها به "Authorized redirect URIs" اضافه کنید. در تصویر بالا می‌توانید ببینید که من از http://localhost به عنوان آدرس اینترنتی برنامه پایه خود استفاده کرده‌ام.

پس از فشردن دکمه «ایجاد»، یک پنجره بازشو با اطلاعات کاربری مشتریان شما نمایش داده می‌شود.

e91adf03ec31cd15.png

بعداً برای استفاده در برنامه خود به شناسه کلاینت (و در صورت تمایل به رمز کلاینت) نیاز خواهیم داشت.

اجرای برنامه دستیار

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

در جلسه SSH ماشین مجازی دستور زیر را اجرا کنید:

export BASE_URL=$(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")

خروجی مورد انتظار (حذف شده):

student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export BASE_URL=$(gcloud  run services list --filter="(retrieval-service)" --format="value(URL)")

برای استفاده از قابلیت‌های پیشرفته‌تر برنامه مانند رزرو و تغییر پرواز، باید با استفاده از حساب گوگل خود وارد برنامه شویم و برای این منظور باید متغیر محیطی CLIENT_ID را با استفاده از شناسه کلاینت OAuth از فصل Prepare Client ID ارائه دهیم:

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

خروجی مورد انتظار (حذف شده):

student@instance-1:~/genai-databases-retrieval-app/llm_demo$ export CLIENT_ID=215....apps.googleusercontent.com

و حالا می‌توانیم برنامه‌ی خود را اجرا کنیم:

python run_app.py

خروجی مورد انتظار:

student@instance-1:~/genai-databases-retrieval-app/llm_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)

اتصال به برنامه

شما چندین راه برای اتصال به برنامه در حال اجرا روی ماشین مجازی دارید. به عنوان مثال می‌توانید با استفاده از قوانین فایروال در VPC، پورت ۸۰۸۱ را روی ماشین مجازی باز کنید یا یک متعادل‌کننده بار با IP عمومی ایجاد کنید. در اینجا ما قصد داریم از یک تونل SSH به ماشین مجازی استفاده کنیم که پورت محلی ۸۰۸۰ را به پورت ۸۰۸۱ ماشین مجازی ترجمه می‌کند.

اتصال از دستگاه محلی

وقتی می‌خواهیم از یک دستگاه محلی متصل شویم، باید یک تونل SSH اجرا کنیم. این کار را می‌توان با استفاده از gcloud compute ssh انجام داد:

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

خروجی مورد انتظار:

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

حالا می‌توانیم مرورگر را باز کنیم و از http://localhost:8081 برای اتصال به برنامه خود استفاده کنیم. باید صفحه برنامه را ببینیم.

c667b9013afac3f9.png

اتصال از طریق Cloud Shell

به عنوان یک روش جایگزین، می‌توانیم از cloud shell برای اتصال استفاده کنیم. با استفاده از علامت "+" در بالا، یک تب Cloud Shell دیگر باز کنید.

4ca978f5142bb6ce.png

در تب new cloud shell، با اجرای دستور gcloud، تونل به ماشین مجازی خود را آغاز کنید:

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

خطای «نمی‌توان آدرس درخواستی را اختصاص داد» نمایش داده می‌شود - لطفاً آن را نادیده بگیرید.

خروجی مورد انتظار به شرح زیر است:

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

این پورت ۸۰۸۰ را روی پوسته ابری شما باز می‌کند که می‌تواند برای «پیش‌نمایش وب» استفاده شود.

روی دکمه «پیش‌نمایش وب» در سمت راست بالای Cloud Shell خود کلیک کنید و از منوی کشویی «پیش‌نمایش روی پورت ۸۰۸۰» را انتخاب کنید.

۴۴۴fbf54dcd4d160.png

این یک تب جدید در مرورگر وب شما با رابط کاربری برنامه باز می‌کند. شما باید بتوانید صفحه "دستیار خدمات مشتریان Cymbal Air" را ببینید. در نوار آدرس صفحه، آدرس اینترنتی (URI) صفحه پیش‌نمایش را می‌بینیم. باید قسمت "/?authuser=0&redirectedPreviously=true" را از انتها حذف کنیم.

389f0ae2945beed5.png

و از بخش اول URI مانند "https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/" که در پنجره مرورگر باقی می‌ماند و به عنوان " منشأهای جاوا اسکریپت مجاز " و "URIهای تغییر مسیر مجاز " برای اعتبارنامه‌های ما که در فصل "آماده‌سازی شناسه مشتری" ایجاد شده‌اند، استفاده می‌کند و مقادیر http://localhost:8080 ارائه شده در ابتدا را جایگزین یا اضافه می‌کند. مقدار بالایی مانند " https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev " و مقدار پایینی " https://8080-cs-35704030349-default.cs-us-east1-vpcf.cloudshell.dev/login/google " خواهد بود.

2c37eeda0a7e2f80.png

وارد برنامه شوید

وقتی همه چیز تنظیم شد و برنامه شما باز شد، می‌توانیم از دکمه «ورود» در سمت راست بالای صفحه برنامه برای ارائه اعتبارنامه خود استفاده کنیم. این اختیاری است و فقط در صورتی لازم است که بخواهید قابلیت رزرو برنامه را امتحان کنید.

a1f571371b957129.png

یک پنجره بازشو باز می‌شود که می‌توانیم اعتبارنامه‌های خود را انتخاب کنیم.

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

این نسخه آزمایشی، دستیار خدمات مشتری سیمبال ایر را به نمایش می‌گذارد. سیمبال ایر یک شرکت هواپیمایی مسافربری خیالی است. این دستیار یک چت‌بات هوش مصنوعی است که به مسافران کمک می‌کند تا پروازها را مدیریت کنند و اطلاعات مربوط به مرکز سیمبال ایر در فرودگاه بین‌المللی سانفرانسیسکو (SFO) را جستجو کنند.

بدون ورود به سیستم (بدون CLIENT_ID) می‌تواند به سوالات کاربران مانند موارد زیر پاسخ دهد:

پرواز بعدی به دنور چه زمانی است؟

آیا مغازه‌های لوکسی اطراف دروازه C28 وجود دارد؟

از کجا می‌توانم نزدیک گیت A6 قهوه تهیه کنم؟

از کجا می‌توانم هدیه بخرم؟

لطفا پرواز به دنور را با حرکت ساعت ۱۰:۳۵ صبح رزرو کنید.

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

6e7758f707c67c3e.png

این برنامه از جدیدترین مدل‌های بنیاد گوگل برای تولید پاسخ‌ها و افزودن اطلاعات مربوط به پروازها و امکانات رفاهی از پایگاه داده عملیاتی Cloud SQL استفاده می‌کند. می‌توانید اطلاعات بیشتر در مورد این برنامه آزمایشی را در صفحه گیت‌هاب پروژه بخوانید.

۹. محیط را تمیز کنید

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

سرویس Cloud Run را حذف کنید

در Cloud Shell اجرا کنید:

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

خروجی مورد انتظار کنسول:

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 Shell اجرا کنید:

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

خروجی مورد انتظار کنسول:

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

نمونه Cloud SQL را حذف کنید

وقتی کارتان با آزمایشگاه تمام شد، نمونه Cloud SQL را از بین ببرید.

در پوسته ابری، اگر اتصال شما قطع شده و تمام تنظیمات قبلی از بین رفته است، متغیرهای پروژه و محیط را تعریف کنید:

export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)

حذف نمونه:

gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID

خروجی مورد انتظار کنسول:

student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
All of the instance data will be lost when the instance is deleted.

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

Deleting Cloud SQL instance...done.                                                                                                                
Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].

حالا می‌توانیم ماشین مجازی خود را نابود کنیم

حذف ماشین مجازی GCE

در Cloud Shell اجرا کنید:

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

خروجی مورد انتظار کنسول:

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

حساب کاربری سرویس (Service Account) مربوط به ماشین مجازی GCE و سرویس بازیابی (The Retrieval) را حذف کنید.

در Cloud Shell اجرا کنید:

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

خروجی مورد انتظار کنسول:

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

۱۰. تبریک

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

آنچه ما پوشش داده‌ایم

  • نحوه ایجاد یک نمونه Cloud SQL
  • نحوه اتصال به نمونه Cloud SQL
  • نحوه پیکربندی و استقرار سرویس بازیابی پایگاه‌های داده GenAI
  • نحوه استقرار یک برنامه نمونه با استفاده از سرویس مستقر شده

۱۱. نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط آن را بخوانید آن را بخوانید و تمرین‌ها را انجام دهید