Bắt đầu sử dụng tính năng Nhúng vectơ bằng AI của 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 AI AlloyDB bằng cách kết hợp tính năng tìm kiếm vectơ với các mục nhúng AI Vertex.

17e86406ab251142.pngS

Đ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à shell google

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

  • Cách triển khai cụm AlloyDB và thực thể chính
  • Cách kết nối với AlloyDB qua 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 mô hình nhúng Vertex AI trong AlloyDB
  • Cách làm phong phú kết quả bằng mô hình tạo sinh Vertex AI
  • 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. Cách thiết lập và các yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. 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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là duy nhất trên tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. 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 (thường được xác định là PROJECT_ID). Nếu không thích mã được tạo, bạn có thể tạo một mã ngẫu nhiên khác. Ngoài ra, bạn có thể thử cách riêng của mình để xem có thể sử dụng hay không. Bạn không thể thay đổi mã này sau bước này và mã vẫn giữ nguyên trong thời gian dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án), mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí sau khi hoàn tất hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Khởi động Cloud Shell

Mặc dù bạn 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 trong Đám mây.

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

55efc1aaa7a4d3ad.pngS

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

7ffe5cbb04455448.pngS

Máy ảo này được tải sẵn tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong lớp học lập trình này bằng trình duyệt. Bạn không cần cài đặt gì cả.

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

Bật API

Kết quả:

Bên trong Cloud Shell, hãy đảm bảo 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ả dịch vụ 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.

Định cấu hình khu vực mặc định để sử dụng các mô hình nhúng Vertex AI. Đọc thêm về các vị trí có Vertex AI. Trong ví dụ này, chúng ta đang sử dụng khu vực us-central1.

gcloud config set compute/region us-central1

4. Triển khai AlloyDB

Trước khi tạo cụm AlloyDB, chúng ta cần có một dải IP riêng tư có sẵn trong VPC để thực thể AlloyDB trong tương lai sử dụng. Nếu không có, chúng ta cần tạo cụm, chỉ định để các dịch vụ nội bộ của Google sử dụng. Sau đó, chúng ta sẽ có thể tạo cụm và phiên bản.

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

Chúng ta cần định cấu hình Quyền truy cập vào dịch vụ riêng tư trong VPC cho AlloyDB. Giả định ở đây là chúng tôi có giá trị "mặc định" Mạng VPC trong dự án và mạng này sẽ được dùng cho tất cả 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ả 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 trong khu vực us-central1.

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

export PGPASSWORD=`openssl rand -hex 12`

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

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

Hãy lưu ý mật khẩu PostgreSQL để sử dụng sau này:

echo $PGPASSWORD

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

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

Xác định tên khu vực và tên cụm AlloyDB. Chúng ta sẽ dùng khu vực us-central1 và alloydb-aip-01 làm 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ả 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 phiên bản chính AlloyDB

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

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 cho riêng tư, vì vậy, chúng ta cần cài đặt máy ảo có ứ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 máy ảo GCE trong cùng một 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-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform

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

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

Cài đặt ứng dụng Postgres

Cài đặt phần mềm ứng dụng 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.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:~$ 

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

Kết nối với thực thể

Kết nối với thực thể chính từ máy ảo bằng psql.

Trong cùng một thẻ Cloud Shell có phiên SSH đã mở đến máy ảo 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ả dự kiến trên bảng điều khiển:

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

Đóng phiên psql:

exit

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

Chúng ta cần tạo một cơ sở dữ liệu, bật tính năng tích hợp Vertex AI, 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 Vertex AI vào tác nhân dịch vụ AlloyDB.

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

4ca978f5142bb6ce.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 hướng dẫn bắt đầu nhanh về cơ sở dữ liệu.

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 với Vertex AI và các phần mở rộng 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 rồi nhập vào cơ sở dữ liệu mới.

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

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"

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 mục nhúng

Sau khi nhập dữ liệu, chúng ta 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òn hàng trong mỗi cửa hàng trong bảng cymbal_inventory và danh sách cửa hàng trong bảng cymbal_stores. Chúng tôi cần tính dữ liệu vectơ dựa trên mô tả cho sản phẩm của mình và chúng tôi sẽ sử dụng hàm nhúng để thực hiện điều đó. Chúng ta sẽ dùng hàm tích hợp với Vertex AI để tính toán dữ liệu vectơ dựa trên phần mô tả sản phẩm rồi thêm dữ liệu đó vào bảng. Bạn có thể đọc thêm về công nghệ được sử dụng trong tài liệu.

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ó dữ liệu vectơ bằng cách sử dụng hàm nhúng trong bảng cymbal_products. Hàm nhúng trả về dữ liệu vectơ từ Vertex AI dựa trên dữ liệu được cung cấp trong cột product_description.

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) GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED;

Lệnh này sẽ tạo cột ảo và điền dữ liệu vectơ vào cột đó.

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

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(768) GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED;
ALTER TABLE
quickstart_db=> 

8. Chạy tính năng Tìm kiếm nội dung tương tự

Bây giờ, chúng ta có thể chạy tìm kiếm bằng cách sử dụng tính năng tìm kiếm tương tự dựa trên các giá trị vectơ được tính toán cho phần mô tả và giá trị vectơ mà chúng ta nhận được cho yêu cầu.

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 thay vào đó là từ AlloyDB Studio. Mọi kết quả phức tạp và nhiều hàng đều có thể trông đẹp hơn trong AlloyDB Studio.

Kết nối với AlloyDB Studio

Trong các chương sau, bạn có thể thực thi tất cả các lệnh SQL yêu cầu kết nối với cơ sở dữ liệu trong AlloyDB Studio. Để chạy lệnh này, bạn cần mở giao diện bảng điều khiển web cho cụm AlloyDB bằng cách nhấp vào phiên bản chính.

ef4bfbcf0ed2ef3a.png

Sau đó, nhấp vào AlloyDB Studio ở bên trái:

5c155cbcd7d43a1.png.

Chọn cơ sở dữ liệu quickstart_db, user postgres và cung cấp mật khẩu được ghi chú khi chúng ta tạo cụm. Sau đó nhấp vào nút "Xác thực" .

432613065cac864f.png

Thao tác này sẽ mở giao diện AlloyDB Studio. Để chạy các lệnh trong cơ sở dữ liệu, bạn nhấp vào thẻ "Trình chỉnh sửa 1" ở bên phải.

b36c28f8165119ca.png

Thao tác này sẽ mở ra giao diện mà bạn có thể chạy các lệnh SQL

cf43aa20f292797e.png

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

Chạy chế độ Tìm kiếm tương tự từ psql

Nếu phiên cơ sở dữ liệu của bạn bị ngắt kết nối thì hãy kết nối lại với cơ sở dữ liệu bằng psql hoặc AlloyDB Studio.

Kết nối với cơ sở dữ liệu:

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

Chạy truy vấn để lấy danh sách các sản phẩm hiện có liên quan nhất đến yêu cầu của khách hàng. Yêu cầu mà chúng ta sẽ chuyển đến Vertex AI để nhận giá trị vectơ có dạng như "Loại cây ăn quả nào phát triển tốt ở đây?"

Sau đây là truy vấn mà bạn có thể chạy để chọn 10 mặt hàng đầu tiên phù hợp nhất với yêu cầu của chúng tôi:

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;

Và đây là kết quả 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-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.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

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

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

Để đạt được điều đó, chúng tôi dự định tạo một tệp JSON chứa kết quả tìm kiếm vectơ, sau đó sử dụng tệp JSON đã tạo đó để bổ sung cho câu lệnh cho mô hình LLM văn bản trong Vertex AI nhằm tạo ra kết quả có ý nghĩa. Ở bước đầu tiên, chúng ta tạo JSON, sau đó sẽ kiểm thử trong Vertex AI Studio và trong bước cuối cùng, chúng ta kết hợp JSON vào câu lệnh SQL để dùng được trong ứng dụng.

Tạo kết quả ở định dạng JSON

Sửa đổi truy vấn để tạo kết quả ở định dạng JSON và chỉ trả về một hàng để truyền đến Vertex AI

Sau đây là ví dụ về 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-004','What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1)
SELECT json_agg(trees) FROM trees;

Dưới đây là JSON dự kiến trong kết quả:

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

Chúng ta có thể sử dụng JSON đã tạo để cung cấp trong lời nhắc đưa ra mô hình văn bản dựa trên AI tạo sinh trong Vertex AI Studio

Mở Vertex AI Studio trong bảng điều khiển trên đám mây.

e514b176aef7945e.png

54712e5ade7121f.png.

Yêu cầu này có thể yêu cầu bạn bật các API bổ sung nhưng bạn có thể bỏ qua yêu cầu này. Chúng tôi không cần thêm API nào để hoàn tất phòng thí nghiệm của mình.

Dưới đây là câu lệnh mà chúng ta sẽ sử dụng:

Bạn là một cố vấn thân thiện, giúp tìm sản phẩm dựa trên nhu cầu của khách hàng.

Dựa trên yêu cầu của khách hàng, chúng tôi đã tải một danh sách các sản phẩm liên quan chặt chẽ đến nội dung tìm kiếm.

Danh sách ở định dạng JSON với danh sách các giá trị như {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"}

Dưới đây là danh sách sản phẩm:

[đặt cho JSON của chúng tôi]

Khách hàng hỏi "Cây nào đang phát triển tốt nhất ở đây?"

Bạn nên cung cấp thông tin về sản phẩm, giá và một số thông tin bổ sung' dưới dạng câu lệnh

Và đây là kết quả khi chúng ta chạy lời nhắc bằng các giá trị JSON và sử dụng mô hình gemini-1.5-flash:

30e5072cd2975685.png

Sau đây là câu trả lời mà chúng ta nhận được từ mô hình trong ví dụ này. Xin lưu ý rằng câu trả lời của bạn có thể khác do mô hình và các tham số thay đổi theo thời gian:

"Tôi thấy bạn đang tìm một loại cây phát triển tốt ở khu vực của bạn. Dựa trên mã zip của bạn, 93230, có vẻ như Cherry Tree là một lựa chọn tuyệt vời!

Nó được mô tả là một cây đẹp cho quả anh đào ngon. Sản phẩm này hiện đang được giảm giá còn 75 USD.

Mặc dù tôi không có thông tin cụ thể về tốc độ phát triển của cây anh đào ở khu vực của bạn, nhưng tôi có thể cho bạn biết rằng cây anh đào thường thích đất thoát nước tốt và nhiều ánh nắng.

Để đảm bảo kết quả tốt nhất, bạn nên tham khảo ý kiến của một chuyên gia làm vườn hoặc vườn ươm tại địa phương. Họ có thể đưa ra lời khuyên phù hợp hơn cho vị trí và điều kiện đất cụ thể của bạn. Họ cũng có thể giúp bạn chọn giống tốt nhất theo nhu cầu của bạn và cung cấp các mẹo về cách trồng và chăm sóc."

Chạy lời nhắc trong PSQL

Chúng ta có thể sử dụng tính năng tích hợp AI AlloyDB với Vertex AI để nhận được cùng một phản hồi từ mô hình tạo sinh bằng cách sử dụng SQL ngay trong cơ sở dữ liệu. Nhưng để sử dụng mô hình gemini-1.5-flash chúng ta cần phải đăng ký nó trước.

Nâng cấp tiện ích mở rộng lên phiên bản 1.4.1 (nếu phiên bản hiện tại thấp hơn). Kết nối với cơ sở dữ liệu quickstart_db từ psql như đã hiển thị trước đó (hoặc sử dụng AlloyDB Studio) và thực thi:

SELECT extversion from pg_extension where extname='google_ml_integration';

Nếu giá trị được trả về nhỏ hơn 1.4.1, hãy thực thi:

ALTER EXTENSION google_ml_integration UPDATE TO '1.4.1';

Sau đó, chúng tôi cần đặt cờ cơ sở dữ liệu google_ml_integration.enable_model_support thành "on". Để thực hiện việc đó, bạn có thể sử dụng giao diện bảng điều khiển web của AlloyDB hoặc chạy lệnh gcloud sau.

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

Lệnh này sẽ mất khoảng 3 đến 5 phút để thực thi ở chế độ nền. Sau đó, bạn có thể xác minh cờ mới trong phiên psql hoặc sử dụng AlloyDB Studio kết nối với cơ sở dữ liệu quickstart_db.

show google_ml_integration.enable_model_support;

Kết quả dự kiến từ phiên psql là "bật":

postgres=> show google_ml_integration.enable_model_support;
 google_ml_integration.enable_model_support 
--------------------------------------------
 on
(1 row)

Sau đó, chúng ta cần đăng ký hai mô hình. Mô hình đầu tiên là mô hình text-embedding-004 đã được sử dụng. Bạn cần đăng ký mô hình này vì chúng tôi đã bật các tính năng đăng ký mô hình.

Để đăng ký mô hình, hãy chạy trong psql hoặc AlloyDB Studio, đoạn mã sau:

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

Và mô hình tiếp theo mà chúng ta cần đăng ký là gemini-1.5-flash-002. Mô hình này sẽ được dùng để tạo đầu ra thân thiện với người dùng.

CALL
  google_ml.create_model(
    model_id => 'gemini-1.5-flash-002',
    model_request_url => 'https://$REGION-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/publishers/google/models/gemini-1.5-flash-002:streamGenerateContent',
    model_provider => 'google',
    model_auth_type => 'alloydb_service_agent_iam');

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;

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

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)

Bây giờ, chúng ta có thể sử dụng dữ liệu được tạo trong truy vấn phụ JSON để cung cấp dữ liệu đó dưới dạng một phần của câu lệnh cho mô hình văn bản AI tạo sinh bằng SQL.

Trong phiên psql hoặc AlloyDB Studio đến cơ sở dữ liệu, hãy chạy truy vấn

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-002',
        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;

Và đây là kết quả dự kiến. Kết quả của bạn có thể khác nhau tuỳ thuộc vào phiên bản mô hình và các thông số.:

"That" "'s a great question! Based on your location (assuming you're" " in zip code 93230), I have a suggestion for a" " fruit tree that should thrive.\n\nWe have the **Cherry Tree** available.\n\n**Product Name:** Cherry Tree\n\n**Description:** This is a beautiful cherry" " tree that will produce delicious cherries. It's a deciduous tree (meaning it loses its leaves in the fall) growing to about 15 feet tall." " The leaves are dark green in summer, turning a beautiful red in the fall. Cherry trees are known for their beauty, shade, and privacy.\n\n**Sale Price:** $75.00\n\n**Important Considerations for Growing" " Cherry Trees:**\n\n* **Climate:** Cherry trees prefer a cool, moist climate, and 93230 falls within a suitable range (USDA zones 4-9). However, it's always a good idea to" " check the specific microclimate of your property (sun exposure, drainage etc.).\n* **Soil:** They do best in sandy soil. If your soil is different, you may need to amend it to improve drainage.\n* **Pollination:** Many cherry varieties require a second, compatible cherry tree for proper pollination" ". Check the specific pollination needs of this variety before purchase if you want a significant cherry yield.\n\nThis cherry tree is a beautiful addition to any yard and will provide you with delicious cherries if you can meet its needs. Would you like to know more about its pollination requirements, or perhaps see if we have any other" " fruit trees suitable for your area?\n" ""

10. Tạo chỉ mục vectơ

Tập dữ liệu của chúng tôi khá nhỏ và thời gian phản hồi chủ yếu phụ thuộc vào hoạt động tương tác với các mô hình AI. Tuy nhiên, khi bạn có hàng triệu vectơ, phần tìm kiếm vectơ có thể chiếm một phần đáng kể thời gian phản hồi và gây ra tải cao cho hệ thống. Để cải thiện điều đó, chúng ta có thể tạo một chỉ mục trên các vectơ của mình.

Tạo chỉ mục ScaNN

Để tạo chỉ mục SCANN, chúng ta cần bật thêm một tiện ích. Tiện ích alloydb_scann cung cấp cho chúng ta giao diện để làm việc với chỉ mục vectơ loại ANN bằng thuật toán Google ScaNN.

CREATE EXTENSION IF NOT EXISTS alloydb_scann;

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

quickstart_db=> CREATE EXTENSION IF NOT EXISTS alloydb_scann;
CREATE EXTENSION
Time: 27.468 ms
quickstart_db=> 

Bây giờ, chúng ta có thể tạo chỉ mục. Trong ví dụ sau, tôi sẽ để hầu hết các tham số theo mặc định và chỉ cung cấp một số phân vùng (num_ rờis) cho chỉ mục:

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

Bạn có thể đọc về cách đ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=31, max_num_levels = 2);
CREATE INDEX
quickstart_db=>

So sánh phản hồi

Bây giờ chúng ta có thể chạy truy vấn tìm kiếm vectơ ở chế độ GIẢI THÍCH và xác minh xem chỉ mục đã được sử dụng hay chưa.

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-004','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:

Aggregate (cost=16.59..16.60 rows=1 width=32) (actual time=2.875..2.877 rows=1 loops=1)
-> Subquery Scan on trees (cost=8.42..16.59 rows=1 width=142) (actual time=2.860..2.862 rows=1 loops=1)
-> Limit (cost=8.42..16.58 rows=1 width=158) (actual time=2.855..2.856 rows=1 loops=1)
-> Nested Loop (cost=8.42..6489.19 rows=794 width=158) (actual time=2.854..2.855 rows=1 loops=1)
-> Nested Loop (cost=8.13..6466.99 rows=794 width=938) (actual time=2.742..2.743 rows=1 loops=1)
-> Index Scan using cymbal_products_embeddings_scann on cymbal_products cp (cost=7.71..111.99 rows=876 width=934) (actual time=2.724..2.724 rows=1 loops=1)
Order By: (embedding <=> '[0.008864171,0.03693164,-0.024245683,-0.00355923,0.0055611245,0.015985578,...<redacted>...5685,-0.03914233,-0.018452475,0.00826032,-0.07372604]'::vector)
-> Index Scan using walmart_inventory_pkey on cymbal_inventory ci (cost=0.42..7.26 rows=1 width=37) (actual time=0.015..0.015 rows=1 loops=1)
Index Cond: ((store_id = 1583) AND (uniq_id = (cp.uniq_id)::text))

Từ đầu ra, chúng ta có thể thấy rõ rằng truy vấn đang sử dụng "Quét chỉ mục bằng cymbal_products_embeddings_scann trên cymbal_products".

Và nếu chúng ta chạy truy vấn mà không có explain:

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;

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

[{"product_name":"Meyer Lemon Tree","description":"Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by ","sale_price":34,"zip_code":93230,"product_id":"02056727942aeb714dc9a2313654e1b0"}]

Chúng ta có thể thấy kết quả hơi khác và không trả về cây Cherry đứng đầu trong kết quả tìm kiếm không có chỉ mục mà là lựa chọn thứ hai là cây Meyer Lemon. Vì vậy, chỉ mục cung cấp cho chúng tôi hiệu suất nhưng vẫn đủ chính xác để mang lại kết quả tốt.

Bạn có thể thử nhiều chỉ mục có sẵn cho các vectơ cũng như các phòng thí nghiệm và ví dụ khác có tích hợp chuỗi ngôn ngữ trên trang tài liệu.

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

Huỷ bỏ các phiên bản và cụm AlloyDB khi bạn hoàn tất phòng thí nghiệm này

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

Cụm bị huỷ bỏ bằng lực tuỳ chọn, thao tác này cũng sẽ xoá tất cả các thực thể của cụm.

Trong Cloud shell, hãy xác định các biến dự án và môi trường nếu bạn đã bị ngắt kết nối và tất cả các chế độ cài đặt trước đó bị mất:

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

Bây giờ, chúng ta có thể huỷ bỏ máy ảo

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ội dung đã đề cập

  • Cách triển khai cụm AlloyDB và thực thể chính
  • Cách kết nối với AlloyDB qua 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 mô hình nhúng Vertex AI trong AlloyDB
  • Cách làm phong phú kết quả bằng mô hình tạo sinh Vertex AI
  • 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ẽ 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