Objectif
Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes :
- Utilisez les modèles d'IA générative Gemini Enterprise Agent Platform fournis par Google dans une base de données Spanner.
- Utilisez l'IA générative pour fournir des recommandations de produits personnalisées dans un exemple d'application d'e-commerce.
Coûts
Ce tutoriel fait appel à des composants payants de Google Cloud, y compris :
- Spanner
- Gemini Enterprise Agent Platform
Pour en savoir plus sur les coûts de Spanner, consultez la page Tarifs de Spanner.
Pour en savoir plus sur les coûts liés à Agent Platform, consultez la page Tarifs d'Agent Platform.
Créer le schéma du site Web d'e-commerce
Pour ce tutoriel, nous utilisons le schéma et les données suivants :
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");
Enregistrer un modèle d'IA générative dans un schéma Spanner
Dans ce tutoriel, nous utilisons le modèle text-bison de la plate-forme d'agents pour fournir des recommandations de produits personnalisées aux clients finaux. Pour enregistrer ce modèle dans une base de données Spanner, exécutez l'instruction LDD suivante :
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'
);
Remplacez les éléments suivants :
PROJECT: ID du projetLOCATION: région dans laquelle vous utilisez Agent Platform
La découverte et la validation de schémas ne sont pas disponibles pour les modèles d'IA générative. Par conséquent, vous devez fournir des clauses INPUT et OUTPUT qui correspondent au schéma du modèle. Vous trouverez le schéma complet du modèle text-bison sur la page Documentation de référence de l'API Model d'Agent Platform.
Tant que la base de données et les points de terminaison se trouvent dans le même projet, Spanner devrait accorder automatiquement les autorisations appropriées. Sinon, consultez la section Contrôle des accès aux points de terminaison de modèle de la page de référence CREATE MODEL.
Pour vérifier que le modèle a été correctement enregistré, interrogez-le avec la fonction ML.PREDICT. Le modèle s'attend à une seule colonne STRING nommée prompt. Vous pouvez utiliser une sous-requête Spanner pour générer la colonne prompt. Le modèle TextBison vous oblige à spécifier un paramètre de modèle maxOutputTokens.
Les autres paramètres sont facultatifs. Le modèle text-bison d'Agent Platform ne prend pas en charge le traitement par lot. Vous devez donc utiliser le paramètre @{remote_udf_max_rows_per_rpc=1} pour définir la taille du lot sur 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" |
+--------------------+
Utiliser le modèle TextBison pour répondre aux questions des clients
Les modèles de texte d'IA générative peuvent résoudre un large éventail de problèmes.
Par exemple, un utilisateur peut rechercher des produits sans danger pour les nourrissons sur un site Web d'e-commerce. Avec une seule requête, nous pouvons transmettre leur question au modèle TextBison. Il nous suffit de fournir un contexte pertinent pour la question en récupérant les détails du produit dans la base de données.
REMARQUE : Certaines réponses du modèle ont été modifiées pour être plus concises.
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. [...]" |
+------------+-----------------+--------------------------------------------------------------------------------------------------+
Vous pouvez remplacer le littéral de la question par un paramètre de requête, tel que @UserQuestion, si vous souhaitez remplir directement le paramètre avec une question client. Le client bénéficie ainsi d'une expérience d'achat en ligne optimisée par l'IA.
Proposer des recommandations de produits personnalisées aux clients
En plus des détails du produit, nous pouvons également ajouter des informations sur le client à prompt. Cela permet au modèle de prendre en compte les préférences des utilisateurs afin de fournir des recommandations de produits entièrement personnalisées.
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" |
+------------+-----------------+-------------+
Pour trouver un cadeau pour son enfant, l'utilisateur peut créer un profil pour son adolescent et voir une autre liste de recommandations :
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" |
+------------+-----------------+---------+
Vous pouvez ajouter l'historique des achats ou d'autres informations pertinentes à la requête pour offrir au client une expérience plus personnalisée.
L'intégration de Spanner Agent Platform vous aide à assembler des requêtes complexes contenant des données en direct et à les utiliser pour créer des applications optimisées par l'IA.