Bắt đầu sử dụng tính năng nhúng vectơ trong Cloud SQL cho PostgreSQL

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 tính năng tích hợp AI của Cloud SQL cho PostgreSQL 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 của Nền tảng tác nhân Gemini Enterprise.

Sơ đồ cấu trúc cho thấy việc tích hợp Cloud SQL với Nền tảng Tác nhân Gemini Enterprise

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

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

Bạn sẽ thực hiện

  • Triển khai một phiên bản Cloud SQL cho PostgreSQL
  • Tạo cơ sở dữ liệu và bật tính năng tích hợp AI Cloud SQL
  • Tải dữ liệu vào cơ sở dữ liệu
  • Sử dụng Cloud SQL Studio
  • Tạo các mục nhúng bằng Nền tảng tác nhân Gemini Enterprise trong Cloud SQL
  • Sử dụng Agent Platform Studio
  • Làm phong phú kết quả truy vấn bằng mô hình tạo sinh của Nền tảng Tác nhân Gemini Enterprise
  • Cải thiện hiệu suất truy vấn bằng chỉ mục vectơ HNSW

Bạn cần có

  • Tài khoản Google Cloud và dự án trên đám mây của 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 Cloud Console. Nếu chưa có Tài khoản Google (Gmail hoặc Google Workspace), bạn phải tạo một Tài khoản Google.

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, hãy nhấp vào Chọn một dự án trong thanh công cụ.

Hộp thoại chọn dự án trong Google Cloud Console

Trong hộp thoại Chọn một dự án, hãy nhấp vào Dự án mới.

37d264871000675d.png

Trong hộp thoại, hãy nhập Tên dự án rồi 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). Bảng điều khiển Google Cloud tự động tạo một mã nhận dạng duy nhấ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ẽ 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ỗ .
  • Một số API sử dụng giá trị thứ ba là Số dự án. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu Tạo và quản lý dự án.

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 bật tính năng thanh toán trong Bảng điều khiển thanh toán của Google Cloud.

Lưu ý:

  • Việc hoàn thành bài tập thực hành này sẽ tốn ít hơn 5 USD cho các tài nguyên trên Google Cloud.
  • Hãy làm theo các bước ở cuối bài thực hành này để xoá tài nguyên và tránh bị tính thêm phí.
  • Người dùng mới đủ điều kiện dùng thử miễn phí 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, 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 đám mây.

Trong thanh công cụ Google Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell:

Kích hoạt Cloud Shell

Ngoài ra, hãy nhấn g rồi nhấn s trong Google Cloud Console hoặc mở Cloud Shell.

Quá trình này chỉ mất vài giây để thiết lập và kết nối với môi trường. Khi quá trình này hoàn tất, bạn sẽ thấy thiết bị đầu cuối đã kết nối:

Ả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 nâng cao hiệu suất mạng và 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.

3. Bật API

Để sử dụng Cloud SQL, Compute Engine, Service Networking và Nền tảng tác nhân Gemini Enterprise, hãy bật các API tương ứng trong dự án Google Cloud của bạn.

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

gcloud config set project <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 dịch vụ bắt buộc:

gcloud services enable sqladmin.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 sqladmin.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. Tạo một phiên bản Cloud SQL

Tạo một phiên bản Cloud SQL có tích hợp cơ sở dữ liệu Nền tảng tác nhân Gemini Enterprise.

Tạo mật khẩu cơ sở dữ liệu

Xác định mật khẩu cho người dùng cơ sở dữ liệu mặc định. 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 CLOUDSQL_PASSWORD=$(openssl rand -hex 16)

Hiển thị giá trị mật khẩu đã tạo:

echo $CLOUDSQL_PASSWORD

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

Tạo một phiên bản Cloud SQL cho PostgreSQL

Bạn có thể tạo các phiên bản Cloud SQL bằng nhiều phương thức, bao gồm cả Cloud Console, Terraform hoặc Google Cloud CLI (gcloud). Trong lớp học lập trình này, bạn sẽ sử dụng gcloud. Để tìm hiểu cách tạo một phiên bản bằng các công cụ khác, hãy xem tài liệu Tạo phiên bản.

Trong Cloud Shell, hãy chạy lệnh sau để tạo phiên bản:

gcloud sql instances create my-cloudsql-instance \
--database-version=POSTGRES_18 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--edition=ENTERPRISE \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on

Sau khi tạo phiên bản, hãy đặt mật khẩu cho người dùng mặc định (postgres) và xác minh rằng bạn có thể kết nối:

gcloud sql users set-password postgres \
    --instance=my-cloudsql-instance \
    --password=$CLOUDSQL_PASSWORD

Kết nối với phiên bản bằng gcloud sql connect. Khi được nhắc, hãy nhập mật khẩu:

gcloud sql connect my-cloudsql-instance --user=postgres

Thoát khỏi phiên psql bằng cách nhấn tổ hợp phím Ctrl+D hoặc nhập exit:

exit

Bật tính năng tích hợp Nền tảng Tác nhân Gemini Enterprise

Cấp vai trò IAM cần thiết cho tài khoản dịch vụ Cloud SQL để bật tính năng tích hợp Nền tảng tác nhân Gemini Enterprise.

Truy xuất email của tài khoản dịch vụ Cloud SQL và xuất email đó dưới dạng một biến môi trường:

SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL

Cấp vai trò roles/aiplatform.user cho tài khoản dịch vụ Cloud SQL:

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
  --role="roles/aiplatform.user"

Để biết thêm thông tin về cách tạo và định cấu hình phiên bản, hãy xem bài viết Tích hợp Cloud SQL với Nền tảng tác nhân Gemini Enterprise.

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

Tạo cơ sở dữ liệu và bật tính năng hỗ trợ vectơ.

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

Tạo một cơ sở dữ liệu có tên là quickstart_db. Bạn có thể tạo cơ sở dữ liệu bằng cách sử dụng các ứng dụng cơ sở dữ liệu (chẳng hạn như psql), Google Cloud CLI hoặc Cloud SQL Studio. Trong bước này, hãy sử dụng gcloud.

Trong Cloud Shell, hãy chạy lệnh sau để tạo cơ sở dữ liệu:

gcloud sql databases create quickstart_db --instance=my-cloudsql-instance

Bật tiện ích

Để làm việc với Nền tảng tác nhân Gemini Enterprise và các vectơ, hãy bật 2 tiện ích trong cơ sở dữ liệu quickstart_db: google_ml_integration và vector.

Trong Cloud Shell, hãy kết nối với cơ sở dữ liệu:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

Khi được nhắc, hãy nhập mật khẩu cơ sở dữ liệu.

Trong phiên SQL, hãy chạy các lệnh sau:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector CASCADE;

Thoát khỏi phiên SQL:

exit;

6. Tải dữ liệu

Tạo bảng trong cơ sở dữ liệu và tải dữ liệu bằng cách sử dụng các tệp dữ liệu giả định của Cửa hàng Cymbal được lưu trữ trong một bộ chứa công khai trên Cloud Storage ở định dạng CSV.

Trước tiên, hãy tạo các đối tượng giản đồ cần thiết. Chạy gcloud sql connect và gcloud storage để tải xuống và nhập giản đồ:

Trong Cloud Shell, hãy chạy lệnh sau (khi được nhắc, hãy nhập mật khẩu bạn đã tạo cho phiên bản):

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql | gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

Lệnh này kết nối với cơ sở dữ liệu và thực thi mã SQL đã tải xuống để tạo bảng, chỉ mục và chuỗi.

Tiếp theo, hãy tải tệp dữ liệu CSV xuống từ Cloud Storage:

gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv .
gcloud storage cp gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv .

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

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

Nhập dữ liệu từ tệp CSV:

\copy cymbal_products from 'cymbal_products.csv' csv header
\copy cymbal_inventory from 'cymbal_inventory.csv' csv header
\copy cymbal_stores from 'cymbal_stores.csv' csv header

Nếu sử dụng dữ liệu của riêng mình và các tệp CSV tương thích với công cụ nhập của Cloud SQL trong Google Cloud Console, thì bạn có thể sử dụng bảng điều khiển thay vì dòng lệnh.

7. Tạo dữ liệu nhúng

Tạo các mục nhúng cho nội dung mô tả sản phẩm bằng mô hình text-embedding-005 từ Nền tảng tác nhân Gemini Enterprise và lưu trữ các mục đó dưới dạng dữ liệu vectơ.

Nếu phiên của bạn bị ngắt kết nối, hãy kết nối với cơ sở dữ liệu:

gcloud sql connect my-cloudsql-instance --database quickstart_db --user=postgres

Tạo một cột được tạo có tên là embedding trong bảng cymbal_products bằng cách sử dụng hàm embedding. Lệnh này tạo một cột được tạo đã lưu trữ, chứa các mục nhúng vectơ được tạo từ cột product_description cho tất cả các hàng trong bảng. Mô hình được chỉ định làm tham số đầu tiên và cột văn bản nguồn làm tham số thứ hai:

ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (google_ml.embedding('text-embedding-005', product_description)) STORED;

Đối với 900 đến 1.000 hàng, quá trình này thường mất từ 1 đến 5 phút.

Khi bạn chèn một hàng mới vào bảng hoặc cập nhật product_description trên một hàng hiện có, cột embedding sẽ tự động cập nhật.

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ự bằng cách so sánh các vectơ nhúng được tính cho nội dung mô tả sản phẩm với vectơ nhúng cho một cụm từ tìm kiếm.

Bạn có thể chạy các truy vấn SQL qua dòng lệnh bằng cách sử dụng gcloud sql connect hoặc qua Cloud SQL Studio. Cloud SQL Studio cung cấp cách thức thuận tiện hơn để chỉnh sửa và thực thi các câu lệnh SQL dài có nhiều hàng trong đầu ra.

Khởi động Cloud SQL Studio

  1. Trong Cloud Console, hãy chuyển đến các phiên bản Cloud SQL rồi nhấp vào my-cloudsql-instance.

Danh sách các phiên bản Cloud SQL trong Cloud Console của Google Cloud

  1. Trong trình đơn điều hướng, hãy nhấp vào Cloud SQL Studio.

Mục Cloud SQL Studio trong trình đơn

  1. Trong hộp thoại xác thực, hãy nhập tên cơ sở dữ liệu và thông tin đăng nhập:
    • Cơ sở dữ liệu: quickstart_db
    • Người dùng: postgres
    • Mật khẩu:
  2. Nhấp vào Xác thực.

Hộp thoại xác thực Cloud SQL Studio

  1. Nhấp vào thẻ Trình chỉnh sửa để mở Trình chỉnh sửa SQL.

Thẻ trình chỉnh sửa SQL của Cloud SQL Studio

Chạy truy vấn

Chạy một truy vấn để truy xuất 10 sản phẩm phù hợp nhất với truy vấn của khách hàng: "Ở đây trồng được những loại cây ăn quả nào?"

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;

Trong Cloud SQL Studio, hãy nhập truy vấn rồi nhấp vào Run (Chạy) (hoặc chạy truy vấn trong phiên psql):

Chạy truy vấn SQL trong Cloud SQL Studio

Truy vấn này trả về các sản phẩm khớp được sắp xếp theo khoảng cách cosin:

product_name       |                                   description                                    | sale_price | zip_code |      distance       
-------------------------+----------------------------------------------------------------------------------+------------+----------+---------------------
 Cherry Tree             | This is a beautiful cherry tree that will produce delicious cherries. It is an d |      75.00 |    93230 | 0.43922018972266397
 Meyer Lemon Tree        | Meyer Lemon trees are California's favorite lemon tree! Grow your own lemons by  |         34 |    93230 |  0.4685112926118228
 Toyon                   | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e |      10.00 |    93230 |  0.4835677149651668
 California Lilac        | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d |       5.00 |    93230 |  0.4947204525907498
 California Peppertree   | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e |      25.00 |    93230 |  0.5054166905547247
 California Black Walnut | This is a beautiful walnut tree that can grow to be over 80 feet tall. It is a d |     100.00 |    93230 |  0.5084219510932597
 California Sycamore     | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is  |     300.00 |    93230 |  0.5140519790508755
 Coast Live Oak          | This is a beautiful oak tree that can grow to be over 100 feet tall. It is an ev |     500.00 |    93230 |  0.5143126438081371
 Fremont Cottonwood      | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i |     200.00 |    93230 |  0.5174774727252058
 Madrone                 | This is a beautiful madrona tree that can grow to be over 80 feet tall. It is an |      50.00 |    93230 |  0.5227400803389093
(10 rows)

9. Cải thiện phản hồi của LLM bằng dữ liệu đã truy xuất

Cải thiện câu trả lời của AI tạo sinh cho một ứng dụng khách bằng cách truyền kết quả truy vấn dưới dạng bối cảnh có cơ sở trong một câu lệnh cho mô hình ngôn ngữ cơ bản của Nền tảng tác nhân Gemini Enterprise.

Để thực hiện điều này:

  1. Tạo tải trọng JSON từ kết quả tìm kiếm vectơ trong Cloud SQL.
  2. Kiểm thử câu lệnh trong Agent Platform Studio.
  3. Thực thi lời nhắc toàn diện ngay từ SQL bằng cách sử dụng chế độ tích hợp google_ml.

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

Sửa đổi truy vấn để định dạng kết quả dưới dạng JSON và trả về một hàng:

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 ở định dạng JSON:

[{"product_name":"Cherry Tree","description":"This is a beautiful cherry tree that will produce delicious cherries. It is an d","sale_price":75.00,"zip_code":93230,"product_id":"d536e9e823296a2eba198e52dd23e712"}]

Chạy câu lệnh trong Agent Platform Studio

Cung cấp JSON đã tạo làm ngữ cảnh trong câu lệnh cho một mô hình tạo sinh trong Agent Platform Studio.

  1. Trong Google Cloud Console, hãy mở Agent Platform Studio.

Thanh điều hướng Agent Platform Studio

  1. Nhập câu lệnh sau vào Agent Platform Studio:

Nhập câu lệnh trong Agent Platform Studio

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, "product_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
<JSON_OUTPUT>
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

Thay thế bằng phản hồi JSON từ truy vấn của bạn:

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, "product_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.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

Câu lệnh trong Agent Platform Studio

  1. Chạy câu lệnh.

Kết quả của câu lệnh trong Agent Platform Studio

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ũng có thể sử dụng tính năng tích hợp AI của Cloud SQL với Nền tảng Tác nhân Gemini Enterprise để nhận câu trả lời từ một mô hình tạo sinh ngay trong SQL. Trước tiên, hãy đăng ký mô hình.

  1. Nâng cấp tiện ích lên phiên bản 1.4.3 trở lên nếu cần. Kết nối với quickstart_db và chạy:
SELECT extversion from pg_extension where extname='google_ml_integration';

Nếu phiên bản được trả về thấp hơn 1.4.3, hãy chạy:

ALTER EXTENSION google_ml_integration UPDATE TO '1.4.3';
  1. Kiểm tra cờ cơ sở dữ liệu google_ml_integration.enable_model_support:
SHOW google_ml_integration.enable_model_support;

Nếu cờ là off, hãy cập nhật cờ cơ sở dữ liệu trong Cloud Shell:

gcloud sql instances patch my-cloudsql-instance \
--database-flags google_ml_integration.enable_model_support=on,cloudsql.enable_google_ml_integration=on

Thao tác này mất từ 1 đến 3 phút. Xác minh lại chế độ cài đặt:

SHOW google_ml_integration.enable_model_support;
  1. Đăng ký mô hình gemini-3.5-flash để tạo câu trả lời (thay thế bằng mã dự án của bạn):
CALL
  google_ml.create_model(
    model_id => 'gemini-3.5-flash',
    model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.5-flash:generateContent',
    model_provider => 'google',
    model_auth_type => 'cloudsql_service_agent_iam');

Xác minh các mô hình đã đăng ký:

SELECT model_id, model_type FROM google_ml.model_info_view WHERE model_id='gemini-3.5-flash';
  1. Chạy truy vấn SQL hoàn chỉnh để truy xuất kết quả tìm kiếm vectơ và truyền trực tiếp các kết quả đó đến gemini-3.5-flash:
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.5-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;

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

"Hello there! If you're looking for a wonderful fruit tree to plant, I have a fantastic option for you: ### **Cherry Tree** * **Price:** $75.00 * **Product ID:** `d536e9e823296a2eba198e52dd23e712` --- ### **Why it's a great choice:** * **Fruit & Shade:** Not only will it produce delicious, sweet cherries, but it also grows into a beautiful 15-foot deciduous tree that provides excellent shade and privacy for your yard. * **Seasonal Beauty:** Its leaves are a lovely dark green throughout the summer and transition into a striking red during the fall. * **Ideal Growing Conditions:** Cherry trees thrive best in cool, moist climates with sandy soil and are suitable for **USDA hardiness zones 4–9**. If your local climate matches these conditions, this Cherry Tree would make a beautiful and tasty addition to your garden! Let me know if you'd like more details or help placing an order."

10. Tạo chỉ mục lân cận gần nhất

Đối với các tập dữ liệu lớn có hàng triệu vectơ, tính năng tìm kiếm vectơ có thể đòi hỏi tài nguyên điện toán đáng kể. Để cải thiện hiệu suất truy vấn, hãy tạo một chỉ mục trên các vectơ nhúng.

Tạo chỉ mục HNSW

Hierarchical Navigable Small World (HNSW) là một chỉ mục vectơ dựa trên biểu đồ.

Để tạo chỉ mục HNSW trên cột embedding, hãy chỉ định hàm khoảng cách (vector_cosine_ops) và các tham số không bắt buộc như m và ef_construction. Để biết thêm thông tin, hãy xem bài viết Làm việc với các mục nhúng vectơ.

CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);

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

quickstart_db=> CREATE INDEX cymbal_products_embeddings_hnsw ON cymbal_products
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 64);
CREATE INDEX
quickstart_db=>

So sánh hiệu suất của cụm từ tìm kiếm

Chạy truy vấn tìm kiếm vectơ bằng EXPLAIN (ANALYZE) để xác minh rằng trình lập kế hoạch truy vấn 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:

 Aggregate  (cost=779.12..779.13 rows=1 width=32) (actual time=1.066..1.069 rows=1 loops=1)
   ->  Subquery Scan on trees  (cost=769.05..779.12 rows=1 width=142) (actual time=1.038..1.041 rows=1 loops=1)
         ->  Limit  (cost=769.05..779.11 rows=1 width=158) (actual time=1.022..1.024 rows=1 loops=1)
               ->  Nested Loop  (cost=769.05..9339.69 rows=852 width=158) (actual time=1.020..1.021 rows=1 loops=1)
                     ->  Nested Loop  (cost=768.77..9316.48 rows=852 width=945) (actual time=0.858..0.859 rows=1 loops=1)
                           ->  Index Scan using cymbal_products_embeddings_hnsw on cymbal_products cp  (cost=768.34..2572.47 rows=941 width=941) (actual time=0.532..0.539 rows=3 loops=1)
...
 Planning Time: 112.398 ms
 Execution Time: 1.221 ms

Kế hoạch thực thi cho thấy Index Scan using cymbal_products_embeddings_hnsw.

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

Để biết thêm thông tin và ví dụ về LangChain và chỉ mục vectơ, hãy xem tài liệu Tổng quan về AI trên Cloud SQL.

11. Dọn dẹp tài nguyên

Xoá phiên bản Cloud SQL sau khi bạn hoàn tất lớp học lập trình.

Trong Cloud Shell, hãy đặt dự án và các biến môi trường nếu phiên của bạn bị ngắt kết nối:

export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)

Xoá phiên bản:

gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID

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

student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
All of the instance data will be lost when the instance is deleted.

Do you want to continue (Y/n)?  y

Deleting Cloud SQL instance...done.                                                                                                                
Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].

12. Xin chúc mừng

Xin chúc mừng! Bạn đã hoàn tất 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.

Tóm tắt

Bạn đã tìm hiểu cách:

  • Triển khai một phiên bản Cloud SQL cho PostgreSQL
  • Tạo cơ sở dữ liệu và bật tính năng tích hợp AI Cloud SQL
  • Tải dữ liệu vào cơ sở dữ liệu
  • Sử dụng Cloud SQL Studio
  • Sử dụng mô hình nhúng Nền tảng tác nhân Gemini Enterprise trong Cloud SQL
  • Sử dụng Agent Platform Studio
  • Làm phong phú kết quả truy vấn bằng mô hình tạo sinh của Nền tảng Tác nhân Gemini Enterprise
  • Cải thiện hiệu suất truy vấn bằng chỉ mục vectơ

Hãy thử lớp học lập trình về giá trị nhúng vectơ AlloyDB AI bằng chỉ mục ScaNN thay vì HNSW.