Objetivo
Neste tutorial, vai aprender a:
- Use modelos de IA generativa da Vertex AI fornecidos pela Google numa base de dados do Spanner.
- Use a IA generativa para fornecer recomendações de produtos personalizadas numa aplicação de comércio eletrónico de exemplo.
Custos
Este tutorial usa componentes faturáveis do Google Cloud, incluindo:
- Spanner
- Vertex AI
Para mais informações sobre os custos do Spanner, consulte a página de preços do Spanner.
Para mais informações sobre os custos do Vertex AI, consulte a página de preços do Vertex AI.
Crie o esquema do Website de comércio eletrónico
Para este tutorial, usamos o seguinte esquema e dados:
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");
Registe um modelo de IA generativa num esquema do Spanner
Neste tutorial, usamos o modelo text-bison do Vertex AI para fornecer recomendações de produtos personalizadas aos clientes finais. Para registar este modelo numa base de dados do Spanner, execute a seguinte declaração 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'
);
Substitua o seguinte:
PROJECT: o ID do projetoLOCATION: a região onde está a usar o Vertex AI
A descoberta e a validação de esquemas não estão disponíveis para modelos de IA generativa. Por conseguinte, tem de fornecer cláusulas INPUT e OUTPUT que correspondam ao esquema do modelo. Pode encontrar o esquema completo do text-bison
modelo na página de referência da API Model do Vertex AI.
Desde que a base de dados e os pontos finais estejam no mesmo projeto, o Spanner deve conceder automaticamente as autorizações adequadas. Caso contrário, reveja a secção
Controlo de acesso do ponto final do modelo
da página de referência CREATE MODEL.
Para verificar se o modelo foi registado corretamente, consulte-o com a função ML.PREDICT. O modelo espera uma única coluna STRING com o nome prompt. Pode usar uma
subconsulta do Spanner
para gerar a coluna prompt. O modelo TextBison requer que especifique um parâmetro de modelo maxOutputTokens.
Outros parâmetros são opcionais. O modelo da Vertex AI
text-bison não suporta o processamento em lote, pelo que tem de usar o parâmetro
@{remote_udf_max_rows_per_rpc=1} para definir o tamanho do lote como 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" |
+--------------------+
Use o TextBison modelo para responder a perguntas dos clientes
Os modelos de texto de IA generativa podem resolver uma grande variedade de problemas.
Por exemplo, um utilizador num Website de comércio eletrónico pode estar a procurar produtos seguros para bebés. Com uma única consulta, podemos
transmitir a pergunta ao modelo TextBison. Tudo o que temos de fazer é fornecer contexto relevante para a pergunta, obtendo detalhes do produto a partir da base de dados.
NOTA: algumas respostas modelo foram editadas para serem mais concisas.
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" |