Tujuan
Dalam tutorial ini, Anda akan mempelajari cara:
- Menggunakan model Generative AI Vertex AI yang disediakan Google dalam 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 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, kami menggunakan model text-bison Vertex AI untuk memberikan rekomendasi produk yang dipersonalisasi kepada pelanggan akhir. Untuk mendaftarkan model ini dalam database Spanner, execute 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
: wilayah tempat Anda menggunakan Vertex AI
Penemuan dan validasi skema tidak tersedia untuk model
AI Generatif. Oleh karena itu, Anda harus menyediakan 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 memberikan izin yang sesuai secara otomatis. 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 ini mengharapkan satu kolom
STRING
bernama prompt
. Anda dapat menggunakan
subkueri Spanner
untuk menghasilkan kolom prompt
. Model TextBison
mengharuskan Anda 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" |
+--------------------+
Gunakan Model TextBison
untuk menjawab pertanyaan pelanggan
Model teks AI generatif dapat memecahkan beragam masalah.
Misalnya, pengguna di situs e-commerce mungkin menjelajahi produk yang aman untuk bayi. Dengan satu kueri, kita dapat meneruskan pertanyaannya ke model TextBison
. Yang perlu kita lakukan adalah
memberikan konteks yang relevan untuk pertanyaan dengan mengambil detail produk
dari database.
CATATAN: Beberapa jawaban model diedit agar singkat.
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 untuk anak mereka, pengguna dapat membuat profil untuk anak remaja mereka 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 dialog untuk memberikan pengalaman yang lebih disesuaikan kepada pelanggan.
Integrasi dengan Vertex AI Spanner membantu Anda menyusun perintah kompleks yang berisi data live dan menggunakannya untuk membangun aplikasi yang didukung AI.