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 MySQL để tìm kiếm ngữ nghĩa bằng cách sử dụng các giá trị nhúng và cách cải thiện hiệu suất bằng cách sử dụng chỉ mục trên dữ liệu vectơ.

Điều kiện tiên quyết
- Hiểu biết cơ bản về Google Cloud và Cloud Console
- Kinh nghiệm cơ bản về giao diện dòng lệnh và Cloud Shell
Kiến thức bạn sẽ học được
- Cách triển khai một phiên bản Cloud SQL cho MySQL
- Cách tạo cơ sở dữ liệu và bật tính năng tích hợp AI Cloud SQL
- Cách tải dữ liệu vào cơ sở dữ liệu
- Cách sử dụng Cloud SQL Studio
- Cách sử dụng mô hình nhúng Vertex AI trong Cloud SQL
- Cách sử dụng Agent Platform Studio
- Cách làm phong phú kết quả bằng mô hình Nền tảng Tác nhân Gemini Enterprise
- Cách cải thiện hiệu suất bằng chỉ mục vectơ
Bạn cần có
- Một Tài khoản Google Cloud và một Dự án Google Cloud
- Một trình duyệt web như Chrome
2. Thiết lập và yêu cầu
Thiết lập dự án
- Đăng nhập vào Google Cloud Console. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một Tài khoản 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.
- 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ụ.

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

Trong hộp thoại, hãy nhập Tên dự án rồi chọn Vị trí.

- Tên dự án là tên hiển thị cho 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ỗ
. - Để bạn biết, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu Tạo và quản lý dự án.
Bật tính năng thanh toán
Để bật tính năng thanh toán, bạn có 2 lựa chọn. Bạn có thể sử dụng tài khoản thanh toán cá nhân hoặc đổi tín dụng theo các bước sau.
Dùng tín dụng Google Cloud (không bắt buộc)
Để tổ chức hội thảo này, bạn cần có một tài khoản thanh toán có tín dụng. Hãy sử dụng tín dụng do người tổ chức hội thảo cung cấp hoặc nếu tín dụng được cung cấp trong biểu ngữ ở đầu lớp học lập trình này để bắt đầu. Nếu đã kết nối với một tài khoản thanh toán, bạn có thể bỏ qua bước này.
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.
- Người dùng mới và người dùng hiện tại có thể bắt đầu với Cloud SQL bằng phiên bản dùng thử miễn phí Cloud SQL
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 Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

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:

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. Trước khi bắt đầu
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 get project
Nếu hàm này trả về một chuỗi trống, hãy đặt chuỗi đó bằng cách:
gcloud config set project [YOUR-PROJECT-ID]
Đặt biến môi trường PROJECT_ID:
PROJECT_ID=$(gcloud config get-value project)
Bật tất cả các API cần thiết:
gcloud services enable 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 phiên bản Cloud SQL cho MySQL
Bạn có thể tạo các thực thể 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.
Bạn có thể bật cờ cloudsql_vector khi tạo một phiên bản. Tính năng hỗ trợ vectơ có trong MySQL 8.0 R20241208.01_00 trở lên
Trong phiên Cloud Shell, hãy thực thi:
gcloud sql instances create my-cloudsql-instance \
--database-version=MYSQL_8_4 \
--tier=db-custom-2-8192 \
--region=us-central1 \
--enable-google-ml-integration \
--edition=ENTERPRISE \
--root-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=root
Kết quả đầu ra dự kiến:
$gcloud sql connect my-cloudsql-instance --user=root Allowlisting your IP for incoming connection for 5 minutes...done. Connecting to database with SQL user [root].Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 71 Server version: 8.4.4-google (Google) Copyright (c) 2000, 2025, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
Thoát khỏi phiên mysql 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:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role="roles/aiplatform.user"
Đọc thêm về cách tạo và định cấu hình phiên bản trong tài liệu Cloud SQL tại đây.
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ư mysql), 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
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.
Cloud Shell sẽ là môi trường chính để bạn kết nối với cơ sở dữ liệu, tạo tất cả các đối tượng và tải dữ liệu.
Thêm IP công khai của Cloud Shell vào danh sách mạng được uỷ quyền cho phiên bản Cloud SQL của chúng tôi.
Trong Cloud Shell, hãy thực thi:
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$(curl ifconfig.me)
Nếu phiên của bạn bị mất, hãy đặt lại hoặc làm việc từ một công cụ khác rồi xuất lại biến CLOUDSQL_PASSWORD:
export CLOUDSQL_PASSWORD=...your password defined for the instance...
Tạo các đối tượng cơ sở dữ liệu bắt buộc. Sử dụng mysql cùng với curl để tải xuống và áp dụng giản đồ từ nguồn công khai.
Trong Cloud Shell, hãy thực thi:
export INSTANCE_IP=$(gcloud sql instances describe my-cloudsql-instance --format="value(ipAddresses.ipAddress)")
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_mysql_schema.sql | mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db
Bảng chi tiết lệnh. Ở bước trước, bạn đã kết nối với cơ sở dữ liệu và chạy tập lệnh SQL để tạo các bảng, chỉ mục và chuỗi.
Tiếp theo, hãy điền dữ liệu cymbal_products vào cơ sở dữ liệu bằng cách chạy curl và mysql:
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_products.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_products FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
Tiếp tục với cymbal_stores.
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_stores.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_stores FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
Và hoàn thành với cymbal_inventory có số lượng của từng sản phẩm trong mỗi cửa hàng.
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_inventory.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_inventory FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
Không bắt buộc: Nếu có tập dữ liệu mẫu riêng, bạn có thể nhập các tệp CSV tương thích bằng công cụ Nhập trong Cloud Console thay thế.
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ơ.
Để lưu trữ dữ liệu vectơ, bạn phải bật chức năng vectơ trong phiên bản Cloud SQL.
Thực thi trong Cloud Shell:
gcloud sql instances patch my-cloudsql-instance \
--database-flags=cloudsql_vector=on
Kết nối với cơ sở dữ liệu:
mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db
Tạo một cột embedding mới trong bảng cymbal_products bằng hàm nhúng. Cột mới đó sẽ chứa các vectơ nhúng dựa trên văn bản trong cột product_description:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) using varbinary;
UPDATE cymbal_products SET embedding = mysql.ml_embedding('text-embedding-005', product_description);
Lưu ý: Quá trình tạo vectơ nhúng cho 2.000 hàng thường mất chưa đến 5 phút.
Thoát khỏi phiên mysql:
exit
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 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.
Tạo người dùng MySQL cho Cloud SQL Studio
Bạn cần có một người dùng cơ sở dữ liệu mới có thể sử dụng Cloud SQL Studio. Tạo một người dùng student thuộc loại tích hợp sẵn bằng mật khẩu giống như mật khẩu bạn đã dùng cho người dùng gốc.
Trong Cloud Shell, hãy thực thi:
gcloud sql users create student --instance=my-cloudsql-instance --password=$CLOUDSQL_PASSWORD --host=%
Khởi động Cloud SQL Studio
- 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.

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

- 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:
student - Mật khẩu:
- Cơ sở dữ liệu:
- Nhấp vào Xác thực.

- Nhấp vào thẻ Untitled query (Truy vấn chưa có tiêu đề) để mở Trình chỉnh sửa SQL.

Chạy truy vấn
Chạy một truy vấn để truy xuất 5 sản phẩm phù hợp nhất với truy vấn của khách hàng: "Ở đây trồng loại cây ăn quả nào thì tốt?"
Chạy truy vấn bằng cosine_distance cho tính năng tìm kiếm vectơ KNN (chính xác)
Sau đây là truy vấn mà bạn có thể chạy để chọn 5 mục đầu tiên phù hợp nhất với yêu cầu của chúng tôi bằng cách sử dụng hàm cosine_distance:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cosine_distance(cp.embedding ,@query_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 5;
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 sql):

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 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set (0.13 sec)
Thời gian thực thi truy vấn là khoảng 0,13 giây với hàm cosine_distance.
Chạy truy vấn bằng approx_distance cho tìm kiếm vectơ KNN (chính xác)
Chạy cùng một truy vấn nhưng sử dụng tìm kiếm KNN bằng hàm approx_distance. Nếu bạn không có chỉ mục ANN cho các mục nhúng, thì hệ thống sẽ tự động chuyển về tìm kiếm chính xác ở chế độ nền:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;
Sau đây là danh sách các sản phẩm do truy vấn trả về.
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set, 1 warning (0.12 sec)
Quá trình thực thi truy vấn chỉ mất 0,12 giây. Chúng ta nhận được kết quả tương tự như hàm cosine_distance chính xác của KNN.
Đọc thêm về hàm này trong tài liệu Cloud SQL cho MySQL
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:
- Tạo tải trọng JSON từ kết quả tìm kiếm vectơ trong Cloud SQL.
- Kiểm thử câu lệnh trong Agent Platform Studio.
- 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:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
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
(approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1)
SELECT json_arrayagg(json_object('product_name',product_name,'description',description,'sale_price',sale_price,'zip_code',zip_code,'product_id',product_id)) FROM trees;
Kết quả đầu ra dự kiến ở định dạng JSON:
[{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}]
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.
- Trong Google Cloud Console, hãy mở Agent Platform Studio.

- Nhập câu lệnh sau vào 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, "produt_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, "produt_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}
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.

- Chạy câu lệnh.

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 SQL
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.
- Đă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
mysql.ml_create_model_registration(
'gemini-3.5-flash',
'https://aiplatform.googleapis.com/v1/projects/<PROJECT_ID>/locations/global/publishers/google/models/gemini-3.5-flash:generateContent',
'google',
'GENERIC',
NULL,
'auth_type_cloudsql_service_agent_iam',
NULL, NULL, NULL, NULL);
Chúng ta 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 doanh nghiệp Gemini để nhận được phản hồi tương tự từ một mô hình tạo sinh bằng cách sử dụng SQL ngay trong cơ sở dữ liệu.
Giờ đây, chúng ta có thể sử dụng kết quả JSON được tạo trong một truy vấn phụ để cung cấp kết quả đó 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 mysql hoặc Cloud SQL Studio đến cơ sở dữ liệu, hãy chạy truy vấn
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
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
(approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1),
prompt AS (
SELECT
CONCAT( '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_arrayagg(json_object('product_name',trees.product_name,'description',trees.description,'sale_price',trees.sale_price,'zip_code',trees.zip_code,'product_id',trees.product_id)) , '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
mysql.ML_PREDICT_ROW('gemini-3.5-flash',
json_object('contents',
json_object('role',
'user',
'parts',
json_array(
json_object('text',
prompt_text))))) AS resp
FROM
prompt)
SELECT
JSON_EXTRACT(resp, '$.candidates[0].content.parts[0].text')
FROM
response;
Sau đây là kết quả mẫu. Kết quả đầu ra của bạn có thể khác, tuỳ thuộc vào phiên bản mô hình và các tham số.:
"Hello there! I'd be happy to help you find the perfect fruit tree for your space. \n\nBased on your area, a wonderful option we currently have in stock is the **Malus Domestica** (the classic Apple Tree)!\n\nHere are the key details:\n\n* **Product Name:** Malus Domestica (Classic Apple Tree)\n* **Price:** $100.00\n\n### Why it's a great choice:\n* **Beautiful Seasonal Foliage:** It features vibrant green leaves during the summer that turn into gorgeous shades of red, orange, and yellow in the autumn. \n* **Shade & Size:** It grows to approximately 30 feet tall, making it a strong, durable tree that offers excellent shade for your yard alongside delicious fresh fruit.\n* **Growing Conditions:** It thrives best in cool, moist climates with well-draining, loamy soil and is ideal for USDA Hardiness Zones 4–8.\n\n### Supplemental Care Tips:\n* **Planting Location:** Choose a spot that gets full sunlight (at least 6 hours a day) to ensure maximum fruit production.\n* **Soil:** Make sure the soil is rich and loamy with good drainage so the roots stay healthy.\n* **Cross-Pollination:** Apple trees often produce a higher yield when planted near another compatible apple tree variety, so if you have extra space, adding a companion tree in the future can boost your harvest!\n\nLet me know if you have any questions about planting or care, or if you'd like help adding this to your cart!"
Đầu ra được cung cấp ở định dạng Markdown.
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 ScaNN
Chúng ta sẽ thử loại chỉ mục ScaNN cho kiểm thử.
Để tạo chỉ mục cho cột nhúng, bạn cần xác định phép đo khoảng cách cho cột nhúng. Bạn có thể đọc thông tin chi tiết về các tham số trong tài liệu.
CREATE VECTOR INDEX cymbal_products_embedding_idx ON cymbal_products(embedding) USING SCANN DISTANCE_MEASURE=COSINE;
So sánh câu trả lời
Chạy lại truy vấn tìm kiếm vectơ và xem kết quả:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;
Kết quả đầu ra dự kiến:
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set (0.08 sec)
Mức cải thiện hiệu suất chỉ khác nhau một chút nhưng điều này nằm trong dự kiến đối với một tập dữ liệu nhỏ như vậy. Điều này sẽ dễ nhận thấy hơn nhiều đối với các tập dữ liệu lớn có hàng triệu vectơ.
Kiểm tra kế hoạch thực thi bằng lệnh EXPLAIN:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
EXPLAIN ANALYZE SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') 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 5;
Kế hoạch thực thi (trích dẫn):
...
-> Nested loop inner join (cost=443 rows=5) (actual time=1.14..1.18 rows=5 loops=1)
-> Vector index scan on cp (cost=441 rows=5) (actual time=1.1..1.1 rows=5 loops=1)
-> Single-row index lookup on cp using PRIMARY (uniq_id=cp.uniq_id) (cost=0.25 rows=1) (actual time=0.0152..0.0152 rows=1 loops=5)
...
Thao tác này cho thấy quá trình quét chỉ mục vectơ trên bảng cp(bí danh cho bảng cymbal_products).
Hãy thử với dữ liệu của riêng bạn hoặc kiểm thử các cụm từ tìm kiếm khác nhau để xem tính năng tìm kiếm ngữ nghĩa hoạt động như thế nào trong MySQL.
11. Dọn dẹp môi trường
Xoá phiên bản Cloud SQL
Huỷ phiên bản Cloud SQL khi bạn hoàn tất lớp học lập trình
Trong cloud shell, hãy xác định dự án và các biến môi trường nếu bạn đã bị ngắt kết nối và mất tất cả các chế độ cài đặt trước đó:
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 trên bảng điều khiể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
Chúc mừng bạn đã hoàn thành lớp học lập trình này.
Lộ trình học tập trên Google Cloud
Phòng thí nghiệm này thuộc Lộ trình học tập về AI sẵn sàng cho hoạt động sản xuất trên Google Cloud.
- Khám phá toàn bộ chương trình học để thu hẹp khoảng cách từ nguyên mẫu đến phát hành công khai.
- Chia sẻ tiến trình của bạn bằng thẻ bắt đầu bằng #
#ProductionReadyAI.
Nội dung bạn đã tìm hiểu
- Cách triển khai một phiên bản Cloud SQL cho MySQL
- Cách tạo cơ sở dữ liệu và bật tính năng tích hợp AI Cloud SQL
- Cách tải dữ liệu vào cơ sở dữ liệu
- Cách sử dụng Cloud SQL Studio
- Cách sử dụng mô hình nhúng Vertex AI trong Cloud SQL
- Cách sử dụng Agent Platform Studio
- Cách làm phong phú kết quả bằng mô hình Nền tảng Tác nhân Gemini Enterprise
- Cách cải thiện hiệu suất bằng chỉ mục vectơ
Hãy thử lớp học lập trình tương tự cho AlloyDB hoặc lớp học lập trình cho Cloud SQL for Postgres
Khảo sát
Kết quả: