1. مقدمه
در این کد لبه، نحوه استفاده از AlloyDB AI را با ترکیب جستجوی برداری با جاسازیهای Vertex AI خواهید آموخت.
پیش نیازها
- درک اولیه از Google Cloud، کنسول
- مهارت های اولیه در رابط خط فرمان و پوسته گوگل
چیزی که یاد خواهید گرفت
- نحوه استقرار خوشه AlloyDB و نمونه اولیه
- نحوه اتصال به AlloyDB از Google Compute Engine VM
- نحوه ایجاد پایگاه داده و فعال کردن AlloyDB AI
- نحوه بارگذاری اطلاعات در پایگاه داده
- نحوه استفاده از مدل جاسازی هوش مصنوعی Vertex در AlloyDB
- نحوه غنی سازی نتیجه با استفاده از مدل مولد Vertex AI
آنچه شما نیاز دارید
- یک حساب 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 پروژه شما تنظیم شده است:
gcloud config set project [YOUR-PROJECT-ID]
تنظیم متغیر محیطی PROJECT_ID:
PROJECT_ID=$(gcloud config get-value project)
فعال کردن تمام خدمات لازم:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
خروجی مورد انتظار
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417 Updated property [core/project]. student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-14650] student@cloudshell:~ (test-project-001-402417)$ student@cloudshell:~ (test-project-001-402417)$ gcloud services enable alloydb.googleapis.com \ compute.googleapis.com \ cloudresourcemanager.googleapis.com \ servicenetworking.googleapis.com \ aiplatform.googleapis.com Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
منطقه پیشفرض خود را برای استفاده از مدلهای جاسازی هوش مصنوعی Vertex پیکربندی کنید. درباره مکانهای موجود برای Vertex AI بیشتر بخوانید. در مثال ما از منطقه us-central1 استفاده می کنیم.
gcloud config set compute/region us-central1
4. AlloyDB را مستقر کنید
قبل از ایجاد یک خوشه 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. به AlloyDB متصل شوید
AlloyDB با استفاده از یک اتصال فقط خصوصی مستقر شده است، بنابراین ما به یک VM با سرویس گیرنده PostgreSQL نصب شده برای کار با پایگاه داده نیاز داریم.
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
خروجی کنسول مورد انتظار:
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.us-central1-a.c.gleb-test-short-001-418811.internal 6.1.0-18-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. student@instance-1:~$
دستور اجرای نرم افزار را در داخل ماشین مجازی نصب کنید:
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 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B] Get:2 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease [6406 B] Hit:3 https://deb.debian.org/debian bullseye InRelease Get:4 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB] Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable/main amd64 Packages [1930 B] Get:6 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB] Get:7 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB] ...redacted... update-alternatives: using /usr/share/postgresql/13/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode Setting up postgresql-client (13+225) ... Processing triggers for man-db (2.9.4-2) ... Processing triggers for libc-bin (2.31-13+deb11u7) ...
به Instance متصل شوید
با استفاده از psql از VM به نمونه اولیه متصل شوید.
در همان برگه Cloud Shell با جلسه SSH باز شده به instance-1 VM شما.
از مقدار مشخص شده کلمه عبور AlloyDB (PGPASSWORD) و شناسه خوشه AlloyDB برای اتصال به AlloyDB از GCE VM استفاده کنید:
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=CQhOi5OygD4ps6ty student@instance-1:~$ ADBCLUSTER=alloydb-aip-01 student@instance-1:~$ REGION=us-central1 student@instance-1:~$ INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)") gleb@instance-1:~$ psql "host=$INSTANCE_IP user=postgres sslmode=require" psql (15.6 (Debian 15.6-0+deb12u1), server 15.5) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) Type "help" for help. postgres=>
جلسه psql را ببندید:
exit
6. پایگاه داده را آماده کنید
ما باید یک پایگاه داده ایجاد کنیم، یکپارچه سازی Vertex AI را فعال کنیم، اشیاء پایگاه داده را ایجاد کنیم و داده ها را وارد کنیم.
مجوزهای لازم را به AlloyDB اعطا کنید
مجوزهای Vertex AI را به عامل سرویس AlloyDB اضافه کنید.
یک برگه دیگر Cloud Shell را با استفاده از علامت "+" در بالا باز کنید.
در تب جدید پوسته ابری اجرا کنید:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
خروجی کنسول مورد انتظار:
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-11039] student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \ --role="roles/aiplatform.user" Updated IAM policy for project [test-project-001-402417]. bindings: - members: - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com role: roles/aiplatform.user - members: ... etag: BwYIEbe_Z3U= version: 1
برگه را با یکی از دستورهای اجرایی "exit" در برگه ببندید:
exit
ایجاد پایگاه داده
ایجاد شروع سریع پایگاه داده
در جلسه GCE VM اجرا کنید:
ایجاد پایگاه داده:
psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE quickstart_db"
خروجی کنسول مورد انتظار:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE quickstart_db" CREATE DATABASE student@instance-1:~$
Vertex AI Integration را فعال کنید
ادغام Vertex AI و پسوندهای pgvector را در پایگاه داده فعال کنید.
در GCE VM اجرا کنید:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE"
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector"
خروجی کنسول مورد انتظار:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE" psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "CREATE EXTENSION IF NOT EXISTS vector" CREATE EXTENSION CREATE EXTENSION student@instance-1:~$
وارد کردن داده ها
داده های آماده شده را دانلود کرده و به پایگاه داده جدید وارد کنید.
در GCE VM اجرا کنید:
gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header"
gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header"
gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header"
خروجی کنسول مورد انتظار:
student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" SET SET SET SET SET set_config ------------ (1 row) SET SET SET SET SET SET CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE TABLE ALTER TABLE CREATE SEQUENCE ALTER TABLE ALTER SEQUENCE ALTER TABLE ALTER TABLE ALTER TABLE student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_products from stdin csv header" COPY 941 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_inventory from stdin csv header" COPY 263861 student@instance-1:~$ gsutil cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" -c "\copy cymbal_stores from stdin csv header" COPY 4654 student@instance-1:~$
7. تعبیه ها را محاسبه کنید
پس از وارد کردن داده ها، داده های محصول خود را در جدول cymbal_products، موجودی که تعداد محصولات موجود در هر فروشگاه را در جدول cymbal_inventory و لیست فروشگاه ها در جدول cymbal_stores نشان می دهد، دریافت کردیم. ما باید داده های برداری را بر اساس توضیحات برای محصولات خود محاسبه کنیم و می خواهیم از تعبیه تابع برای آن استفاده کنیم. با استفاده از تابع، میخواهیم از ادغام Vertex AI برای محاسبه دادههای برداری بر اساس توضیحات محصولات خود و اضافه کردن آن به جدول استفاده کنیم. شما می توانید اطلاعات بیشتری در مورد تکنولوژی مورد استفاده در مستندات بخوانید.
ایجاد ستون جاسازی
با استفاده از psql به پایگاه داده متصل شوید و با استفاده از تابع embedding در جدول cymbal_products یک ستون مجازی با داده های برداری ایجاد کنید. تابع embedding داده های برداری را از Vertex AI بر اساس داده های ارائه شده از ستون product_description برمی گرداند.
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
در جلسه psql پس از اتصال به پایگاه داده اجرا کنید:
ALTER TABLE cymbal_products ADD COLUMN embedding vector GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED;
دستور ستون مجازی را ایجاد می کند و آن را با داده های برداری پر می کند.
خروجی کنسول مورد انتظار:
student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db" psql (13.11 (Debian 13.11-0+deb11u1), server 14.7) WARNING: psql major version 13, server major version 14. Some psql features might not work. SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. quickstart_db=> ALTER TABLE cymbal_products ADD COLUMN embedding vector GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED; ALTER TABLE quickstart_db=>
8. Similarity Search را اجرا کنید
اکنون میتوانیم جستجوی خود را با استفاده از جستجوی شباهت بر اساس مقادیر برداری محاسبهشده برای توضیحات و مقدار برداری که برای درخواست خود دریافت میکنیم، اجرا کنیم.
پرس و جوی SQL را می توان از همان رابط خط فرمان psql یا به عنوان جایگزین، از استودیو AlloyDB اجرا کرد. هر خروجی چند ردیفه و پیچیده ممکن است در AlloyDB Studio بهتر به نظر برسد.
به AlloyDB Studio متصل شوید
در فصلهای بعدی، تمام دستورات SQL که نیاز به اتصال به پایگاه داده دارند را میتوان در استودیو AlloyDB اجرا کرد. برای اجرای دستور باید رابط کنسول وب را برای خوشه AlloyDB خود با کلیک بر روی نمونه اولیه باز کنید.
سپس روی AlloyDB Studio در سمت چپ کلیک کنید:
پایگاه داده quickstart_db، user postgres را انتخاب کنید و رمز عبوری را که هنگام ایجاد کلاستر ذکر شده است، ارائه دهید. سپس بر روی دکمه "Authenticate" کلیک کنید.
رابط AlloyDB Studio را باز می کند. برای اجرای دستورات در پایگاه داده، روی تب "Editor 1" در سمت راست کلیک کنید.
این رابط را باز می کند که در آن می توانید دستورات SQL را اجرا کنید
اگر ترجیح می دهید از خط فرمان psql استفاده کنید، مسیر جایگزین را دنبال کنید و همانطور که در فصل های قبلی توضیح داده شد، از جلسه VM SSH خود به پایگاه داده متصل شوید.
Similarity Search را از psql اجرا کنید
اگر جلسه دیتابیس شما قطع شد، دوباره با استفاده از psql یا استودیو AlloyDB به پایگاه داده متصل شوید.
اتصال به پایگاه داده:
psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
برای دریافت لیستی از محصولات موجود که بیشترین ارتباط را با درخواست مشتری دارد، یک پرس و جو انجام دهید. درخواستی که میخواهیم به Vertex AI ارسال کنیم تا مقدار برداری را به دست بیاوریم، به نظر میرسد: «چه نوع درختان میوهای در اینجا رشد میکنند؟»
در اینجا پرس و جوی وجود دارد که می توانید برای انتخاب 10 مورد اول که برای درخواست ما مناسب هستند اجرا کنید:
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(cp.embedding <=> embedding('text-embedding-004','What kind of fruit trees grow well here?')::vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 10;
و در اینجا خروجی مورد انتظار است:
quickstart_db=> SELECT cp.product_name, left(cp.product_description,80) as description, cp.sale_price, cs.zip_code, (cp.embedding <=> embedding('text-embedding-004','What kind of fruit trees grow well here?')::vector) as distance FROM cymbal_products cp JOIN cymbal_inventory ci on ci.uniq_id=cp.uniq_id JOIN cymbal_stores cs on cs.store_id=ci.store_id AND ci.inventory>0 AND cs.store_id = 1583 ORDER BY distance ASC LIMIT 10; product_name | description | sale_price | zip_code | distance ---------------------+----------------------------------------------------------------------------------+------------+----------+--------------------- Cherry Tree | This is a beautiful cherry tree that will produce delicious cherries. It is an d | 75.00 | 93230 | 0.287184013172779 Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.30574073611569963 Secateurs | These secateurs are perfect for pruning small branches and vines. | 15.00 | 93230 | 0.3264385326189635 Trimming Shears | These trimming shears are perfect for trimming hedges and bushes. | 20.00 | 93230 | 0.33293036535756393 Cypress Tree | This is a beautiful cypress tree that will provide shade and privacy. It is an e | 75.00 | 93230 | 0.33485770716129326 Madrone | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an | 50.00 | 93230 | 0.3354408801293012 California Redwood | This is a beautiful redwood tree that can grow to be over 300 feet tall. It is a | 1000.00 | 93230 | 0.3427243109636263 California Lilac | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d | 5.00 | 93230 | 0.3427628377929176 California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.3430208475356905 Maple Tree | This is a beautiful maple tree that will produce colorful leaves in the fall. It | 100.00 | 93230 | 0.3432609589330091 (10 rows) quickstart_db=>
9. بهبود پاسخ
می توانید با استفاده از نتیجه پرس و جو پاسخ به یک برنامه مشتری را بهبود بخشید و با استفاده از نتایج پرس و جو ارائه شده به عنوان بخشی از درخواست مدل زبان پایه مولد Vertex AI یک خروجی معنادار تهیه کنید.
برای دستیابی به این هدف، قصد داریم با نتایج جستجوی بردار، یک JSON تولید کنیم، سپس از JSON تولید شده به عنوان یک درخواست برای مدل متنی LLM در Vertex AI برای ایجاد یک خروجی معنادار استفاده کنیم. در مرحله اول ما JSON را تولید می کنیم، سپس آن را در استودیو Vertex AI تست می کنیم و در مرحله آخر آن را در یک دستور SQL که می تواند در یک برنامه استفاده شود، وارد می کنیم.
خروجی با فرمت JSON تولید کنید
کوئری را تغییر دهید تا خروجی با فرمت JSON تولید شود و تنها یک سطر برای انتقال به Vertex AI برگردانید.
در اینجا مثالی از پرس و جو آورده شده است:
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-004','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;
و در اینجا JSON مورد انتظار در خروجی است:
[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]
دستور را در Vertex AI Studio اجرا کنید
ما می توانیم از JSON تولید شده برای ارائه آن به عنوان بخشی از مدل متنی AI مولد در Vertex AI Studio استفاده کنیم.
Vertex AI Studio را در کنسول ابری باز کنید.
ممکن است از شما بخواهد API های اضافی را فعال کنید، اما می توانید درخواست را نادیده بگیرید. ما برای تکمیل آزمایشگاه خود به API اضافی نیاز نداریم.
در اینجا اعلانی است که ما می خواهیم استفاده کنیم:
شما یک مشاور دوستانه هستید که به یافتن محصولی بر اساس نیازهای مشتری کمک می کنید.
بر اساس درخواست مشتری، ما لیستی از محصولاتی را بارگذاری کرده ایم که نزدیک به جستجو هستند.
فهرست در قالب JSON با فهرست مقادیری مانند {"product_name":"name", "description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654"}e1b
اینم لیست محصولات:
[مکانی برای JSON ما]
مشتری پرسید: چه درختی اینجا بهتر رشد می کند؟
شما باید اطلاعات مربوط به محصول، قیمت و برخی اطلاعات تکمیلی را در صورت درخواست ارائه دهید
و زمانی که دستور را با مقادیر JSON خود و با استفاده از مدل gemini-1.5-flash اجرا می کنیم، نتیجه این است:
پاسخی که از مدل در این مثال گرفتیم به شرح زیر است. توجه داشته باشید که پاسخ شما ممکن است به دلیل تغییر مدل و پارامترها در طول زمان متفاوت باشد:
"من می بینم که شما به دنبال درختی هستید که در منطقه خود رشد کند. بر اساس کد پستی شما، 93230، درخت گیلاس گزینه عالی به نظر می رسد!
این درخت به عنوان یک درخت زیبا توصیف شده است که گیلاس های خوشمزه تولید می کند. در حال حاضر با قیمت 75.00 دلار به فروش می رسد.
در حالی که من جزئیات خاصی در مورد میزان رشد آن در منطقه شما ندارم، می توانم به شما بگویم که درختان گیلاس عموماً خاک با زهکشی خوب و آفتاب کامل را ترجیح می دهند.
برای اطمینان از بهترین نتایج، توصیه میکنم با یک متخصص باغبانی یا مهد کودک محلی مشورت کنید که میتواند توصیههای مناسبتری را برای موقعیت مکانی خاص و شرایط خاک شما ارائه دهد. آنها همچنین می توانند به شما کمک کنند تا بهترین تنوع را برای نیازهای خود انتخاب کنید و نکاتی در مورد کاشت و مراقبت ارائه دهند."
دستور را در PSQL اجرا کنید
ما میتوانیم از ادغام AlloyDB AI با Vertex AI برای دریافت پاسخ مشابه از یک مدل تولیدی با استفاده از SQL به طور مستقیم در پایگاه داده استفاده کنیم. اما برای استفاده از مدل gemini-1.5-flash ابتدا باید آن را ثبت کنیم.
افزونه را به نسخه 1.3 ارتقا دهید. همانطور که قبلا نشان داده شده است به پایگاه داده quickstart_db از pSQL متصل شوید (یا از AlloyDB Studio استفاده کنید) و اجرا کنید:
ALTER EXTENSION google_ml_integration UPDATE TO '1.3'
سپس باید پرچم پایگاه داده google_ml_integration.enable_model_support را روی "روشن" تنظیم کنیم. برای انجام این کار، میتوانید از رابط کنسول وب AlloyDB استفاده کنید یا دستور gcloud زیر را اجرا کنید.
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
--database-flags google_ml_integration.enable_model_support=on \
--region=$REGION \
--cluster=$ADBCLUSTER \
--project=$PROJECT_ID \
--update-mode=FORCE_APPLY
اجرای دستور در پسزمینه حدود 3-5 دقیقه طول میکشد. سپس می توانید پرچم جدید را در جلسه psql یا با استفاده از AlloyDB Studio که به پایگاه داده quickstart_db متصل می شود تأیید کنید.
show google_ml_integration.enable_model_support;
خروجی مورد انتظار از جلسه psql "روشن" است:
postgres=> show google_ml_integration.enable_model_support; google_ml_integration.enable_model_support -------------------------------------------- on (1 row)
سپس باید دو مدل را ثبت کنیم. اولین مورد، مدل text-embedding-004 از قبل استفاده شده است. از آنجایی که ما قابلیت های ثبت مدل را فعال کرده ایم، باید ثبت شود.
برای ثبت مدل در psql یا AlloyDB Studio کد زیر را اجرا کنید:
CALL
google_ml.create_model(
model_id => 'text-embedding-004',
model_provider => 'google',
model_qualified_name => 'text-embedding-004',
model_type => 'text_embedding',
model_auth_type => 'alloydb_service_agent_iam',
model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform');
و مدل بعدی که باید ثبت کنیم gemini-1.5-flash-001 است که برای تولید خروجی کاربرپسند استفاده خواهد شد.
CALL
google_ml.create_model(
model_id => 'gemini-1.5-flash-001',
model_request_url => 'https://$REGION-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/publishers/google/models/gemini-1.5-flash-001:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'alloydb_service_agent_iam');
همیشه میتوانید فهرست مدلهای ثبتشده را با انتخاب اطلاعات از google_ml.model_info_view تأیید کنید.
select model_id,model_type from google_ml.model_info_view;
در اینجا خروجی نمونه است
quickstart_db=> select model_id,model_type from google_ml.model_info_view; model_id | model_type -------------------------+---------------- textembedding-gecko | text_embedding textembedding-gecko@001 | text_embedding text-embedding-004 | text_embedding gemini-1.5-flash-001 | generic (4 rows)
اکنون میتوانیم از JSON تولید شده در یک جستوجو فرعی برای ارائه آن به عنوان بخشی از مدل متنی AI مولد با استفاده از SQL استفاده کنیم.
در جلسه psql یا AlloyDB Studio به پایگاه داده پرس و جو را اجرا کنید
WITH trees AS (
SELECT
cp.product_name,
cp.product_description AS description,
cp.sale_price,
cs.zip_code,
cp.uniq_id AS product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci ON
ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
cs.store_id = ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(cp.embedding <=> embedding('text-embedding-004',
'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
trees),
response AS (
SELECT
json_array_elements(google_ml.predict_row( model_id =>'gemini-1.5-flash-001',
request_body => json_build_object('contents',
json_build_object('role',
'user',
'parts',
json_build_object('text',
prompt_text)))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
prompt)
SELECT
string_agg(resp::text,
' ')
FROM
response;
و در اینجا خروجی مورد انتظار است. ممکن است خروجی شما بسته به نسخه مدل و پارامترها متفاوت باشد.:
-------------------------------------------------------------------------------------------------------- "I" " see you're interested in fruit trees! Based on your location, I found" " one great option:\n\n**Cherry Tree:** \n\nThis beautiful cherry tree will" " produce delicious cherries. It's a deciduous tree, meaning it loses its leaves in the fall, and can grow up to 15 feet tall. The" " leaves are a vibrant dark green in the summer, turning a beautiful red in the fall. \n\nCherry trees are known for their beauty and ability to provide shade" " and privacy. They prefer a cool, moist climate and sandy soil, making them a good fit for your area. \n\nThe Cherry Tree is currently on sale for $75.00.\n\nWould you like to know more about" " the Cherry Tree, or are you interested in exploring other fruit tree options? \n" "" (1 row)
10. محیط را تمیز کنید
پس از اتمام کار با آزمایشگاه، نمونه ها و خوشه های 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
11. تبریک می گویم
برای تکمیل کد لبه تبریک می گویم.
آنچه را پوشش داده ایم
- نحوه استقرار خوشه AlloyDB و نمونه اولیه
- نحوه اتصال به AlloyDB از Google Compute Engine VM
- نحوه ایجاد پایگاه داده و فعال کردن AlloyDB AI
- نحوه بارگذاری اطلاعات در پایگاه داده
- نحوه استفاده از مدل جاسازی هوش مصنوعی Vertex در AlloyDB
- نحوه غنی سازی نتیجه با استفاده از مدل مولد Vertex AI
12. نظرسنجی
خروجی: