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 tính năng nhúng của Vertex AI.
Điều kiện tiên quyết
- Hiểu biết 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 AlloyDB AI
- 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
Bạn cần có
- Một tài khoản Google Cloud và một 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 môi trường theo tiến độ riêng
- Đă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.
- 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 ứng dụng.
- Mã dự án là duy nhất trong 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 bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham khảo Mã dự án của mình (thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng 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 này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh phát sinh việc thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạ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:
Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:
Máy ảo này chứa 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 mọi công việ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 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 của Vertex AI. Đọc thêm về các địa điểm hỗ trợ Vertex AI. Trong ví dụ này, chúng ta 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 một dải IP riêng tư có sẵn trong VPC để phiên bản 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ả 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 vùng 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 đối tượng 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 shell trên đám mây. 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ả 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ả 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 phần mềm đang chạy lệnh bên trong máy ảo:
sudo apt-get update
sudo apt-get install --yes postgresql-client
Kết quả 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ở cho máy ảo phiên bản 1 của bạn.
Sử dụng giá trị mật khẩu AlloyDB (PGPassword) đã lưu ý và mã 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 cơ sở dữ liệu, bật tính năng tích hợp Vertex AI, tạo đố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 các quyền của 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.
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ả 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
Bắt đầu nhanh 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ả 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 với 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ả 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ả 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 tôi có dữ liệu sản phẩm trong bảng cymbal_products, kho hàng cho thấy số lượng sản phẩm còn hàng của 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. 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 này.
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 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 GENERATED ALWAYS AS (embedding('text-embedding-004',product_description)) STORED; ALTER TABLE quickstart_db=>
8. Chạy công cụ tìm kiếm 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 đầu ra nhiều hàng và phức tạp đề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, tất cả các lệnh SQL yêu cầu kết nối với cơ sở dữ liệu đều có thể được thực thi thay thế 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.
Sau đó, nhấp vào AlloyDB Studio ở bên trái:
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 "Xác thực" .
Thao tác này sẽ mở giao diện AlloyDB Studio. Để chạy các lệnh trong cơ sở dữ liệu, hãy nhấp vào "Editor 1" (Trình chỉnh sửa 1) ở bên phải.
Thao tác này sẽ mở ra giao diện để bạn có thể chạy các lệnh SQL
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 một truy vấn để lấy danh sách các sản phẩm hiện có có liên quan chặt chẽ nhất với yêu cầu của khách hàng. Yêu cầu mà chúng ta sẽ chuyển đến Vertex AI để lấy giá trị vectơ, chẳng hạn 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.287184013172779 Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.30574073611569963 Secateurs | These secateurs are perfect for pruning small branches and vines. | 15.00 | 93230 | 0.3264385326189635 Trimming Shears | These trimming shears are perfect for trimming hedges and bushes. | 20.00 | 93230 | 0.33293036535756393 Cypress Tree | This is a beautiful cypress tree that will provide shade and privacy. It is an e | 75.00 | 93230 | 0.33485770716129326 Madrone | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an | 50.00 | 93230 | 0.3354408801293012 California Redwood | This is a beautiful redwood tree that can grow to be over 300 feet tall. It is a | 1000.00 | 93230 | 0.3427243109636263 California Lilac | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d | 5.00 | 93230 | 0.3427628377929176 California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.3430208475356905 Maple Tree | This is a beautiful maple tree that will produce colorful leaves in the fall. It | 100.00 | 93230 | 0.3432609589330091 (10 rows) quickstart_db=>
9. 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 mục tiêu đó, chúng tôi dự định tạo JSON bằng kết quả tìm kiếm vectơ, sau đó sử dụng JSON đã tạo đó làm câu lệnh cho mô hình LLM (mô hình ngôn ngữ lớn) dạng văn bản trong Vertex AI nhằm tạo ra một 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
Dưới đâ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;
Và đâ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 Cloud Console.
Yêu cầu này có thể sẽ yêu cầu bạn bật các API khác 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 cụm từ tìm kiếm.
Danh sách ở định dạng JSON kèm theo danh sách các giá trị như {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"}
Đâ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 theo 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:
Sau đây là câu trả lời 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à thông số thay đổi theo thời gian:
"Tôi thấy bạn đang tìm một cây phát triển tốt trong khu vực của mình. Theo mã bưu chính 93230 của bạn, Cây anh đào có vẻ 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 bán với giá 750.000 VND.
Mặc dù tôi không có thông tin chi tiết 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à có ánh nắng mặt trời đầy đủ.
Để đảm bảo kết quả tốt nhất, bạn nên tham khảo ý kiến của chuyên gia vườn ươm hoặc chuyên gia làm vườn 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 đai 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 mình 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 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 này lên phiên bản 1.3. Kết nối với cơ sở dữ liệu quickstart_db từ pSQL như mô tả trước đây (hoặc sử dụng AlloyDB Studio) và thực thi:
ALTER EXTENSION google_ml_integration UPDATE TO '1.3'
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 cần khoảng 3 đến 5 phút để thực thi trong 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à "on":
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ý tài khoản này vì chúng tôi đã bật khả năng đăng ký của 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');
Mô hình tiếp theo chúng ta cần đăng ký là gemini-1.5-flash-001. Mô hình này sẽ được sử dụng để tạo dữ liệu đầu ra thân thiện với người dùng.
CALL
google_ml.create_model(
model_id => 'gemini-1.5-flash-001',
model_request_url => 'https://$REGION-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/publishers/google/models/gemini-1.5-flash-001:streamGenerateContent',
model_provider => 'google',
model_auth_type => 'alloydb_service_agent_iam');
Bạn luôn có thể xác minh danh sách 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 câu lệnh được tạo trong truy vấn con JSON để cung cấp câu lệnh đó dưới dạng một phần của lời nhắc 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-001',
request_body => json_build_object('contents',
json_build_object('role',
'user',
'parts',
json_build_object('text',
prompt_text)))))->'candidates'->0->'content'->'parts'->0->'text' AS resp
FROM
prompt)
SELECT
string_agg(resp::text,
' ')
FROM
response;
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ố.:
-------------------------------------------------------------------------------------------------------- "I" " see you're interested in fruit trees! Based on your location, I found" " one great option:\n\n**Cherry Tree:** \n\nThis beautiful cherry tree will" " produce delicious cherries. It's a deciduous tree, meaning it loses its leaves in the fall, and can grow up to 15 feet tall. The" " leaves are a vibrant dark green in the summer, turning a beautiful red in the fall. \n\nCherry trees are known for their beauty and ability to provide shade" " and privacy. They prefer a cool, moist climate and sandy soil, making them a good fit for your area. \n\nThe Cherry Tree is currently on sale for $75.00.\n\nWould you like to know more about" " the Cherry Tree, or are you interested in exploring other fruit tree options? \n" "" (1 row)
10. 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 lựa chọn, thao tác này cũng sẽ xoá tất cả các thực thể thuộc 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.
Xóa các 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ả 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ả 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
11. 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 AlloyDB AI
- 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
12. Khảo sát
Kết quả: