1. Introdução
Neste codelab, você vai aprender a usar a integração de IA do Cloud SQL para MySQL na pesquisa semântica usando embeddings e como melhorar a performance usando um índice nos dados de vetor.

Pré-requisitos
- Conhecimento básico do Google Cloud e do console do Google Cloud
- Experiência básica com a interface de linha de comando e o Cloud Shell
O que você vai aprender
- Como implantar uma instância do Cloud SQL para MySQL
- Como criar um banco de dados e ativar a integração da IA do Cloud SQL
- Como carregar dados no banco de dados
- Como usar o Cloud SQL Studio
- Como usar o modelo de embedding da Vertex AI no Cloud SQL
- Como usar o Agent Platform Studio
- Como enriquecer o resultado usando um modelo da Gemini Enterprise Agent Platform
- Como melhorar a performance usando o índice de vetor
O que é necessário
- Uma conta e um projeto do Google Cloud
- Um navegador da web, como o Chrome
2. Configuração e requisitos
Configuração do projeto
- Faça login no Console do Google Cloud. Se você ainda não tiver uma conta do Gmail ou do Google Workspace, crie uma Conta do Google.
Use uma conta pessoal em vez de uma conta escolar ou de trabalho.
- Crie um projeto ou reutilize um existente. Para criar um projeto no console do Google Cloud, clique em Selecionar um projeto na barra de ferramentas.

Na janela "Selecionar um projeto", clique no botão "Novo projeto", que vai abrir uma caixa de diálogo para o novo projeto.

Na caixa de diálogo, insira um Nome do projeto e selecione o Local.

- O Nome do projeto é o nome de exibição para os participantes do projeto. O nome do projeto não é usado pelas APIs do Google e pode ser alterado a qualquer momento.
- O ID do projeto é exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Google Cloud gera automaticamente um ID exclusivo, mas é possível personalizá-lo. Se você não gostar do ID gerado, crie outro aleatório ou forneça o seu para verificar a disponibilidade. Na maioria dos codelabs, você faz referência ao ID do projeto, que normalmente é identificado com o marcador de posição
. - Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação Como criar e gerenciar projetos.
Ativar faturamento
Para ativar o faturamento, você tem duas opções. Você pode usar sua conta de faturamento pessoal ou resgatar créditos seguindo estas etapas.
Resgatar créditos do Google Cloud (opcional)
Para fazer este workshop, você precisa de uma conta de faturamento com crédito. Use os créditos fornecidos pelos organizadores do workshop ou no banner na parte de cima deste codelab para começar. Se você já estiver conectado a uma conta de faturamento, pule esta etapa.
Configurar uma conta de faturamento pessoal
Se você configurou o faturamento usando créditos do Google Cloud, pule esta etapa.
Para configurar uma conta de faturamento pessoal, ative o faturamento no console do Google Cloud Billing.
Observações:
- A conclusão deste laboratório custa menos de US $5 em recursos do Google Cloud.
- Siga as etapas no final deste laboratório para excluir recursos e evitar mais cobranças.
- Novos usuários podem aproveitar o teste sem custo financeiro de US$300.
- Usuários novos e atuais podem começar a usar o Cloud SQL com a instância de teste sem custo financeiro do Cloud SQL.
Inicie o Cloud Shell
Embora seja possível operar o Google Cloud remotamente do seu computador, neste codelab você vai usar o Google Cloud Shell, um ambiente de linha de comando executado na nuvem.
No console do Google Cloud, clique no ícone do Cloud Shell na barra de ferramentas superior à direita:

Como alternativa, pressione g e s no console do Google Cloud ou abra o Cloud Shell.
O provisionamento e a conexão com o ambiente levam apenas alguns instantes. Quando o processo for concluído, você verá o terminal conectado:

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB e é executada no Google Cloud, aprimorando o desempenho e a autenticação da rede. Neste codelab, todo o trabalho pode ser feito com um navegador.
3. Antes de começar
Ativar API
Para usar o Cloud SQL, o Compute Engine, o Service Networking e a Gemini Enterprise Agent Platform, ative as respectivas APIs no seu projeto do Google Cloud.
No terminal do Cloud Shell, verifique se o ID do projeto está definido:
gcloud config get project
Se ele retornar uma string vazia, defina-o com:
gcloud config set project [YOUR-PROJECT-ID]
Defina a variável de ambiente PROJECT_ID:
PROJECT_ID=$(gcloud config get-value project)
Ative todas as APIs necessárias:
gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Resultado esperado
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
Leia sobre cada API ativada na documentação.
4. Criar uma instância do Cloud SQL
Crie uma instância do Cloud SQL com a integração do banco de dados da Gemini Enterprise Agent Platform.
Criar senha do banco de dados
Defina uma senha para o usuário padrão do banco de dados. Você pode definir sua própria senha ou usar uma função aleatória para gerar uma:
export CLOUDSQL_PASSWORD=`openssl rand -hex 16`
Mostre o valor da senha gerada:
echo $CLOUDSQL_PASSWORD
Anote a senha gerada para usar depois.
Criar uma instância do Cloud SQL para MySQL
As instâncias do Cloud SQL podem ser criadas usando vários métodos, incluindo o console do Google Cloud, o Terraform ou a CLI do Google Cloud (gcloud). Neste codelab, você vai usar gcloud. Para saber como criar uma instância com outras ferramentas, consulte a documentação Criar instâncias.
A flag cloudsql_vector pode ser ativada ao criar uma instância. O suporte a vetores está disponível para MySQL 8.0 R20241208.01_00 ou mais recente
Na sessão do Cloud Shell, execute:
gcloud sql instances create my-cloudsql-instance \
--database-version=MYSQL_8_4 \
--tier=db-custom-2-8192 \
--region=us-central1 \
--enable-google-ml-integration \
--edition=ENTERPRISE \
--root-password=$CLOUDSQL_PASSWORD
Conecte-se à instância usando gcloud sql connect. Quando solicitado, digite a senha:
gcloud sql connect my-cloudsql-instance --user=root
A saída esperada:
$gcloud sql connect my-cloudsql-instance --user=root Allowlisting your IP for incoming connection for 5 minutes...done. Connecting to database with SQL user [root].Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 71 Server version: 8.4.4-google (Google) Copyright (c) 2000, 2025, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
Saia da sessão mysql pressionando Ctrl+D ou inserindo exit:
exit
Ativar a integração com a Gemini Enterprise Agent Platform
Conceda o papel do IAM necessário à conta de serviço do Cloud SQL para ativar a integração da Gemini Enterprise Agent Platform.
Recupere o e-mail da conta de serviço do Cloud SQL e exporte-o como uma variável de ambiente:
SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe my-cloudsql-instance --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL
Conceda o papel roles/aiplatform.user à conta de serviço do Cloud SQL:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role="roles/aiplatform.user"
Leia mais sobre a criação e configuração de instâncias aqui na documentação do Cloud SQL.
5. Preparar banco de dados
Crie um banco de dados e ative o suporte a vetores.
Criar banco de dados
Crie um banco de dados chamado quickstart_db. É possível criar bancos de dados usando clientes de banco de dados (como mysql), a CLI do Google Cloud ou o Cloud SQL Studio. Nesta etapa, use gcloud.
No Cloud Shell, execute o seguinte comando para criar o banco de dados:
gcloud sql databases create quickstart_db --instance=my-cloudsql-instance
6. Carregar dados
Crie tabelas no banco de dados e carregue dados usando arquivos de conjunto de dados fictícios da Cymbal Store armazenados em um bucket público do Cloud Storage no formato CSV.
O Cloud Shell será seu ambiente principal para se conectar a um banco de dados, criar todos os objetos e carregar os dados.
Adicione o IP público do Cloud Shell à lista de redes autorizadas da instância do Cloud SQL.
No Cloud Shell, execute:
gcloud sql instances patch my-cloudsql-instance --authorized-networks=$(curl ifconfig.me)
Se a sessão for perdida, redefina ou trabalhe em outra ferramenta e exporte a variável CLOUDSQL_PASSWORD novamente:
export CLOUDSQL_PASSWORD=...your password defined for the instance...
Crie os objetos de banco de dados necessários. Use mysql com curl para baixar e aplicar o esquema da fonte pública.
No Cloud Shell, execute:
export INSTANCE_IP=$(gcloud sql instances describe my-cloudsql-instance --format="value(ipAddresses.ipAddress)")
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_mysql_schema.sql | mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db
Detalhamento do comando. Na etapa anterior, você se conectou ao banco de dados e executou o script SQL para criar tabelas, índices e sequências.
Em seguida, preencha o banco de dados com dados cymbal_products executando curl e mysql:
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_products.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_products FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
Continue com cymbal_stores.
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_stores.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_stores FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
e complete com cymbal_inventory, que tem o número de cada produto em cada loja.
curl -LJ https://raw.githubusercontent.com/GoogleCloudPlatform/devrel-demos/main/infrastructure/cymbal-store-embeddings/cymbal_inventory.csv | mysql --enable-local-infile --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE cymbal_inventory FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
Opcional: se você tiver seu próprio conjunto de dados de amostra, importe arquivos CSV compatíveis usando a ferramenta de importação no console do Google Cloud.
7. Criar embeddings
Crie embeddings para as descrições de produtos usando o modelo text-embedding-005 da Gemini Enterprise Agent Platform e armazene-os como dados vetoriais.
Para armazenar os dados de vetor, é preciso ativar a funcionalidade de vetor na instância do Cloud SQL.
Execute no Cloud Shell:
gcloud sql instances patch my-cloudsql-instance \
--database-flags=cloudsql_vector=on
Conecte-se ao banco de dados:
mysql --host=$INSTANCE_IP --user=root --password=$CLOUDSQL_PASSWORD quickstart_db
Crie uma coluna embedding na tabela "cymbal_products" usando a função de embedding. Essa nova coluna vai conter os embeddings de vetor com base no texto da coluna product_description:
ALTER TABLE cymbal_products ADD COLUMN embedding vector(768) using varbinary;
UPDATE cymbal_products SET embedding = mysql.ml_embedding('text-embedding-005', product_description);
Observação: a geração de incorporações para 2.000 linhas geralmente termina em menos de 5 minutos.
Saia da sessão mysql:
exit
8. Executar pesquisa de similaridade
Faça uma pesquisa de similaridade comparando os embeddings de vetores calculados para descrições de produtos com o embedding de uma consulta de pesquisa.
Você pode executar consultas SQL na linha de comando ou no Cloud SQL Studio. O Cloud SQL Studio oferece uma maneira mais conveniente de editar e executar instruções SQL longas com várias linhas na saída.
Criar um usuário do MySQL para o Cloud SQL Studio
Você precisa de um novo usuário de banco de dados que possa usar o Cloud SQL Studio. Crie um usuário do tipo integrado student com a mesma senha usada para o usuário raiz.
No Cloud Shell, execute:
gcloud sql users create student --instance=my-cloudsql-instance --password=$CLOUDSQL_PASSWORD --host=%
Iniciar o Cloud SQL Studio
- No console do Google Cloud, acesse Instâncias do Cloud SQL e clique em
my-cloudsql-instance.

- No menu de navegação, clique em Cloud SQL Studio.

- Na caixa de diálogo de autenticação, insira o nome do banco de dados e as credenciais:
- Banco de dados:
quickstart_db - Usuário:
student - Senha:
- Banco de dados:
- Clique em Autenticar.

- Clique na guia Consulta sem título para abrir o SQL Editor.

Executar consulta
Execute uma consulta para recuperar os cinco produtos mais relevantes para a consulta do cliente: "Que tipo de árvores frutíferas crescem bem aqui?"
Executar consulta com cosine_distance para pesquisa de vetor KNN (exata)
Esta é a consulta que você pode executar para escolher os cinco primeiros itens mais adequados à nossa solicitação usando a função "cosine_distance":
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cosine_distance(cp.embedding ,@query_vector) as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 5;
No Cloud SQL Studio, insira a consulta e clique em Executar ou execute a consulta na sua sessão do sql:

A consulta retorna produtos correspondentes ordenados por distância do cosseno:
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set (0.13 sec)
O tempo de execução da consulta é de aproximadamente 0,13 segundo com a função "cosine_distance".
Executar consulta com approx_distance para pesquisa de vetor KNN (exata)
Execute a mesma consulta, mas usando a pesquisa de KNN com a função approx_distance. Se você não tiver um índice de rede neural artificial (ANN) para seus embeddings, o sistema vai voltar automaticamente para a pesquisa exata nos bastidores:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 5;
Confira uma lista de produtos retornados pela consulta.
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set, 1 warning (0.12 sec)
A execução da consulta levou apenas 0,12 segundo. Tivemos os mesmos resultados da função KNN exata cosine_distance.
Leia mais sobre a função na documentação do Cloud SQL para MySQL.
9. Melhorar a resposta do LLM usando dados extraídos
Melhorar a resposta da IA generativa a um aplicativo cliente transmitindo resultados de consulta como contexto embasado em um comando para um modelo de linguagem de fundação da Gemini Enterprise Agent Platform.
Para fazer isso:
- Gere um payload JSON com o resultado da pesquisa vetorial no Cloud SQL.
- Teste o comando no Agent Platform Studio.
- Execute o comando de ponta a ponta diretamente do SQL usando a integração do
google_ml.
Gerar saída no formato JSON
Modifique a consulta para formatar o resultado como JSON e retornar uma linha:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
WITH trees as (
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
cp.uniq_id as product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1)
SELECT json_arrayagg(json_object('product_name',product_name,'description',description,'sale_price',sale_price,'zip_code',zip_code,'product_id',product_id)) FROM trees;
Saída JSON esperada:
[{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}]
Executar o comando no Agent Platform Studio
Forneça o JSON gerado como contexto em um comando para um modelo generativo no Agent Platform Studio.
- No console do Google Cloud, abra o Agent Platform Studio.

- Insira o seguinte comando no Agent Platform Studio:

You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
<JSON_OUTPUT>
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.
Substitua pela resposta JSON da sua consulta:
You are a friendly advisor helping to find a product based on the customer's needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","description":"some description","sale_price":10,"zip_code": 10234, "produt_id": "02056727942aeb714dc9a2313654e1b0"}
Here is the list of products:
{"zip_code": 93230, "product_id": "23e41a71d63d8bbc9bdfa1d118cfddc5", "sale_price": 100.00, "description": "Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo", "product_name": "Malus Domestica"}
The customer asked "What tree is growing the best here?"
You should give information about the product, price and some supplemental information.
Do not ask any additional questions and assume location based on the zip code provided in the list of products.

- Execute o comando.

A resposta inclui preço, descrição e informações complementares que o modelo recebe de fontes externas com base em informações sobre a árvore e o local.
Executar o comando em SQL
Também é possível usar a integração da IA do Cloud SQL com a Gemini Enterprise Agent Platform para receber respostas de um modelo generativo diretamente no SQL.
Primeiro, registre o modelo.
- Registre o modelo
gemini-3.5-flashpara gerar respostas (substituapelo ID do projeto):
CALL
mysql.ml_create_model_registration(
'gemini-3.5-flash',
'https://aiplatform.googleapis.com/v1/projects/<PROJECT_ID>/locations/global/publishers/google/models/gemini-3.5-flash:generateContent',
'google',
'GENERIC',
NULL,
'auth_type_cloudsql_service_agent_iam',
NULL, NULL, NULL, NULL);
Também podemos usar a integração de IA do Cloud SQL com a Gemini Enterprise Agent Platform para receber uma resposta semelhante de um modelo generativo usando SQL diretamente no banco de dados.
Agora podemos usar o resultado gerado em uma subconsulta com resultados JSON para fornecê-lo como parte do comando ao modelo de texto de IA generativa usando SQL.
Na sessão do mysql ou do Cloud SQL Studio para o banco de dados, execute a consulta
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
WITH trees AS (
SELECT
cp.product_name,
cp.product_description AS description,
cp.sale_price,
cs.zip_code,
cp.uniq_id AS product_id
FROM
cymbal_products cp
JOIN cymbal_inventory ci ON
ci.uniq_id = cp.uniq_id
JOIN cymbal_stores cs ON
cs.store_id = ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine')) ASC
LIMIT 1),
prompt AS (
SELECT
CONCAT( 'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:', json_arrayagg(json_object('product_name',trees.product_name,'description',trees.description,'sale_price',trees.sale_price,'zip_code',trees.zip_code,'product_id',trees.product_id)) , 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information') AS prompt_text
FROM
trees),
response AS (
SELECT
mysql.ML_PREDICT_ROW('gemini-3.5-flash',
json_object('contents',
json_object('role',
'user',
'parts',
json_array(
json_object('text',
prompt_text))))) AS resp
FROM
prompt)
SELECT
JSON_EXTRACT(resp, '$.candidates[0].content.parts[0].text')
FROM
response;
Confira um exemplo de saída. A saída pode variar de acordo com a versão do modelo e os parâmetros:
"Hello there! I'd be happy to help you find the perfect fruit tree for your space. \n\nBased on your area, a wonderful option we currently have in stock is the **Malus Domestica** (the classic Apple Tree)!\n\nHere are the key details:\n\n* **Product Name:** Malus Domestica (Classic Apple Tree)\n* **Price:** $100.00\n\n### Why it's a great choice:\n* **Beautiful Seasonal Foliage:** It features vibrant green leaves during the summer that turn into gorgeous shades of red, orange, and yellow in the autumn. \n* **Shade & Size:** It grows to approximately 30 feet tall, making it a strong, durable tree that offers excellent shade for your yard alongside delicious fresh fruit.\n* **Growing Conditions:** It thrives best in cool, moist climates with well-draining, loamy soil and is ideal for USDA Hardiness Zones 4–8.\n\n### Supplemental Care Tips:\n* **Planting Location:** Choose a spot that gets full sunlight (at least 6 hours a day) to ensure maximum fruit production.\n* **Soil:** Make sure the soil is rich and loamy with good drainage so the roots stay healthy.\n* **Cross-Pollination:** Apple trees often produce a higher yield when planted near another compatible apple tree variety, so if you have extra space, adding a companion tree in the future can boost your harvest!\n\nLet me know if you have any questions about planting or care, or if you'd like help adding this to your cart!"
A saída é fornecida no formato Markdown.
10. Criar um índice de vizinho mais próximo
Para grandes conjuntos de dados com milhões de vetores, a pesquisa vetorial pode exigir recursos de computação significativos. Para melhorar o desempenho da consulta, crie um índice nos embeddings de vetor.
Criar índice do ScaNN
Vamos testar o tipo de índice ScaNN.
Para criar o índice da coluna de embedding, defina a medição de distância dela. Leia sobre os parâmetros em detalhes na documentação.
CREATE VECTOR INDEX cymbal_products_embedding_idx ON cymbal_products(embedding) USING SCANN DISTANCE_MEASURE=COSINE;
Comparar respostas
Execute a consulta de pesquisa de vetor novamente e confira os resultados:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 5;
Saída esperada:
+-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | product_name | description | sale_price | zip_code | distance | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ | Malus Domestica | Malus Domestica, the classic apple tree, brings beauty and delicious fruit to yo | 100.00 | 93230 | 0.37740096545831603 | | Cerasus | Cerasus: A beautiful cherry tree that brings delicious fruit and vibrant color t | 75.00 | 93230 | 0.405704177142419 | | Persica | Persica: Enjoy homegrown, delicious peaches with this beautiful peach tree. Reac | 150.00 | 93230 | 0.41031799106722877 | | Meyer Lemon | Grow your own juicy Meyer Lemons with this semi-dwarf tree, California's favorit | 34.00 | 93230 | 0.42823360959352186 | | Acer | Acer, the classic maple. Known for vibrant fall foliage in reds, oranges, and ye | 100.00 | 93230 | 0.42953897057301615 | +-----------------+----------------------------------------------------------------------------------+------------+----------+---------------------+ 5 rows in set (0.08 sec)
As melhorias de performance são apenas um pouco diferentes, mas isso é esperado para um conjunto de dados tão pequeno. Isso seria muito mais perceptível em conjuntos de dados grandes com milhões de vetores.
Confira o plano de execução usando o comando EXPLAIN:
SELECT mysql.ML_EMBEDDING('text-embedding-005','What kind of fruit trees grow well here?') into @query_vector;
EXPLAIN ANALYZE SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
approx_distance(cp.embedding ,@query_vector, 'distance_measure=cosine') as distance
FROM
cymbal_products cp
JOIN cymbal_inventory ci on
ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
cs.store_id=ci.store_id
AND ci.inventory>0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 5;
Plano de execução (trecho):
...
-> Nested loop inner join (cost=443 rows=5) (actual time=1.14..1.18 rows=5 loops=1)
-> Vector index scan on cp (cost=441 rows=5) (actual time=1.1..1.1 rows=5 loops=1)
-> Single-row index lookup on cp using PRIMARY (uniq_id=cp.uniq_id) (cost=0.25 rows=1) (actual time=0.0152..0.0152 rows=1 loops=5)
...
Ele mostra a verificação do índice de vetor na tabela cp(alias da tabela cymbal_products).
Teste com seus próprios dados ou diferentes consultas de pesquisa para ver como a pesquisa semântica funciona no MySQL.
11. Limpar o ambiente
Exclua a instância do Cloud SQL
Destrua a instância do Cloud SQL quando terminar o laboratório.
No Cloud Shell, defina o projeto e as variáveis de ambiente se tiver ocorrido uma desconexão e todas as configurações anteriores forem perdidas:
export INSTANCE_NAME=my-cloudsql-instance
export PROJECT_ID=$(gcloud config get-value project)
Exclua a instância:
gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID
Saída esperada do console:
student@cloudshell:~$ gcloud sql instances delete $INSTANCE_NAME --project=$PROJECT_ID All of the instance data will be lost when the instance is deleted. Do you want to continue (Y/n)? y Deleting Cloud SQL instance...done. Deleted [https://sandbox.googleapis.com/v1beta4/projects/test-project-001-402417/instances/my-cloudsql-instance].
12. Parabéns
Parabéns por concluir o codelab.
Programa de aprendizado do Google Cloud
Este laboratório faz parte do programa de aprendizado "IA pronta para produção com o Google Cloud".
- Confira o currículo completo para reduzir a lacuna entre o protótipo e a produção.
- Compartilhe seu progresso com a hashtag
#ProductionReadyAI.
O que você aprendeu
- Como implantar uma instância do Cloud SQL para MySQL
- Como criar um banco de dados e ativar a integração da IA do Cloud SQL
- Como carregar dados no banco de dados
- Como usar o Cloud SQL Studio
- Como usar o modelo de embedding da Vertex AI no Cloud SQL
- Como usar o Agent Platform Studio
- Como enriquecer o resultado usando um modelo da Gemini Enterprise Agent Platform
- Como melhorar a performance usando o índice de vetor
Teste um codelab semelhante para o AlloyDB ou um codelab para o Cloud SQL para Postgres.
Pesquisa
Saída: