תחילת העבודה עם הטמעת וקטורים באמצעות AI של AlloyDB

1. מבוא

ב-codelab הזה תלמדו איך להשתמש ב-AlloyDB AI על ידי שילוב של חיפוש וקטורים עם הטמעות של Vertex AI. שיעור ה-Lab הזה הוא חלק מאוסף שיעורי Lab שמוקדשים לתכונות ה-AI של AlloyDB. מידע נוסף אפשר לקרוא בדף בנושא AlloyDB AI במאמרי העזרה.

81802d1e350b59bb.png

דרישות מוקדמות

  • הבנה בסיסית של Google Cloud ושל המסוף
  • מיומנויות בסיסיות בממשק שורת הפקודה וב-Cloud Shell

מה תלמדו

  • איך פורסים אשכול AlloyDB ומכונה ראשית
  • איך מתחברים ל-AlloyDB ממכונה וירטואלית ב-Google Compute Engine
  • איך יוצרים מסד נתונים ומפעילים את AlloyDB AI
  • איך טוענים נתונים למסד הנתונים
  • איך משתמשים ב-AlloyDB Studio
  • איך משתמשים במודל ההטמעה של Gemini Enterprise Agent Platform ב-AlloyDB
  • איך משתמשים ב-Gemini Enterprise Agent Platform Studio
  • איך משפרים את התוצאה באמצעות מודל גנרטיבי של Gemini Enterprise Agent Platform
  • איך לשפר את הביצועים באמצעות אינדקס וקטורי

מה תצטרכו

  • חשבון Google Cloud ופרויקט Google Cloud
  • דפדפן אינטרנט כמו Chrome

2. הגדרה ודרישות

הגדרת פרויקט

  1. נכנסים ל-מסוף Google Cloud. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

משתמשים בחשבון לשימוש אישי במקום בחשבון לצורכי עבודה או בחשבון בית ספרי.

  1. יוצרים פרויקט חדש או משתמשים בפרויקט קיים. כדי ליצור פרויקט חדש במסוף Google Cloud, לוחצים בכותרת על הלחצן 'בחירת פרויקט' שפותח חלון קופץ.

295004821bab6a87.png

בחלון Select a project (בחירת פרויקט), לוחצים על הלחצן New Project (פרויקט חדש) כדי לפתוח תיבת דו-שיח לפרויקט החדש.

37d264871000675d.png

בתיבת הדו-שיח, מזינים את שם הפרויקט המועדף ובוחרים את המיקום.

96d86d3d5655cdbe.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. השם של הפרויקט לא משמש את Google APIs, ואפשר לשנות אותו בכל שלב.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Google Cloud יוצר באופן אוטומטי מזהה ייחודי, אבל אפשר להתאים אותו אישית. אם לא אהבתם את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר או לספק מזהה משלכם כדי לבדוק אם הוא זמין. ברוב ה-codelabs, תצטרכו להתייחס למזהה הפרויקט שלכם, שבדרך כלל מזוהה באמצעות placeholder בשם PROJECT_ID.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.

הפעלת החיוב

הגדרה של חשבון לחיוב לשימוש אישי

אם הגדרתם חיוב באמצעות קרדיטים ב-Google Cloud, אתם יכולים לדלג על השלב הזה.

כדי להגדיר חשבון לחיוב לשימוש אישי, עוברים לכאן כדי להפעיל את החיוב ב-Cloud Console.

הערות:

  • העלות של השלמת ה-Lab הזה במשאבי Cloud צריכה להיות פחות מ-3 דולר ארה"ב.
  • כדי למנוע חיובים נוספים, אפשר למחוק את המשאבים לפי השלבים שמפורטים בסוף ה-Lab הזה.
  • משתמשים חדשים זכאים לתקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

הפעלת Cloud Shell

אפשר גם ללחוץ על G ואז על S. אם אתם במסוף Google Cloud, או אם אתם משתמשים בקישור הזה, הרצף הזה יפעיל את Cloud Shell.

הקצאת המשאבים והחיבור לסביבה יימשכו רק כמה רגעים. בסיום התהליך, אמור להופיע משהו כזה:

צילום מסך של טרמינל Google Cloud Shell שבו מוצג שהסביבה מחוברת

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.

3. לפני שמתחילים

הפעלת ה-API

פלט:

כדי להשתמש ב-AlloyDB, ב-Compute Engine, ב-Networking services וב-Gemini Enterprise Agent Platform, צריך להפעיל את ממשקי ה-API שלהם בפרויקט בענן שלכם ב-Google Cloud.

הפעלת ממשקי ה-API

בטרמינל של Cloud Shell, מוודאים שמזהה הפרויקט מוגדר:

gcloud config set project [YOUR-PROJECT-ID]

מגדירים את משתנה הסביבה PROJECT_ID:

PROJECT_ID=$(gcloud config get-value project)

מפעילים את כל ממשקי ה-API הנדרשים:

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.

מידע על כל API שמופעל זמין בתיעוד.

4. פריסת AlloyDB

לפני שיוצרים אשכול AlloyDB, צריך להקצות טווח כתובות IP פרטיות זמין ב-VPC, לשימוש על ידי מכונת AlloyDB עתידית. אם אין לכם אותו, תצטרכו ליצור אותו, להקצות אותו לשימוש בשירותי Google פנימיים, ואז תוכלו ליצור את האשכול ואת המופע.

יצירת טווח כתובות 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 16`

הפלט הצפוי בקונסולה:

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

חשוב לשים לב לסיסמה של PostgreSQL כדי להשתמש בה בעתיד:

echo $PGPASSWORD

תצטרכו את הסיסמה הזו בעתיד כדי להתחבר למופע בתור משתמש postgres. שומרים את הסיסמה הזו לשימוש בשלבים הבאים.

הפלט הצפוי בקונסולה:

student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD
bbefbfde7601985b0dee5723 (Note: Yours will be different!)

יצירת אשכול לתקופת ניסיון בחינם

אם עדיין לא השתמשתם ב-AlloyDB, אתם יכולים ליצור אשכול לתקופת ניסיון בחינם:

מגדירים משתני סביבה לאזור ולשם האשכול:

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

מריצים את הפקודה ליצירת האשכול:

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

הפלט הצפוי בקונסולה:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

יוצרים מכונה ראשית של AlloyDB לאשכול באותו סשן של Cloud Shell. אם החיבור ינותק, תצטרכו להגדיר מחדש את משתני הסביבה של האזור ושם האשכול.

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

הפלט הצפוי בקונסולה:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

יצירת אשכול AlloyDB Standard

אם זה לא אשכול ה-AlloyDB הראשון שלכם בפרויקט, ממשיכים ליצירה של אשכול רגיל. אם כבר יצרתם אשכול בתקופת ניסיון בחינם, אתם יכולים לדלג על השלב הזה.

מגדירים משתני סביבה לאזור ולשם האשכול:

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 לאשכול באותו סשן של Cloud Shell. אם החיבור ינותק, תצטרכו להגדיר מחדש את משתני הסביבה של האזור ושם האשכול.

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 נפרס באמצעות חיבור פרטי בלבד, לכן צריך מכונה וירטואלית של Compute Engine עם לקוח PostgreSQL מותקן כדי לעבוד עם מסד הנתונים.

Deploy 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-13 AND family!=debian-13-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform

הפלט הצפוי בקונסולה:

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-13 AND family!=debian-13-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 6.12.101+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.101-1 (2026-08-05) 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:~$ 

מריצים את פקודת התוכנה בתוך ה-VM:

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:2 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]                      
Hit:3 https://deb.debian.org/debian trixie InRelease                                    
Get:4 https://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
Get:5 https://deb.debian.org/debian trixie-backports InRelease [54.0 kB]
Get:6 https://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
Hit:10 https://packages.cloud.google.com/apt google-compute-engine-trixie-stable InRelease
...redacted...
update-alternatives: using /usr/share/postgresql/17/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (17+278) ...
Processing triggers for man-db (2.13.1-1) ...
Processing triggers for libc-bin (2.41-12+deb13u3) ...

התחברות למופע

מתחברים למופע הראשי מהמכונה הווירטואלית באמצעות psql.

באותה כרטיסייה של Cloud Shell עם סשן ה-SSH הפתוח למכונה הווירטואלית instance-1.

משתמשים בערך הסיסמה (PGPASSWORD) של AlloyDB שרשמתם ובמזהה אשכול AlloyDB כדי להתחבר ל-AlloyDB מהמכונה הווירטואלית ב-GCE:

export PGPASSWORD=<Noted password>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

הפלט הצפוי בקונסולה:

student@instance-1:~$ export PGPASSWORD=CQhOi5OygD4ps6ty
student@instance-1:~$ 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"
psql (17.10 (Debian 17.10-0+deb13u1), server 17.9)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)
Type "help" for help.

postgres=>

סוגרים את סשן ה-psql:

exit

6. הכנת מסד הנתונים

יוצרים מסד נתונים, מפעילים שילוב של Agent Platform AI, יוצרים אובייקטים של מסד נתונים ומייבאים נתונים.

מתן ההרשאות הנדרשות ל-AlloyDB

מוסיפים הרשאות ל-Gemini Enterprise Agent Platform לסוכן השירות של AlloyDB.

פותחים כרטיסייה נוספת ב-Cloud Shell באמצעות הסימן '+' בחלק העליון.

abc505ac4d41f24e.png

בכרטיסייה החדשה של 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, מריצים את הפקודה:

יצירת מסד נתונים:

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

מפעילים את האינטגרציה של Vertex AI ואת התוספים pgvector במסד הנתונים.

במכונה הווירטואלית של GCE מריצים את הפקודה:

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 מריצים את הפקודה:

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"
gcloud storage 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"
gcloud storage 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"
gcloud storage 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. צריך לחשב את נתוני הווקטור על סמך תיאורי המוצרים, ואפשר להשתמש בפונקציות כמו google_ml.embedding לשם כך. מידע נוסף על הטכנולוגיה שבה נעשה שימוש מופיע במאמרי העזרה.

קל ליצור הטמעות לכמה שורות, אבל איך אפשר לעשות את זה ביעילות אם יש אלפי שורות? בקטע הזה מוסבר איך ליצור ולנהל הטמעות של טבלאות גדולות. במדריך אפשר לקרוא מידע נוסף על אפשרויות וטכניקות שונות.

הפעלת יצירה מהירה של הטמעה

מתחברים למסד הנתונים באמצעות psql מהמכונה הווירטואלית באמצעות כתובת ה-IP של מופע AlloyDB והסיסמה של postgres:

psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"

בודקים את הגרסה של התוסף google_ml_integration.

SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';

הגרסה צריכה להיות 1.5.2 ומעלה. דוגמה לפלט:

quickstart_db=> SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
 extversion 
------------
 1.6
(1 row)

גרסת ברירת המחדל צריכה להיות 1.6 ומעלה, אבל אם במופע שלכם מוצגת גרסה ישנה יותר, כנראה שצריך לעדכן אותה. בודקים אם התחזוקה הושבתה עבור המופע.

מוודאים שדגל לניהול מסד נתונים google_ml_integration.enable_faster_embedding_generation מוגדר כ'מופעל'. באותו סשן psql, בודקים את הערך של הדגל:

show google_ml_integration.enable_faster_embedding_generation;

אם הדגל נמצא במיקום הנכון, הפלט הצפוי ייראה כך:

quickstart_db=> show google_ml_integration.enable_faster_embedding_generation;                          
 google_ml_integration.enable_faster_embedding_generation 
----------------------------------------------------------
 on
(1 row)

אם ערך הדגל הוא off, צריך לעדכן את המופע. אפשר לעשות זאת באמצעות מסוף האינטרנט או פקודת gcloud, כמו שמתואר במאמרי העזרה.

יציאה מסשן psql:

exit;

כדי לעדכן את הדגל באמצעות gcloud, מריצים את הפקודה:

export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud beta alloydb instances update $ADBCLUSTER-pr \
   --database-flags google_ml_integration.enable_faster_embedding_generation=on \
   --region=$REGION \
   --cluster=$ADBCLUSTER \
   --project=$PROJECT_ID \
   --update-mode=FORCE_APPLY

יכול להיות שיעברו כמה דקות, אבל בסופו של דבר הערך של הדגל ישתנה ל'מופעל'. אחרי זה אפשר להמשיך לשלבים הבאים.

יצירת עמודת הטמעה

מתחברים למסד הנתונים באמצעות psql ויוצרים עמודה וירטואלית עם סוג הנתונים vector לשימוש בפונקציית ההטמעה בטבלה cymbal_products.

psql "host=$INSTANCE_IP user=postgres dbname=quickstart_db"

בסשן psql, אחרי שמתחברים למסד הנתונים, מריצים את הפקודה:

ALTER TABLE cymbal_products ADD COLUMN embedding vector(768);

הפקודה יוצרת עמודה וירטואלית להטמעות עתידיות.

הפלט הצפוי בקונסולה:

quickstart_db=> ALTER TABLE cymbal_products ADD COLUMN embedding vector(768);
ALTER TABLE
quickstart_db=> 

יצירת הטמעות בקבוצות של 50 שורות. באותו סשן psql, מריצים את הפקודה:

הפעלת תזמון כדי למדוד כמה זמן ייקח:

\timing

מריצים את הפקודה:

CALL ai.initialize_embeddings(
    model_id => 'text-embedding-005',
    table_name => 'cymbal_products',
    content_column => 'product_description',
    embedding_column => 'embedding',
    batch_size => 50
);

והפלט של המסוף הראה פחות מ-2 שניות ליצירת ההטמעה:

quickstart_db=> CALL ai.initialize_embeddings(
    model_id => 'text-embedding-005',
    table_name => 'cymbal_products',
    content_column => 'product_description',
    embedding_column => 'embedding',
    batch_size => 50
);
NOTICE:  Initialize embedding completed successfully for table cymbal_products
CALL
Time: 1458.704 ms (00:01.459)
quickstart_db=>

אתם יכולים להתנסות עם גדלים שונים של קבוצות ולראות אם זה משנה את זמן ההפעלה.

כברירת מחדל, ההטמעות לא מתעדכנות אם העמודה המתאימה product_description מתעדכנת או אם מוסיפים שורה חדשה לגמרי. אבל אפשר לעשות את זה באמצעות הפרמטר incremental_refresh_mode.

יוצרים עמודה בשם product_embeddings (הטמעות של מוצרים) וקובעים שהיא תתעדכן באופן אוטומטי:

ALTER TABLE cymbal_products ADD COLUMN product_embedding vector(768);
CALL ai.initialize_embeddings(
    model_id => 'text-embedding-005',
    table_name => 'cymbal_products',
    content_column => 'product_description',
    embedding_column => 'product_embedding',
    batch_size => 50,
    incremental_refresh_mode => 'transactional'
);

מוסיפים שורה חדשה לטבלה.

INSERT INTO "cymbal_products" ("uniq_id", "crawl_timestamp", "product_url", "product_name", "product_description", "list_price", "sale_price", "brand", "item_number", "gtin", "package_size", "category", "postal_code", "available", "product_embedding", "embedding") VALUES ('fd604542e04b470f9e6348e640cff794', NOW(), 'https://example.com/new_product', 'New Cymbal Product', 'This is a new cymbal product description.', 199.99, 149.99, 'Example Brand', 'EB123', '1234567890', 'Single', 'Cymbals', '12345', TRUE, NULL, NULL);

מריצים שאילתה על הטבלה כדי להשוות בין שתי עמודות של הטמעה:

SELECT uniq_id,embedding, (product_embedding::real[])[1:5] as product_embedding  FROM cymbal_products WHERE uniq_id='fd604542e04b470f9e6348e640cff794';

הפלט מראה שהמאפיין product_embedding מאוכלס אוטומטית, בעוד שהמאפיין embedding נשאר ריק:

quickstart_db=> SELECT uniq_id,embedding, (product_embedding::real[])[1:5] as product_embedding  FROM cymbal_products WHERE uniq_id='fd604542e04b470f9e6348e640cff794';
             uniq_id              | embedding |                       product_embedding                       
----------------------------------+-----------+---------------------------------------------------------------
 fd604542e04b470f9e6348e640cff794 |           | {0.015003494,-0.005349732,-0.059790313,-0.0087091,-0.0271452}
(1 row)

Time: 3.295 ms

8. הרצת חיפוש דמיון

מריצים חיפוש דמיון על סמך הטמעות הווקטורים שנוצרו באמצעות AlloyDB AI.

אפשר להריץ את שאילתת ה-SQL מאותו ממשק שורת פקודה של psql, או לחלופין מ-AlloyDB Studio. כל פלט מורכב עם כמה שורות יפעל טוב יותר ב-AlloyDB Studio.

התחברות ל-AlloyDB Studio

כדי לפתוח את AlloyDB Studio, מבצעים את השלבים הבאים:

  1. במסוף Google Cloud, עוברים אל הדף Clusters של AlloyDB ל-PostgreSQL.
  2. בוחרים את המופע הראשי כדי לפתוח את ממשק האינטרנט שלו.

1d7298e7096e7313.png3. אחר כך לוחצים על AlloyDB Studio בצד ימין:

a33131c72ad29478.png

  1. בוחרים במסד הנתונים quickstart_db, במשתמש postgres, מזינים את הסיסמה שרשמתם ולוחצים על Authenticate (אימות).

4f26532ecdb5bade.png

פעולה זו תפתח את הממשק של AlloyDB Studio.

  1. בוחרים בכרטיסייה Untitled Query (שאילתה ללא שם) כדי לפתוח את עורך ה-SQL.

6696bc771fab9983.png

ייפתח עורך שבו אפשר להריץ פקודות SQL, כמו שמוצג בתמונה הבאה:

ae34288e5bf237c7.png

אם אתם מעדיפים להשתמש בשורת הפקודה psql, אתם יכולים להתחבר למסד הנתונים מתוך סשן ה-SSH של המכונה הווירטואלית, כמו שמתואר בפרקים הקודמים.

להריץ שאילתה כדי לקבל רשימה של מוצרים זמינים שקשורים באופן הכי הדוק לבקשה של לקוח. ביטוי החיפוש שמועבר למודל ההטמעה ב-Gemini Enterprise Agent Platform (אותו מודל שבו השתמשנו כדי ליצור הטמעות למוצרים שלנו) כדי לקבל את ערך הווקטור של השאלה 'אילו עצי פרי מתאימים לגידול באזור הזה?'

מריצים את השאילתה:

SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (cp.embedding <=> embedding('text-embedding-005','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-005','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.43922018972266397
 Meyer Lemon Tree        | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by  |         34 |    93230 |  0.4685112926118228
 Toyon                   | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e |      10.00 |    93230 |  0.4835677149651668
 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.4947204525907498
 California Peppertree   | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e |      25.00 |    93230 |  0.5054166905547247
 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d |     100.00 |    93230 |  0.5084219510932597
 California Sycamore     | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is  |     300.00 |    93230 |  0.5140519790508755
 Coast Live Oak          | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev |     500.00 |    93230 |  0.5143126438081371
 Fremont Cottonwood      | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i |     200.00 |    93230 |  0.5174774727252058
 Madrone                 | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an |      50.00 |    93230 |  0.5227400803389093

מוצגים 10 מוצרים עם תיאורים שקרובים מבחינה סמנטית לביטוי החיפוש, מסודרים לפי המרחק, כשהמוצר הכי דומה מוצג בראש הרשימה.

9. שיפור התשובה

אפשר לשפר את התשובה לאפליקציית לקוח באמצעות תוצאת השאילתה, ולהכין פלט משמעותי באמצעות תוצאות השאילתה שסופקו כחלק מההנחיה למודל שפה גנרטיבי בסיסי.

כדי להשיג זאת, יוצרים קובץ JSON עם התוצאות המובילות מחיפוש וקטורי, ואז משתמשים בקובץ ה-JSON שנוצר כתוספת לפרומפט למודל AI גנרטיבי ב-Agent Platform כדי ליצור פלט משמעותי. בשלב הראשון נוצר קובץ ה-JSON, אחר כך הוא נבדק ב-Agent Platform Studio ובשלב האחרון כל הנתונים משולבים בהצהרת SQL אחת שאפשר להשתמש בה באפליקציה.

יצירת פלט בפורמט JSON

משנים את השאילתה כדי ליצור את הפלט בפורמט JSON ולהחזיר רק שורה אחת להעברה אל Agent Platform

מריצים את השאילתה:

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-005','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

פותחים את Gemini Enterprise Agent Platform Studio במסוף Google Cloud.

154dc1a290c37f.jpeg

כותבים את ההנחיה בממשק:

fd3abd6062009ee6.jpeg

מזינים את ההנחיה הבאה:

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","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"}

Here is the list of products:

{"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"}

The customer asked "What tree is growing the best here?"

You should give information about the product, price and some supplemental information

edeea32a69d81aee.jpeg

זו התוצאה כשמריצים את ההנחיה :

831038ea1d819be6.jpeg

התשובה כוללת מחיר, תיאור ומידע משלים שהמודל מקבל ממקורות חיצוניים על סמך מידע על העץ והמיקום.

הרצת הפרומפט ב-PSQL

אפשר להשיג תוצאה דומה על ידי הפעלת השילוב של AlloyDB AI עם Gemini Enterprise Agent Platform כדי לקבל את אותה תשובה ממודל גנרטיבי באמצעות SQL ישירות במסד הנתונים. כדי להשתמש במודל gemini-3.6-flash, צריך לרשום אותו.

רישום של מודל Gemini-3.6-Flash:

בהרצה של AlloyDB Studio:

CALL google_ml.create_model(
model_id => 'gemini-3.6-flash',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.6-flash:generateContent',
model_provider => 'google',
model_type => 'llm'
);

תמיד אפשר לבדוק את רשימת המודלים הרשומים על ידי בחירת מידע מתוך google_ml.model_info_view.

SELECT model_id,model_type FROM google_ml.model_info_view WHERE model_id ILIKE '%flash%';

פלט לדוגמה

quickstart_db=> SELECT model_id,model_type FROM google_ml.model_info_view WHERE model_id ILIKE '%flash%';
       model_id        | model_type 
-----------------------+------------
 gemini-3.6-flash      | llm
 gemini-2.0-flash      | llm
 gemini-2.5-flash      | llm
 gemini-2.0-flash-lite | llm
 gemini-2.5-flash-lite | llm
(5 rows)

עכשיו אפשר להשתמש ב-JSON שנוצר בשאילתת משנה כחלק מההנחיה למודל gemini-3.6-flash באמצעות 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-005',
        '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
        google_ml.predict_row( model_id =>'gemini-3.6-flash',
        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
REPLACE(resp::text, '\n', CHR(10))
FROM
        response;

והנה הפלט הצפוי. הפלט עשוי להיות שונה בגלל האופי הלא דטרמיניסטי של מודלים של AI גנרטיבי:

"Hello there! I'd be delighted to help you pick out a wonderful fruit tree for your space. Based on our local selection, a fantastic option that grows very well is the **Cherry Tree**! Here are the details on this beautiful tree: * **Product:** Cherry Tree * **Price:** $75.00 ### Why it's a great choice: * **Delicious Harvest:** It produces tasty, fresh cherries right in your backyard. * **Size & Benefits:** It's a deciduous tree that grows to about 15 feet tall, making it ideal for providing both lovely shade and a bit of privacy. * **Year-Round Beauty:** It features lush, dark green leaves throughout the summer that transform into a stunning red in the autumn. * **Growing Requirements:** Cherry trees thrive best in cool, moist climates with sandy soil, and are perfectly suited for USDA hardiness zones 4 through 9. Please let me know if you have any questions about planting or if you'd like help adding this to your order!"

10. יצירת אינדקס וקטורי

מכיוון שקבוצת הנתונים הזו קטנה, זמני התגובה תלויים בעיקר באינטראקציות עם מודלים ב-Gemini Enterprise Agent Platform. עם זאת, כשמבצעים שאילתה על מיליוני וקטורים, חיפוש הווקטורים עצמו יכול לצרוך חלק משמעותי מזמן התגובה ולהגדיל את העומס על מסד הנתונים. כדי לשפר את ביצועי החיפוש, אפשר ליצור אינדקס וקטורי.

יצירת אינדקס ScaNN

כדי ליצור אינדקס ScaNN, צריך להפעיל תוסף נוסף. התוסף alloydb_scann מספק ממשק לעבודה עם אינדקסים של וקטורים של שכנים קרובים משוערים (ANN) באמצעות אלגוריתם Google ScaNN.

הרצה ב-AlloyDB Studio:

CREATE EXTENSION IF NOT EXISTS alloydb_scann;

אפשר ליצור את האינדקס במצב ידני או במצב אוטומטי. המצב 'ידני' מופעל כברירת מחדל, ואפשר ליצור אינדקס ולתחזק אותו כמו כל אינדקס אחר. אבל אם מפעילים את מצב AUTO, אפשר ליצור את האינדקס בלי שיהיה צורך לבצע תחזוקה מצדכם. בתיעוד אפשר לקרוא בפירוט על כל האפשרויות. אין לנו מספיק שורות כדי ליצור את האינדקס במצב אוטומטי, ולכן תיצור אותו במצב ידני.

הרצה ב-AlloyDB Studio:

CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products
  USING scann (embedding cosine)
  WITH (num_leaves=10, max_num_levels = 1);

מידע על שינוי פרמטרים של אינדקס זמין במאמרי העזרה.

הפלט אמור להיראות כך:

quickstart_db=> CREATE INDEX cymbal_products_embeddings_scann ON cymbal_products
  USING scann (embedding cosine)
  WITH (num_leaves=10, max_num_levels = 1);
CREATE INDEX
quickstart_db=>

השוואת תשובות

חוזרים על השאילתה שבה השתמשנו כדי לקבל את הערך העליון בחיפוש הסמנטי:

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-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

הפלט אמור להיראות כך:

[{"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"}]

אותו ערך של 'עץ דובדבן' בפלט.

אימות השימוש באינדקס:

EXPLAIN (analyze) 
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-005','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

הפלט הצפוי (הושמטו פרטים לשם הבהרה):

...
 Aggregate  (cost=27.24..27.25 rows=1 width=32) (actual time=0.964..0.965 rows=1 loops=1)
   ->  Subquery Scan on trees  (cost=18.91..27.23 rows=1 width=142) (actual time=0.953..0.954 rows=1 loops=1)
         ->  Limit  (cost=18.91..27.22 rows=1 width=158) (actual time=0.948..0.949 rows=1 loops=1)
               ->  Nested Loop  (cost=18.91..7126.86 rows=855 width=158) (actual time=0.948..0.948 rows=1 loops=1)
                     ->  Nested Loop  (cost=18.63..7103.59 rows=855 width=907) (actual time=0.931..0.931 rows=1 loops=1)
                           ->  Index Scan using cymbal_products_embeddings_scann on cymbal_products cp  (cost=18.21..343.15 rows=942 width=903) (actual time=0.906..0.908 rows=2 loops=1)
                                 Order By: (embedding <=> '[-0.106554024,0.035774965,-0.027267234,-0.045653425,-0.03286045,0.02124319...

מהפלט אפשר לראות שהשאילתה השתמשה ב-Index Scan באמצעות cymbal_products_embeddings_scann ב-cymbal_products.

השאילתה מחזירה את אותו עץ דובדבן שהופיע בראש תוצאות החיפוש לפני בניית האינדקס. מכיוון שבאינדקסים של חיפוש שכנים קרובים משוערים (ANN) יש פשרה בין דיוק מוחלט לבין מהירות החיפוש, יכול להיות שבשאילתות שמבוססות על אינדקסים יוחזרו מדי פעם תוצאות שונות מעט מהתוצאות של חיפוש מדויק ללא אינדקס. עם זאת, אינדקס הווקטורים מספק שיפור משמעותי בביצועים תוך שמירה על רמת דיוק גבוהה.

כדי להמשיך לחקור, אפשר לנסות סוגים אחרים של אינדקסים וקטוריים, או למצוא עוד מעבדות ודוגמאות עם שילוב של LangChain בדף התיעוד.

11. ניקוי הסביבה

בסיום שיעור ה-Lab, משמידים את המופעים ואת האשכול של AlloyDB.

מחיקת אשכול AlloyDB וכל המכונות

האפשרות force משמידה את האשכול וגם מוחקת את כל המכונות ששייכות לאשכול.

אם החיבור לטרמינל נותק, מתחברים מחדש ומגדירים את הפרויקט ואת משתני הסביבה ב-Cloud Shell:

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

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

12. מזל טוב

כל הכבוד, סיימתם את ה-Codelab.

שיעור ה-Lab הזה הוא חלק מתוכנית הלימודים Production-Ready AI with Google Cloud (שימוש ב-AI מוכן לייצור עם Google Cloud).

מה נכלל

  • איך פורסים אשכול AlloyDB ומכונה ראשית
  • איך מתחברים ל-AlloyDB ממכונה וירטואלית ב-Google Compute Engine
  • איך יוצרים מסד נתונים ומפעילים את AlloyDB AI
  • איך טוענים נתונים למסד הנתונים
  • איך משתמשים ב-AlloyDB Studio
  • איך משתמשים במודל ההטמעה של Gemini Enterprise Agent Platform ב-AlloyDB
  • איך משתמשים ב-Gemini Enterprise Agent Platform Studio
  • איך משפרים את התוצאה באמצעות מודל גנרטיבי של Gemini Enterprise Agent Platform
  • איך לשפר את הביצועים באמצעות אינדקס וקטורי

13. סקר

פלט:

איך תשתמשו במדריך הזה?

רק קוראים את הטקסט קוראים את הטקסט ומבצעים את התרגילים