Tujuan
Dalam tutorial ini, Anda akan mempelajari cara:
- Menggunakan model AI Generatif Vertex AI yang disediakan Google di database Spanner.
- Gunakan AI Generatif untuk memberikan rekomendasi produk yang dipersonalisasi dalam contoh aplikasi e-commerce.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:
- Spanner
- Vertex AI
Untuk mengetahui informasi selengkapnya tentang biaya Spanner, lihat halaman Harga Spanner.
Untuk mengetahui informasi selengkapnya tentang biaya Vertex AI, lihat halaman harga Vertex AI.
Membuat skema situs e-commerce
Untuk tutorial ini, kita menggunakan skema dan data berikut:
CREATE TABLE Products (
id INT64,
name STRING(MAX),
description STRING(MAX),
category_id INT64,
) PRIMARY KEY(id);
CREATE TABLE Categories (
id INT64,
name STRING(MAX)
) PRIMARY KEY(id);
CREATE TABLE Users (
id INT64,
age INT64,
likes STRING(MAX)
) PRIMARY KEY(id);
INSERT INTO Categories (id, name) VALUES
(1, "Toys"),
(2, "Tools");
INSERT INTO Products (id, name, description, category_id) VALUES
(1, "Plush Bear", "Really fluffy. Safe for infants.", 1),
(2, "Bike", "Bike for teenagers.", 1),
(3, "Drill", "Cordless.", 2);
INSERT INTO Users (id, age, likes) VALUES
(1, 30, "DIY"),
(2, 14, "Toys");
Mendaftarkan model AI Generatif dalam skema Spanner
Dalam tutorial ini, kita menggunakan model text-bison Vertex AI untuk memberikan rekomendasi produk yang dipersonalisasi kepada pelanggan akhir. Untuk mendaftarkan model ini di database Spanner, jalankan pernyataan DDL berikut:
CREATE MODEL TextBison
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE
OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/text-bison'
);
Ganti kode berikut:
PROJECT
: the project IDLOCATION
: region tempat Anda menggunakan Vertex AI
Penemuan dan validasi skema tidak tersedia untuk model AI
Generatif. Oleh karena itu, Anda harus memberikan klausa INPUT
dan OUTPUT
yang
cocok dengan skema model. Anda dapat menemukan skema lengkap model text-bison
di halaman Referensi Model API Vertex AI.
Selama database dan endpoint berada dalam project yang sama,
Spanner akan otomatis memberikan izin yang sesuai. Jika tidak, tinjau bagian
kontrol akses endpoint model
di halaman referensi CREATE MODEL
.
Untuk memverifikasi bahwa model terdaftar dengan benar, buat kueri dengan fungsi ML.PREDICT. Model mengharapkan satu kolom STRING
bernama prompt
. Anda dapat menggunakan
subkueri Spanner
untuk membuat kolom prompt
. Model TextBison
memerlukan Anda untuk menentukan parameter model maxOutputTokens
.
Parameter lainnya bersifat opsional. Model text-bison
Vertex AI tidak mendukung pengelompokan, sehingga Anda harus menggunakan
parameter @{remote_udf_max_rows_per_rpc=1}
untuk menetapkan ukuran batch ke 1.
SELECT content
FROM ML.PREDICT(
MODEL TextBison,
(SELECT "Is 13 prime?" AS prompt),
STRUCT(256 AS maxOutputTokens, 0.2 AS temperature, 40 as topK, 0.95 AS topP)
) @{remote_udf_max_rows_per_rpc=1};
+--------------------+
| content |
+--------------------+
| "Yes, 13 is prime" |
+--------------------+
Menggunakan Model TextBison
untuk menjawab pertanyaan pelanggan
Model teks AI generatif dapat menyelesaikan berbagai masalah.
Misalnya, pengguna di situs e-commerce mungkin menjelajahi
produk yang aman untuk bayi. Dengan satu kueri, kita dapat
meneruskan pertanyaan mereka ke model TextBison
. Yang perlu kita lakukan adalah
memberikan konteks yang relevan untuk pertanyaan dengan mengambil detail produk
dari database.
CATATAN: Beberapa jawaban model telah diedit agar lebih ringkas.
SELECT product_id, product_name, content
FROM ML.PREDICT(
MODEL TextBison,
(SELECT
product.id as product_id,
product.name as product_name,
CONCAT("Is this product safe for infants?", "\n",
"Product Name: ", product.name, "\n",
"Category Name: ", category.name, "\n",
"Product Description:", product.description) AS prompt
FROM
Products AS product JOIN Categories AS category
ON product.category_id = category.id),
STRUCT(100 AS maxOutputTokens)
) @{remote_udf_max_rows_per_rpc=1};
-- The model correctly recommends a Plush Bear as safe for infants.
-- Other products are not safe and the model provides justification why.
+------------+-----------------+--------------------------------------------------------------------------------------------------+
| product_id | product_name | content |
+------------+-----------------+--------------------------------------------------------------------------------------------------+
| 1 | "Plush Bear" | "Yes, this product is infant safe. [...] " |
| | | "The product description says that the product is safe for infants. [...]" |
+------------+-----------------+--------------------------------------------------------------------------------------------------+
| 2 | "Bike" | "No, this product is not infant safe. [...] " |
| | | "It is not safe for infants because it is too big and heavy for them to use. [...]" |
+------------+-----------------+--------------------------------------------------------------------------------------------------+
| 3 | "Drill" | "No, this product is not infant safe. [...]" |
| | | " If an infant were to grab the drill, they could pull it on themselves and cause injury. [...]" |
+------------+-----------------+--------------------------------------------------------------------------------------------------+
Anda dapat mengganti literal pertanyaan dengan parameter kueri, seperti
@UserQuestion
, jika ingin langsung mengisi parameter dengan
pertanyaan pelanggan. Hal ini memberi pelanggan pengalaman belanja online
yang didukung AI.
Memberikan rekomendasi produk yang dipersonalisasi kepada pelanggan
Selain detail produk, kita juga dapat menambahkan informasi tentang
pelanggan ke prompt
. Hal ini memungkinkan model mempertimbangkan
preferensi pengguna sehingga dapat memberikan rekomendasi produk yang sepenuhnya dipersonalisasi.
SELECT product_id, product_name, content
FROM ML.PREDICT(
MODEL TextBison,
(SELECT
product.id as product_id,
product.name as product_name,
CONCAT(
"Answer with YES or NO only: Is this a good fit for me?",
"My age:", CAST(user.age AS STRING), "\n",
"I like:", user.likes, "\n",
"Product name: ", product.name, "\n",
"Category mame: ", category.name, "\n",
"Product description:", product.description) AS prompt,
FROM
Products AS product
JOIN Categories AS category ON product.category_id = category.id
JOIN Users AS user ON user.id = 1),
STRUCT(256 AS maxOutputTokens)
) @{remote_udf_max_rows_per_rpc=1};
-- The model correctly guessed that the user might be interested in a Drill
-- as they are interested in DIY.
+------------+-----------------+-------------+
| product_id | product_name | content |
+------------+-----------------+-------------+
| 1 | "Plush Bear" | "NO" |
+------------+-----------------+-------------+
| 2 | "Bike" | "NO" |
+------------+-----------------+-------------+
| 3 | "Drill" | "YES" |
+------------+-----------------+-------------+
Untuk mencari hadiah bagi anaknya, pengguna dapat membuat profil untuk remajanya dan melihat daftar rekomendasi yang berbeda:
SELECT product_id, product_name, content
FROM ML.PREDICT(
MODEL TextBison,
(SELECT
product.id as product_id,
product.name as product_name,
CONCAT(
"Answer with YES or NO only: Is this a good fit for me?",
"\nMy's age:", CAST(user.age AS STRING),
"\nI like:", user.likes,
"\nProduct Name: ", product.name,
"\nCategory Name: ", category.name,
"\nProduct Description:", product.description) AS prompt,
FROM
Products AS product
JOIN Categories AS category ON product.category_id = category.id
JOIN Users AS user ON user.id = 2),
STRUCT(40 AS maxOutputTokens)
) @{remote_udf_max_rows_per_rpc=1};
-- The model correctly guesses that a teenager is interested in a Bike,
-- but not a plush bear for infants or spicy peppers.
+------------+-----------------+---------+
| product_id | product_name | content |
+------------+-----------------+---------+
| 1 | "Plush Bear" | "NO" |
+------------+-----------------+---------+
| 2 | "Bike" | "YES" |
+------------+-----------------+---------+
| 3 | "Spicy peppers" | "NO" |
+------------+-----------------+---------+
Anda dapat menambahkan histori pembelian atau detail relevan lainnya ke perintah untuk memberikan pengalaman yang lebih disesuaikan kepada pelanggan.
Integrasi Vertex AI Spanner membantu Anda menyusun perintah kompleks yang berisi data langsung dan menggunakannya untuk membuat aplikasi yang mendukung AI.