ساخت یک برنامه چت مبتنی بر LLM و RAG با استفاده از AlloyDB AI و LangChain

1. مقدمه

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

98c2676cc78880e.png

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

پیش نیازها

  • درک اولیه از Google Cloud Console
  • مهارت های اولیه در رابط خط فرمان و پوسته Google Cloud

چیزی که یاد خواهید گرفت

  • نحوه استقرار AlloyDB Cluster
  • نحوه اتصال به AlloyDB
  • نحوه پیکربندی و استقرار سرویس بازیابی پایگاه داده GenAI
  • نحوه استقرار یک برنامه نمونه با استفاده از سرویس مستقر شده

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

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

2. راه اندازی و الزامات

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

3. قبل از شروع

فعال کردن API

خروجی:

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

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

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

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

PROJECT_ID=$(gcloud config get-value project)

فعال کردن تمام خدمات لازم:

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

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

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.

4. AlloyDB Cluster را مستقر کنید

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

محدوده IP خصوصی ایجاد کنید

ما باید پیکربندی دسترسی به سرویس خصوصی را در VPC خود برای AlloyDB پیکربندی کنیم. فرض در اینجا این است که ما شبکه VPC "پیش‌فرض" را در پروژه داریم و قرار است برای همه اقدامات استفاده شود.

ایجاد محدوده IP خصوصی:

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

با استفاده از محدوده IP اختصاص داده شده اتصال خصوصی ایجاد کنید:

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

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

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

یک خوشه AlloyDB در منطقه us-central1 ایجاد کنید.

رمز عبور را برای کاربر postgres تعریف کنید. شما می توانید رمز عبور خود را تعریف کنید یا از یک تابع تصادفی برای ایجاد آن استفاده کنید

export PGPASSWORD=`openssl rand -hex 12`

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

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

برای استفاده در آینده به رمز عبور PostgreSQL توجه کنید:

echo $PGPASSWORD

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

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

منطقه و نام خوشه AlloyDB را تعریف کنید. ما از ناحیه us-central1 و alloydb-aip-01 به عنوان نام خوشه استفاده می کنیم:

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

برای ایجاد کلاستر دستور را اجرا کنید:

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

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

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.                                                                                                                                                                                                                                                           

نمونه اولیه AlloyDB را ایجاد کنید

در همان جلسه پوسته ابری، یک نمونه اولیه AlloyDB برای خوشه خود ایجاد کنید. اگر اتصال شما قطع شده است، باید دوباره متغیرهای محیط نام منطقه و خوشه را تعریف کنید.

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

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

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. ماشین مجازی GCE را آماده کنید

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

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

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

GCE VM را مستقر کنید

یک GCE VM در همان منطقه و VPC به عنوان خوشه AlloyDB ایجاد کنید.

در 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

Postgres Client را نصب کنید

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

اتصال به VM:

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

به Instance متصل شوید

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

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

برای اتصال به AlloyDB از GCE VM از $PGASSWORD قبلاً ذکر شده و نام خوشه استفاده کنید:

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"

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

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

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

exit

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

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

6- پایگاه داده را مقداردهی اولیه کنید

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

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

یک پایگاه داده با نام "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:~$

محیط پایتون را آماده کنید

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

در GCE VM اجرا کنید:

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

python -V

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

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

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

مخزن GitHub را با کد سرویس بازیابی و برنامه نمونه کلون کنید.

در GCE VM اجرا کنید:

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

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

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

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

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

در GCE VM اجرا کنید:

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$

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

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

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

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

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

4ca978f5142bb6ce.png

در تب جدید پوسته ابری اجرا کنید:

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"

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

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

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

exit

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

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

در جلسه VM 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$

بررسی سرویس

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

در جلسه VM 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$

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

8. استقرار نمونه برنامه

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

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

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

در جلسه VM 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 آماده کنیم. این زمانی است که وارد برنامه می شویم زیرا رزرو از اعتبار مشتری برای ثبت داده های رزرو در پایگاه داده استفاده می کند.

در Cloud Console به APIs and Services بروید و روی «OAuth consent screen» کلیک کنید و «Internal» کاربر را انتخاب کنید.

2400e5dcdb93eab8.png

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

6c34d235156e571f.png

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

2b7cd51aff915072.png

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

d90c10c88fd347f9.png

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

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

7ad97432390f224c.png

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

325a926431c8f16d.png

"برنامه وب" را از لیست کشویی برای نوع برنامه انتخاب کنید و URI برنامه خود را (و پورت - به صورت اختیاری) را به عنوان "منشاهای مجاز جاوا اسکریپت" قرار دهید. و باید میزبان برنامه خود را با "/login/google" در پایان به "URI های تغییر مسیر مجاز" اضافه کنید تا بتوانید از صفحه بازشو مجوز استفاده کنید. در تصویر بالا می بینید که من از http://localhost به عنوان URI برنامه پایه خود استفاده کرده ام.

پس از فشار دادن دکمه "ایجاد"، یک پنجره بازشو با اعتبار مشتریان خود دریافت می کنید.

e91adf03ec31cd15.png

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

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

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

در جلسه VM 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)")

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

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)

به برنامه متصل شوید

شما راه های مختلفی برای اتصال به برنامه در حال اجرا در VM دارید. به عنوان مثال می توانید پورت 8081 را در VM با استفاده از قوانین فایروال در VPC باز کنید یا یک load balancer با IP عمومی ایجاد کنید. در اینجا می خواهیم از یک تونل SSH به VM استفاده کنیم که پورت محلی 8080 را به پورت VM 8081 ترجمه می کند.

اتصال از ماشین محلی

هنگامی که می خواهیم از یک ماشین محلی متصل شویم، باید یک تونل 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 را با استفاده از علامت "+" در بالا باز کنید.

4ca978f5142bb6ce.png

در پوسته ابری جدید با اجرای دستور gcloud، URI مبدا و تغییر مسیر برای کلاینت وب خود دریافت کنید:

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

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

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

و از مبدأ و تغییر مسیر URI ها به عنوان « منشاهای مجاز جاوا اسکریپت » و «URI های مجاز تغییر مسیر » برای اعتبارنامه های ما ایجاد شده در فصل «آماده کردن شناسه مشتری» استفاده کنید و به مقادیر http://localhost:8080 که در اصل ارائه شده است، اضافه کنید یا به آنها اضافه کنید.

2c37eeda0a7e2f80.png

در تب جدید پوسته ابری، با اجرای دستور gcloud، تونل را به VM خود راه اندازی کنید:

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

پورت 8080 را روی پوسته ابری شما باز می کند که می تواند برای "پیش نمایش وب" استفاده شود.

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

444fbf54dcd4d160.png

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

389f0ae2945beed5.png

وارد اپلیکیشن شوید

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

a1f571371b957129.png

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

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

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

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

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

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

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

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

لطفاً پرواز به مقصد دنور را رزرو کنید که ساعت 10:35 صبح حرکت می کند

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

6e7758f707c67c3e.png

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

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

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

سرویس 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)$

پس از اتمام کار با آزمایشگاه، نمونه ها و خوشه های AlloyDB را نابود کنید

خوشه AlloyDB و همه نمونه ها را حذف کنید

خوشه با نیروی گزینه از بین می رود که همچنین تمام نمونه های متعلق به خوشه را حذف می کند.

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

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

حذف خوشه:

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

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

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 را حذف کنید

تمام بک آپ های AlloyDB برای خوشه را حذف کنید:

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

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

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.                                                                                                                                                                                                                                                            

حالا می توانیم VM خود را نابود کنیم

GCE VM را حذف کنید

در 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 

حساب سرویس GCE VM و The Retrieval Service را حذف کنید

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

10. تبریک می گویم

برای تکمیل کد لبه تبریک می گویم.

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

  • نحوه استقرار AlloyDB Cluster
  • نحوه اتصال به AlloyDB
  • نحوه پیکربندی و استقرار سرویس بازیابی پایگاه داده GenAI
  • نحوه استقرار یک برنامه نمونه با استفاده از سرویس مستقر شده

11. نظرسنجی

خروجی:

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

فقط آن را بخوانید آن را بخوانید و تمرینات را کامل کنید