Mit generativer KI personalisierte Empfehlungen in einer E-Commerce-Anwendung erhalten

Ziel

In dieser Anleitung erfahren Sie mehr über die folgenden Themen:

  • Von Google bereitgestellte Vertex AI-Modelle für generative KI in einer Spanner-Datenbank verwenden.
  • Verwenden Sie generative KI, um in einer E-Commerce-Beispielanwendung personalisierte Produktempfehlungen bereitzustellen.

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Spanner
  • Vertex AI

Weitere Informationen zu den Spanner-Kosten finden Sie in der Seite Spanner-Preise.

Weitere Informationen zu den Kosten von Vertex AI finden Sie in den Seite Vertex AI – Preise.

E-Commerce-Websiteschema erstellen

Für diese Anleitung verwenden wir das folgende Schema und die folgenden Daten:

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

Generative-AI-Modell in einem Spanner-Schema registrieren

In dieser Anleitung verwenden wir Vertex AI Modell text-bison um Endkunden personalisierte Produktempfehlungen zu bieten. Um dieses Modell in einer Spanner-Datenbank zu registrieren, execute Sie die folgende DDL-Anweisung:

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

Ersetzen Sie Folgendes:

  • PROJECT: die Projekt-ID
  • LOCATION: Region, in der Sie Vertex AI verwenden

Schemaerkennung und -validierung ist für Generative AI nicht verfügbar Modelle. Daher müssen Sie die Klauseln INPUT und OUTPUT angeben, mit dem Schema des Modells übereinstimmen. Das vollständige Schema von text-bison finden Sie Vertex AI-Modell Referenzseite der Model API.

Solange sich die Datenbank und die Endpunkte im selben Projekt befinden, Spanner sollte die entsprechenden Berechtigungen gewähren automatisch. Andernfalls lesen Sie die Abschnitt Modell-Endpunkt-Zugriffssteuerung der CREATE MODEL-Referenzseite.

Um zu überprüfen, ob das Modell korrekt registriert wurde, fragen Sie es mit dem ML.PREDICT-Funktion. Das Modell erwartet eine STRING-Spalte mit dem Namen prompt. Sie können einen Spanner-Unterabfrage um die Spalte prompt zu generieren. Das Modell TextBison erfordert die Angabe eines maxOutputTokens-Modellparameters. Andere Parameter sind optional. Vertex AI Das Modell text-bison unterstützt keine Batchverarbeitung, daher müssen Sie die Methode Parameter @{remote_udf_max_rows_per_rpc=1}, um die Batchgröße auf 1 festzulegen.

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

Verwenden Sie das Modell TextBison, um Kundenfragen zu beantworten

Textmodelle mit generativer KI können eine Vielzahl von Problemen lösen. Beispiel: Ein Nutzer einer E-Commerce-Website die für Kleinkinder sicher sind. Mit einer einzigen Abfrage seine Frage an das TextBison-Modell übergeben. Alles, was wir tun müssen, Produktdetails abrufen, um relevanten Kontext für die Frage bereitzustellen aus der Datenbank.

HINWEIS: Einige Modellantworten wurden der Einfachheit halber geändert.

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

Sie können das Frageliteral durch einen Suchparameter ersetzen, z. B. @UserQuestion, wenn Sie den Parameter direkt mit einem Kundenfrage. So erhält der Kunde KI-basierte Shopping-Erlebnis.

Personalisierte Produktempfehlungen für Kunden bereitstellen

Zusätzlich zu den Produktdetails können wir auch Informationen Kunden an prompt. So kann das Modell die Nutzerpräferenzen berücksichtigen, damit es vollständig personalisierte Produktempfehlungen geben kann.

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

Wenn der Nutzer nach einem Geschenk für sein Kind suchen möchte, kann er ein Profil für sein Kind erstellen und eine andere Liste mit Empfehlungen sehen:

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

Sie können bisherige Käufe oder andere relevante Details hinzufügen, um der Kundschaft eine individuellere Erfahrung.

Mit der Einbindung von Spanner Vertex AI können Sie komplexe Prompts mit Live-Daten erstellen und nutzen sie, um KI-gestützte Anwendungen zu erstellen.