Usa la IA generativa para obtener recomendaciones personalizadas en una aplicación de comercio electrónico

Objetivo

En este instructivo, aprenderás a realizar lo siguiente:

  • Usar los modelos de IA generativa de Vertex AI que proporciona Google en una base de datos de Spanner
  • Usar la IA generativa para proporcionar recomendaciones de productos personalizadas en una aplicación de comercio electrónico de muestra

Costos

En este instructivo, se usan componentes facturables de Google Cloud, que incluyen lo siguiente:

  • Spanner
  • Vertex AI

Para obtener más información sobre los costos de Spanner, consulta la página Precios de Spanner.

Para obtener más información sobre los costos de Vertex AI, consulta la página Precios de Vertex AI.

Crea el esquema del sitio web de comercio electrónico

Para este instructivo, usamos el esquema y los datos siguientes:

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");

Registra un modelo de IA generativa en un esquema de Spanner

En este instructivo, usamos Vertex AI Modelo text-bison para brindar recomendaciones de productos personalizadas a los clientes finales. Para registrar este modelo en una base de datos de Spanner, ejecuta la siguiente instrucción de DDL:

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'
);

Reemplaza lo siguiente:

  • PROJECT: El ID del proyecto
  • LOCATION: La región en la que usas Vertex AI

El descubrimiento y la validación de esquemas no están disponibles para los modelos de IA generativa. Por lo tanto, debes proporcionar cláusulas INPUT y OUTPUT que coincidan con el esquema del modelo. Puedes encontrar el esquema completo del modelo text-bison en la página Referencia de la API del modelo de Vertex AI.

Siempre que la base de datos y los extremos estén en el mismo proyecto, Spanner debe otorgar los permisos adecuados automáticamente. De lo contrario, consulta el Sección del control de acceso al extremo del modelo de la página de referencia de CREATE MODEL.

Para verificar que el modelo se haya registrado correctamente, consúltalo con la función ML.PREDICT. El modelo espera un solo STRING columna llamada prompt. Puedes usar un Subconsulta de Spanner para generar la columna prompt. El modelo TextBison requiere que especifiques un parámetro del modelo maxOutputTokens. Otros parámetros son opcionales. Vertex AI El modelo text-bison no admite el procesamiento por lotes, por lo que debes usar la El parámetro @{remote_udf_max_rows_per_rpc=1} para establecer el tamaño del lote en 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" |
 -------------------- 

Usa el modelo de TextBison para responder las preguntas de los clientes

Los modelos de texto de la IA generativa pueden resolver una amplia variedad de problemas. Por ejemplo, un usuario en un sitio web de comercio electrónico podría estar buscando productos que sean seguros para bebés. Con una sola consulta, podemos pasar la pregunta al modelo TextBison. Lo único que tenemos que hacer es Recuperar los detalles del producto para proporcionar el contexto relevante para la pregunta de la base de datos.

NOTA: Algunas respuestas de los modelos se editaron para que sean más breves.

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. [...]" |
 ------------ ----------------- -------------------------------------------------------------------------------------------------- 

Puedes reemplazar el literal de la pregunta con un parámetro de consulta, como @UserQuestion, si deseas propagar directamente el parámetro con un la pregunta de un cliente. Esto le brinda al cliente una experiencia de compra en línea potenciada por IA.

Brinda recomendaciones de productos personalizadas a los clientes.

Además de los detalles del producto, también podemos agregar información sobre el cliente a prompt. Esto permite que el modelo tenga en cuenta las preferencias del usuario para que pueda proporcionar recomendaciones de productos completamente personalizadas.

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

Para buscar un regalo para su hijo o hija, el usuario puede crear un perfil para su hijo o hija adolescente y ver una lista diferente de recomendaciones:

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

Puedes agregar el historial de compras o cualquier otro detalle relevante a la instrucción para brindarle al cliente una experiencia más personalizada.

La integración de Vertex AI en Spanner te ayuda a compilar instrucciones complejas que contienen datos en vivo y usarlas para compilar aplicaciones habilitadas para IA.