1. مقدمه
در این کد لبه شما نحوه استقرار سرویس بازیابی پایگاه داده GenAI و ایجاد یک نمونه برنامه تعاملی با استفاده از محیط مستقر شده را خواهید آموخت.
می توانید اطلاعات بیشتری در مورد سرویس بازیابی GenAI و نمونه برنامه از اینجا دریافت کنید.
پیش نیازها
- درک اولیه از Google Cloud Console
- مهارت های اولیه در رابط خط فرمان و پوسته Google Cloud
چیزی که یاد خواهید گرفت
- نحوه استقرار AlloyDB Cluster
- نحوه اتصال به AlloyDB
- نحوه پیکربندی و استقرار سرویس بازیابی پایگاه داده GenAI
- نحوه استقرار یک برنامه نمونه با استفاده از سرویس مستقر شده
آنچه شما نیاز دارید
- یک حساب Google Cloud و پروژه Google Cloud
- یک مرورگر وب مانند کروم
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.
3. قبل از شروع
فعال کردن API
خروجی:
در داخل Cloud Shell، مطمئن شوید که ID پروژه شما تنظیم شده است:
معمولاً ID پروژه در داخل پرانتز در خط فرمان در پوسته ابری همانطور که در تصویر نشان داده شده است نشان داده می شود:
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 را با استفاده از علامت "+" در بالا باز کنید.
در تب جدید پوسته ابری اجرا کنید:
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» کاربر را انتخاب کنید.
سپس «ایجاد» را فشار دهید و در صفحه بعدی دنبال کنید.
باید فیلدهای الزامی مانند «نام برنامه» و «ایمیل پشتیبانی کاربر» را پر کنید. همچنین میتوانید دامنهای را که میخواهید در صفحه رضایت نمایش داده شود و در نهایت «اطلاعات تماس برنامهنویس» را اضافه کنید.
سپس دکمه "ذخیره و ادامه" را در پایین صفحه فشار دهید و به صفحه بعدی هدایت خواهید شد.
نیازی نیست چیزی را در آنجا تغییر دهید مگر اینکه بخواهید دامنه را مشخص کنید. در نهایت با فشار دادن مجدد دکمه "ذخیره و ادامه" آن را تأیید می کنید. که صفحه رضایت برنامه را تنظیم می کند.
مرحله بعدی ایجاد شناسه مشتری است. در پانل سمت چپ روی «Credentials» کلیک میکنید که شما را به اعتبارنامه OAuth2 هدایت میکند.
در اینجا روی «Create Credentials» در بالا کلیک کنید و «OAuth ClientID» را انتخاب کنید. سپس صفحه دیگری باز میشود.
"برنامه وب" را از لیست کشویی برای نوع برنامه انتخاب کنید و URI برنامه خود را (و پورت - به صورت اختیاری) را به عنوان "منشاهای مجاز جاوا اسکریپت" قرار دهید. و باید میزبان برنامه خود را با "/login/google" در پایان به "URI های تغییر مسیر مجاز" اضافه کنید تا بتوانید از صفحه بازشو مجوز استفاده کنید. در تصویر بالا می بینید که من از http://localhost به عنوان URI برنامه پایه خود استفاده کرده ام.
پس از فشار دادن دکمه "ایجاد"، یک پنجره بازشو با اعتبار مشتریان خود دریافت می کنید.
ما بعداً به شناسه مشتری (و در صورت تمایل 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 برای اتصال به برنامه خود استفاده کنیم. ما باید صفحه برنامه را ببینیم.
اتصال از Cloud Shell
یا می توانیم از پوسته ابری برای اتصال استفاده کنیم. یک برگه دیگر Cloud Shell را با استفاده از علامت "+" در بالا باز کنید.
در پوسته ابری جدید با اجرای دستور 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 که در اصل ارائه شده است، اضافه کنید یا به آنها اضافه کنید.
در تب جدید پوسته ابری، با اجرای دستور 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» را انتخاب کنید.
یک تب جدید در مرورگر وب شما با رابط برنامه باز می شود. شما باید بتوانید صفحه «دستیار خدمات مشتریان سیمبال ایر» را ببینید.
وارد اپلیکیشن شوید
هنگامی که همه چیز تنظیم شد و برنامه شما باز است، میتوانیم از دکمه "ورود به سیستم" در سمت راست بالای صفحه برنامه خود برای ارائه اطلاعات کاربری خود استفاده کنیم. این اختیاری است و فقط در صورتی لازم است که بخواهید عملکرد رزرو برنامه را امتحان کنید.
یک پنجره پاپ آپ باز می شود که در آن می توانیم اعتبار خود را انتخاب کنیم.
پس از ثبت نام، برنامه آماده است و می توانید درخواست های خود را در قسمت پایین پنجره ارسال کنید.
این نسخه ی نمایشی دستیار خدمات مشتری Cymbal Air را به نمایش می گذارد. Cymbal Air یک شرکت هواپیمایی خیالی مسافربری است. دستیار یک ربات چت هوش مصنوعی است که به مسافران کمک می کند تا پروازها را مدیریت کنند و اطلاعاتی درباره مرکز Cymbal Air در فرودگاه بین المللی سانفرانسیسکو (SFO) جستجو کنند.
بدون ورود به سیستم (بدون CLIENT_ID) میتواند به کاربران در پاسخ به سوالاتی مانند:
پرواز بعدی به دنور کی است؟
آیا مغازه های لوکسی در اطراف دروازه C28 وجود دارد؟
نزدیک دروازه A6 از کجا می توانم قهوه تهیه کنم؟
از کجا می توانم هدیه بخرم؟
لطفاً پرواز به مقصد دنور را رزرو کنید که ساعت 10:35 صبح حرکت می کند
وقتی وارد برنامه میشوید، میتوانید قابلیتهای دیگری مانند رزرو پرواز را امتحان کنید یا بررسی کنید که آیا صندلی اختصاص داده شده به شما یک صندلی در پنجره یا راهرو است.
این برنامه از جدیدترین مدلهای پایه 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. نظرسنجی
خروجی: