Bắt đầu sử dụng tính năng Nhúng vectơ bằng AI AlloyDB

1. Giới thiệu

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng AlloyDB AI bằng cách kết hợp tính năng tìm kiếm vectơ với các giá trị nhúng Vertex AI. Bài thực hành này thuộc một bộ sưu tập bài thực hành dành riêng cho các tính năng AI của AlloyDB. Bạn có thể đọc thêm trên trang AI của AlloyDB trong tài liệu.

81802d1e350b59bb.png

Điều kiện tiên quyết

  • Có kiến thức cơ bản về Google Cloud Console
  • Kỹ năng cơ bản về giao diện dòng lệnh và Cloud Shell

Kiến thức bạn sẽ học được

  • Cách triển khai cụm AlloyDB và phiên bản chính
  • Cách kết nối với AlloyDB từ máy ảo Google Compute Engine
  • Cách tạo cơ sở dữ liệu và bật AI AlloyDB
  • Cách tải dữ liệu vào cơ sở dữ liệu
  • Cách sử dụng AlloyDB Studio
  • Cách sử dụng mô hình nhúng Nền tảng Tác nhân Gemini Enterprise trong AlloyDB
  • Cách sử dụng Gemini Enterprise Agent Platform Studio
  • Cách làm phong phú kết quả bằng mô hình tạo sinh của Nền tảng Tác nhân Gemini Enterprise
  • Cách cải thiện hiệu suất bằng chỉ mục vectơ

Bạn cần có

  • Tài khoản Google Cloud và dự án trên Google Cloud
  • Một trình duyệt web như Chrome

2. Thiết lập và yêu cầu

Thiết lập dự án

  1. Đăng nhập vào Google Cloud Console. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

Sử dụng tài khoản cá nhân thay vì tài khoản do nơi làm việc hoặc trường học cấp.

  1. Tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Để tạo một dự án mới trong Cloud Console của Google, trong tiêu đề, hãy nhấp vào nút Chọn dự án. Thao tác này sẽ mở một cửa sổ bật lên.

295004821bab6a87.png

Trong cửa sổ Chọn một dự án, hãy nhấn vào nút Dự án mới. Thao tác này sẽ mở một hộp thoại cho dự án mới.

37d264871000675d.png

Trong hộp thoại, hãy nhập tên dự án mà bạn muốn và chọn vị trí.

96d86d3d5655cdbe.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Tên dự án không được các API của Google sử dụng và bạn có thể thay đổi tên này bất cứ lúc nào.
  • Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Google Cloud Console tự động tạo một mã nhận dạng riêng biệt, nhưng bạn có thể tuỳ chỉnh mã này. Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác hoặc cung cấp mã nhận dạng của riêng bạn để kiểm tra xem mã đó có còn trống hay không. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến mã dự án của mình. Mã này thường được xác định bằng phần giữ chỗ PROJECT_ID.
  • Để bạn biết, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.

Bật tính năng thanh toán

Thiết lập tài khoản thanh toán cá nhân

Nếu thiết lập thông tin thanh toán bằng tín dụng Google Cloud, bạn có thể bỏ qua bước này.

Để thiết lập tài khoản thanh toán cá nhân, hãy truy cập vào đây để bật tính năng thanh toán trong Cloud Console.

Một số lưu ý:

  • Việc hoàn thành bài tập thực hành này sẽ tốn ít hơn 3 USD cho các tài nguyên trên Cloud.
  • Bạn có thể làm theo các bước ở cuối bài thực hành này để xoá tài nguyên nhằm tránh bị tính thêm phí.
  • Người dùng mới đủ điều kiện dùng thử miễn phí trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

Kích hoạt Cloud Shell

Hoặc bạn có thể nhấn phím G rồi nhấn phím S. Trình tự này sẽ kích hoạt Cloud Shell nếu bạn đang ở trong Google Cloud Console hoặc sử dụng đường liên kết này.

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

Ảnh chụp màn hình cửa sổ dòng lệnh Google Cloud Shell cho thấy môi trường đã kết nối

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.

3. Trước khi bắt đầu

Bật API

Kết quả:

Để sử dụng AlloyDB, Compute Engine, Dịch vụ mạngNền tảng Gemini Enterprise Agent, bạn cần bật các API tương ứng trong dự án trên đám mây của mình.

Bật API

Trong Cloud Shell trên thiết bị đầu cuối, hãy đảm bảo rằng bạn đã thiết lập mã dự án:

gcloud config set project [YOUR-PROJECT-ID]

Đặt biến môi trường PROJECT_ID:

PROJECT_ID=$(gcloud config get-value project)

Bật tất cả các API cần thiết:

gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       aiplatform.googleapis.com

Kết quả đầu ra dự kiến

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.

Bạn có thể đọc về từng API đã bật trong tài liệu.

4. Triển khai AlloyDB

Trước khi tạo một cụm AlloyDB, hãy phân bổ một dải IP riêng tư có sẵn trong VPC để dùng cho phiên bản AlloyDB trong tương lai. Nếu chưa có, bạn cần tạo và chỉ định để các dịch vụ nội bộ của Google sử dụng. Sau đó, bạn sẽ có thể tạo cụm và phiên bản.

Tạo dải IP riêng tư

Bạn cần định cấu hình cấu hình Quyền truy cập vào dịch vụ riêng tư trong VPC của chúng tôi cho AlloyDB. Giả định ở đây là bạn có mạng VPC "mặc định" trong dự án và mạng này sẽ được dùng cho mọi hành động.

Tạo dải IP riêng tư:

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

Tạo kết nối riêng tư bằng dải IP được phân bổ:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Tạo Cụm AlloyDB

Tạo một cụm AlloyDB ở khu vực us-central1

Xác định mật khẩu cho người dùng postgres. Bạn có thể tự xác định mật khẩu hoặc sử dụng một hàm ngẫu nhiên để tạo mật khẩu

export PGPASSWORD=`openssl rand -hex 16`

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Ghi lại mật khẩu PostgreSQL để sử dụng sau này:

echo $PGPASSWORD

Sau này, bạn sẽ cần mật khẩu đó để kết nối với phiên bản dưới dạng người dùng postgres. Lưu mật khẩu này để sử dụng trong các bước tiếp theo.

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Tạo Cụm dùng thử miễn phí

Nếu chưa từng sử dụng AlloyDB, bạn có thể tạo một cụm dùng thử miễn phí:

Đặt các biến môi trường cho khu vực và tên cụm:

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

Chạy lệnh để tạo cụm:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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.                                                                                                                                                                                                                                                           

Tạo một phiên bản chính AlloyDB cho cụm của bạn trong cùng một phiên Cloud Shell. Nếu bị ngắt kết nối, bạn sẽ cần xác định lại các biến môi trường của tên vùng và tên cụm.

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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.                                                                                                                                                                                                                                                     

Tạo Cụm AlloyDB Standard

Nếu đây không phải là cụm AlloyDB đầu tiên của bạn trong dự án, hãy tiếp tục tạo một cụm tiêu chuẩn. Nếu bạn đã tạo một cụm dùng thử miễn phí, hãy bỏ qua bước này.

Đặt các biến môi trường cho khu vực và tên cụm:

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

Chạy lệnh để tạo cụm:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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.                                                                                                                                                                                                                                                           

Tạo một phiên bản chính AlloyDB cho cụm của bạn trong cùng một phiên Cloud Shell. Nếu bị ngắt kết nối, bạn sẽ cần xác định lại các biến môi trường của tên vùng và tên cụm.

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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. Kết nối với AlloyDB

AlloyDB được triển khai bằng kết nối chỉ dành riêng tư, vì vậy, bạn cần có một máy ảo Compute Engine đã cài đặt ứng dụng PostgreSQL để làm việc với cơ sở dữ liệu.

Triển khai máy ảo GCE

Tạo một VM GCE trong cùng khu vực và VPC với cụm AlloyDB.

Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Cài đặt Postgres Client (Ứng dụng Postgres)

Cài đặt phần mềm máy khách PostgreSQL trên máy ảo đã triển khai

Kết nối với máy ảo:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Cài đặt lệnh chạy phần mềm bên trong máy ảo:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Kết nối với phiên bản

Kết nối với phiên bản chính từ máy ảo bằng psql.

Trong cùng một thẻ Cloud Shell có phiên SSH đã mở đến VM instance-1.

Sử dụng giá trị mật khẩu AlloyDB (PGPASSWORD) đã ghi chú và mã nhận dạng cụm AlloyDB để kết nối với AlloyDB từ máy ảo 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"

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Đóng phiên psql:

exit

6. Chuẩn bị cơ sở dữ liệu

Tạo cơ sở dữ liệu, bật tính năng tích hợp AI của Nền tảng tác nhân, tạo các đối tượng cơ sở dữ liệu và nhập dữ liệu.

Cấp các quyền cần thiết cho AlloyDB

Thêm quyền Nền tảng Tác nhân Gemini Enterprise vào tác nhân dịch vụ AlloyDB.

Mở một thẻ Cloud Shell khác bằng cách sử dụng dấu "+" ở trên cùng.

abc505ac4d41f24e.png

Trong thẻ cloud shell mới, hãy thực thi:

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"

Kết quả đầu ra dự kiến trên bảng điều khiển:

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
 

Đóng thẻ bằng lệnh thực thi "exit" trong thẻ:

exit

Tạo cơ sở dữ liệu

Tạo cơ sở dữ liệu bắt đầu nhanh.

Trong phiên máy ảo GCE, hãy thực thi:

Tạo cơ sở dữ liệu:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Bật tính năng tích hợp Vertex AI

Bật tính năng tích hợp Vertex AI và các tiện ích pgvector trong cơ sở dữ liệu.

Trong máy ảo GCE, hãy thực thi:

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"

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Nhập dữ liệu

Tải dữ liệu đã chuẩn bị xuống và nhập vào cơ sở dữ liệu mới.

Trong máy ảo GCE, hãy thực thi:

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"

Kết quả đầu ra dự kiến trên bảng điều khiển:

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. Tính toán các vectơ nhúng

Sau khi nhập dữ liệu, bạn sẽ có dữ liệu sản phẩm trong bảng cymbal_products, kho hàng cho biết số lượng sản phẩm có sẵn ở mỗi cửa hàng trong bảng cymbal_inventory và danh sách các cửa hàng trong bảng cymbal_stores. Bạn cần tính toán dữ liệu vectơ dựa trên nội dung mô tả của sản phẩm và có thể sử dụng các hàm như google_ml.embedding cho việc đó. Đọc thêm về công nghệ được dùng trong tài liệu này.

Bạn có thể dễ dàng tạo các mục nhúng cho một vài hàng, nhưng làm thế nào để tạo các mục nhúng một cách hiệu quả nếu có hàng nghìn hàng? Phần này giải thích cách tạo và quản lý các mục nhúng cho các bảng lớn. Đọc thêm về các lựa chọn và kỹ thuật khác nhau trong hướng dẫn.

Bật tính năng Tạo thông tin nhúng nhanh

Kết nối với cơ sở dữ liệu bằng psql từ VM của bạn bằng cách sử dụng IP của thực thể AlloyDB và mật khẩu postgres:

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

Xác minh phiên bản của tiện ích google_ml_integration.

SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';

Phiên bản phải từ 1.5.2 trở lên. Sau đây là ví dụ về kết quả:

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

Phiên bản mặc định phải là 1.6 trở lên, nhưng nếu phiên bản trên phiên bản của bạn là phiên bản cũ hơn, thì có thể bạn cần cập nhật. Kiểm tra xem hoạt động bảo trì có bị vô hiệu hoá cho phiên bản này hay không.

Xác minh rằng cờ cơ sở dữ liệu google_ml_integration.enable_faster_embedding_generation được đặt thành bật. Trong cùng một phiên psql, hãy kiểm tra giá trị của cờ:

show google_ml_integration.enable_faster_embedding_generation;

Nếu cờ ở đúng vị trí, thì đầu ra dự kiến sẽ có dạng như sau:

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

Nếu giá trị cờ hiển thị "off", thì bạn cần cập nhật phiên bản. Hãy thực hiện việc này bằng cách sử dụng bảng điều khiển web hoặc lệnh gcloud như mô tả trong tài liệu.

Thoát khỏi phiên psql:

exit;

Để cập nhật cờ bằng gcloud, hãy chạy lệnh:

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

Quá trình này có thể mất vài phút nhưng cuối cùng giá trị cờ sẽ chuyển thành "on". Sau đó, bạn có thể chuyển sang các bước tiếp theo.

Tạo cột nhúng

Kết nối với cơ sở dữ liệu bằng psql và tạo một cột ảo có kiểu dữ liệu vectơ để hàm nhúng sử dụng trong bảng cymbal_products.

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

Trong phiên psql sau khi kết nối với cơ sở dữ liệu, hãy thực thi:

ALTER TABLE cymbal_products ADD COLUMN embedding vector(768);

Lệnh này sẽ tạo một cột ảo cho các mục nhúng trong tương lai.

Kết quả đầu ra dự kiến trên bảng điều khiển:

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

Tạo vectơ nhúng theo lô gồm 50 hàng. Trong cùng một phiên psql, hãy thực thi:

Bật tính năng đo thời gian để đo thời gian cần thiết:

\timing

Chạy lệnh:

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

Và kết quả đầu ra trên bảng điều khiển cho thấy thời gian tạo phần nhúng là dưới 2 giây:

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

Bạn có thể thử nghiệm với nhiều kích thước lô và xem liệu điều này có làm thay đổi thời gian thực thi hay không.

Theo mặc định, các mục nhúng sẽ không được làm mới nếu cột product_description tương ứng đang được cập nhật hoặc toàn bộ hàng mới được chèn. Tuy nhiên, bạn có thể thực hiện việc này bằng cách đặt tham số incremental_refresh_mode.

Tạo cột "product_embeddings" và đặt chế độ tự động cập nhật:

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'
);

Chèn một hàng mới vào bảng.

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

Truy vấn bảng để so sánh hai cột nhúng:

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

Kết quả đầu ra cho thấy product_embedding được tự động điền sẵn trong khi embedding vẫn trống:

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. Chạy tính năng Tìm kiếm tương tự

Chạy một tìm kiếm tương tự dựa trên các giá trị nhúng vectơ được tạo bằng AlloyDB AI.

Bạn có thể thực thi truy vấn SQL từ cùng một giao diện dòng lệnh psql hoặc từ AlloyDB Studio. Mọi đầu ra phức tạp và có nhiều hàng đều hoạt động hiệu quả hơn trong AlloyDB Studio.

Kết nối với AlloyDB Studio

Để mở AlloyDB Studio, hãy thực hiện các bước sau:

  1. Trong Google Cloud Console, hãy chuyển đến trang Cụm cho AlloyDB cho PostgreSQL.
  2. Chọn phiên bản chính để mở giao diện web của phiên bản đó.

1d7298e7096e7313.png3. Sau đó, hãy nhấp vào AlloyDB Studio ở bên trái:

a33131c72ad29478.png

  1. Chọn cơ sở dữ liệu quickstart_db, người dùng postgres, cung cấp mật khẩu đã ghi chú và nhấp vào Xác thực.

4f26532ecdb5bade.png

Thao tác này sẽ mở giao diện AlloyDB Studio.

  1. Chọn thẻ Untitled Query (Truy vấn chưa có tiêu đề) để mở trình chỉnh sửa SQL.

6696bc771fab9983.png

Thao tác này sẽ mở một trình chỉnh sửa nơi bạn có thể chạy các lệnh SQL, như trong hình sau:

ae34288e5bf237c7.png

Nếu bạn muốn sử dụng psql dòng lệnh, hãy làm theo cách khác và kết nối với cơ sở dữ liệu từ phiên SSH của máy ảo như đã mô tả trong các chương trước.

Chạy một truy vấn để nhận danh sách các sản phẩm hiện có liên quan chặt chẽ nhất đến yêu cầu của khách hàng. Cụm từ tìm kiếm được truyền đến mô hình nhúng trên Nền tảng Tác nhân Gemini Enterprise (giống với cụm từ chúng tôi dùng để tạo các giá trị nhúng cho sản phẩm của mình) để nhận giá trị vectơ cho câu hỏi "What kind of fruit trees grow well here?" (Loại cây ăn quả nào phát triển tốt ở đây?)

Chạy truy vấn:

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;

Sau đây là kết quả đầu ra dự kiến:

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

Bạn sẽ nhận được 10 sản phẩm có nội dung mô tả gần giống về mặt ngữ nghĩa với cụm từ tìm kiếm, được sắp xếp theo khoảng cách với sản phẩm giống nhất ở trên cùng.

9. Cải thiện câu trả lời

Bạn có thể cải thiện phản hồi cho một ứng dụng khách bằng kết quả của truy vấn và chuẩn bị một đầu ra có ý nghĩa bằng cách sử dụng kết quả truy vấn được cung cấp trong lời nhắc cho một mô hình ngôn ngữ tạo sinh cơ bản.

Để đạt được điều đó, bạn tạo một JSON có kết quả hàng đầu từ tìm kiếm vectơ, sau đó sử dụng JSON đã tạo đó làm thông tin bổ sung cho một câu lệnh đối với mô hình AI tạo sinh trong Nền tảng tác nhân để tạo ra một kết quả có ý nghĩa. Bước đầu tiên tạo ra JSON, sau đó JSON này được kiểm thử trong Agent Platform Studio và bước cuối cùng kết hợp tất cả vào một câu lệnh SQL có thể dùng trong một ứng dụng.

Tạo đầu ra ở định dạng JSON

Sửa đổi truy vấn để tạo đầu ra ở định dạng JSON và chỉ trả về một hàng để chuyển đến Nền tảng đại lý

Chạy truy vấn:

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 trong đầu ra:

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

Chạy câu lệnh trong Vertex AI Studio

Sử dụng JSON đã tạo để cung cấp JSON đó như một phần của câu lệnh cho mô hình AI tạo sinh trong Vertex AI Studio

Mở Gemini Enterprise Agent Platform Studio trong Google Cloud Console.

154dc1a290c37f.jpeg

Viết câu lệnh trong giao diện:

fd3abd6062009ee6.jpeg

Nhập câu lệnh sau:

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

Và đây là kết quả khi chúng ta chạy câu lệnh :

831038ea1d819be6.jpeg

Câu trả lời bao gồm giá, nội dung mô tả và thông tin bổ sung mà mô hình lấy từ các nguồn bên ngoài dựa trên thông tin về cây và vị trí.

Chạy câu lệnh trong PSQL

Bạn có thể đạt được kết quả tương tự bằng cách chạy Sử dụng tính năng tích hợp AlloyDB AI với Nền tảng tác nhân Gemini Enterprise để nhận được câu trả lời tương tự từ một mô hình tạo sinh bằng cách sử dụng SQL ngay trong cơ sở dữ liệu. Bạn phải đăng ký mô hình gemini-3.6-flash thì mới có thể sử dụng mô hình này.

Đăng ký mô hình gemini-3.6-flash:

Trong lần chạy 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'
);

Bạn luôn có thể xác minh danh sách các mô hình đã đăng ký bằng cách chọn thông tin từ google_ml.model_info_view.

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

Sau đây là kết quả mẫu

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)

Giờ đây, bạn có thể sử dụng JSON được tạo trong một truy vấn phụ làm một phần của câu lệnh cho mô hình gemini-3.6-flash bằng cách sử dụng SQL.

Trong phiên psql hoặc AlloyDB Studio, hãy chạy truy vấn sau:

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;

Và đây là kết quả dự kiến. Kết quả có thể khác nhau do bản chất không xác định của các mô hình AI tạo sinh:

"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. Tạo chỉ mục vectơ

Vì tập dữ liệu này nhỏ, nên thời gian phản hồi chủ yếu phụ thuộc vào các lượt tương tác với mô hình trên Nền tảng Tác nhân Gemini Enterprise. Tuy nhiên, khi bạn truy vấn hàng triệu vectơ, bản thân tính năng tìm kiếm vectơ có thể tiêu tốn một phần đáng kể thời gian phản hồi và làm tăng tải cho cơ sở dữ liệu của bạn. Để cải thiện hiệu suất tìm kiếm, bạn có thể tạo một chỉ mục vectơ.

Tạo chỉ mục ScaNN

Để tạo chỉ mục ScaNN, bạn phải bật một tiện ích bổ sung. Tiện ích alloydb_scann cung cấp một giao diện để làm việc với các chỉ mục vectơ Lân cận gần đúng (ANN) bằng cách sử dụng thuật toán ScaNN của Google.

Chạy trong AlloyDB Studio:

CREATE EXTENSION IF NOT EXISTS alloydb_scann;

Bạn có thể tạo chỉ mục ở chế độ THỦ CÔNG hoặc TỰ ĐỘNG. Chế độ THỦ CÔNG được bật theo mặc định và bạn có thể tạo chỉ mục cũng như duy trì chỉ mục đó như bất kỳ chỉ mục nào khác. Nhưng nếu bật chế độ TỰ ĐỘNG, bạn có thể tạo chỉ mục mà không cần bảo trì. Bạn có thể đọc chi tiết về tất cả các lựa chọn trong tài liệu. Chúng tôi không có đủ hàng để tạo chỉ mục ở chế độ TỰ ĐỘNG, vì vậy, bạn sẽ tạo chỉ mục ở chế độ THỦ CÔNG.

Chạy trong AlloyDB Studio:

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

Bạn có thể đọc về việc điều chỉnh các tham số chỉ mục trong tài liệu.

Kết quả đầu ra dự kiến:

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

So sánh câu trả lời

Lặp lại truy vấn mà chúng ta đã dùng để lấy giá trị hàng đầu trong tìm kiếm ngữ nghĩa:

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;

Kết quả đầu ra dự kiến:

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

Vẫn là "Cherry Tree" trong đầu ra.

Xác minh mức sử dụng chỉ mục:

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;

Kết quả đầu ra dự kiến (được chỉnh sửa để cho rõ ràng hơn):

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

Từ đầu ra, bạn có thể thấy rằng truy vấn đang sử dụng "Index Scan using cymbal_products_embeddings_scann on cymbal_products".

Truy vấn này trả về chính cây Anh đào đã xuất hiện ở đầu kết quả tìm kiếm trước khi bạn tạo chỉ mục. Vì các chỉ mục lân cận gần đúng (ANN) đánh đổi độ chính xác tuyệt đối để lấy tốc độ tìm kiếm, nên các truy vấn dựa trên chỉ mục đôi khi có thể trả về kết quả hàng đầu hơi khác so với một cụm từ tìm kiếm chính xác không được lập chỉ mục. Tuy nhiên, chỉ mục vectơ giúp tăng hiệu suất đáng kể mà vẫn duy trì độ chính xác cao.

Để khám phá thêm, bạn có thể thử các loại chỉ mục vectơ khác hoặc tìm thêm các phòng thí nghiệm và ví dụ về việc tích hợp LangChain trên trang tài liệu.

11. Dọn dẹp môi trường

Huỷ các thực thể và cụm AlloyDB khi bạn hoàn thành bài thực hành.

Xoá cụm AlloyDB và tất cả các phiên bản

Cụm bị huỷ bằng lựa chọn force. Lựa chọn này cũng sẽ xoá tất cả các phiên bản thuộc cụm.

Nếu thiết bị đầu cuối của bạn bị ngắt kết nối, hãy kết nối lại và xác định dự án cũng như các biến môi trường trong 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)

Xoá cụm:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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.   

Xoá bản sao lưu AlloyDB

Xoá tất cả các bản sao lưu AlloyDB cho cụm:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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.                                                                                                                                                                                                                                                            

Giờ đây, chúng ta có thể huỷ VM

Xoá máy ảo GCE

Trong Cloud Shell, hãy thực thi:

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

Kết quả đầu ra dự kiến trên bảng điều khiển:

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. Xin chúc mừng

Chúc mừng bạn đã hoàn thành lớp học lập trình này.

Phòng thí nghiệm này thuộc Lộ trình học tập về AI sẵn sàng cho hoạt động sản xuất trên Google Cloud.

  • Khám phá toàn bộ chương trình học để thu hẹp khoảng cách từ nguyên mẫu đến phát hành công khai.
  • Chia sẻ tiến trình của bạn bằng thẻ bắt đầu bằng # #ProductionReadyAI.

Nội dung đã đề cập

  • Cách triển khai cụm AlloyDB và phiên bản chính
  • Cách kết nối với AlloyDB từ máy ảo Google Compute Engine
  • Cách tạo cơ sở dữ liệu và bật AI AlloyDB
  • Cách tải dữ liệu vào cơ sở dữ liệu
  • Cách sử dụng AlloyDB Studio
  • Cách sử dụng mô hình nhúng Nền tảng Tác nhân Gemini Enterprise trong AlloyDB
  • Cách sử dụng Gemini Enterprise Agent Platform Studio
  • Cách làm phong phú kết quả bằng mô hình tạo sinh của Nền tảng Tác nhân Gemini Enterprise
  • Cách cải thiện hiệu suất bằng chỉ mục vectơ

13. Khảo sát

Kết quả:

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ đọc qua Đọc và hoàn thành bài tập