Neste tutorial, você usa um modelo remoto
com a função AI.GENERATE_EMBEDDING para gerar embeddings de texto
em uma tabela do BigQuery. Em seguida, você cria um índice vetorial
para indexar os embeddings e melhorar o desempenho da pesquisa.
Você usa a VECTOR_SEARCH função
com os embeddings para pesquisar textos semelhantes. A pesquisa vetorial é uma técnica para comparar objetos semelhantes usando embeddings, que são vetores numéricos de alta dimensão que representam uma determinada entidade, como um trecho de texto.
Por fim, você realiza a geração aumentada por recuperação (RAG)
gerando texto com a função AI.GENERATE_TEXT.
A RAG é um framework de IA que combina os pontos fortes dos sistemas de recuperação de informações (como pesquisa e bancos de dados) com os recursos dos modelos de linguagem grande (LLMs) generativos. Ao combinar seus dados e o conhecimento do mundo com as habilidades linguísticas do LLM, a geração com base no mundo real é mais precisa, atualizada e relevante para suas necessidades específicas.
Este tutorial usa dados do conjunto de dados públicos de pesquisa de patentes do Google.
Objetivos
- Criar um modelo remoto do BigQuery ML em um modelo de embedding do Gemini Enterprise Agent Platform.
- Usar o modelo remoto com a função
AI.GENERATE_EMBEDDINGpara gerar embeddings de texto em uma tabela do BigQuery. - Criar um índice vetorial para indexar os embeddings e melhorar o desempenho da pesquisa.
- Usar a função
VECTOR_SEARCHcom os embeddings para pesquisar textos semelhantes. - Realizar a RAG gerando texto com a função
AI.GENERATE_TEXTe usando resultados da pesquisa vetorial para aumentar a entrada do comando e melhorar os resultados.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Gemini Enterprise Agent Platform: You incur costs for calls to the Agent Platform service that's represented by the remote model.
Para gerar uma estimativa de custo baseada na projeção de uso,
use a calculadora de preços.
Para mais informações, consulte as seguintes páginas de preços:
Antes de começar
-
No Google Cloud console do, na página do seletor de projetos, escolha ou crie um Google Cloud projeto do.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: a seleção de um projeto não exige um papel específico do IAM. Você pode selecionar qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, você precisa do papel de criador de projetos
(
roles/resourcemanager.projectCreator), que contém aresourcemanager.projects.createpermissão. Saiba como conceder papéis.
-
Verifique se o faturamento está ativado para o Google Cloud projeto.
-
Ative as APIs BigQuery, Cloud Storage e Gemini Enterprise Agent Platform.
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter a permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, você pode receber essa permissão pelo papel de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.
Funções exigidas
Para conseguir as permissões que você precisa para concluir este tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Criar conjuntos de dados, tabelas e modelos:
proprietário de dados do BigQuery (
roles/bigquery.dataOwner) -
Executar jobs do BigQuery:
usuário de jobs do BigQuery (
roles/bigquery.jobUser) -
Criar e gerenciar conexões:
administrador de conexão do BigQuery (
roles/bigquery.connectionAdmin)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
Criar um conjunto de dados
Para criar um conjunto de dados do BigQuery, selecione uma das seguintes opções:
Console
No Google Cloud console, acesse a página BigQuery.
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
Em Explorer, expanda o projeto e clique em Conjuntos de dados.
Na página Conjuntos de dados, clique em Criar conjunto de dados.
No painel Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial.Para Local dos dados, selecione EUA.
Deixe as configurações padrão restantes como estão.
Clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, use o
bq mk --dataset comando.
Crie um conjunto de dados chamado
bqml_tutorialcom o local dos dados definido comoUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Confirme se o conjunto de dados foi criado:
bq ls
API
Chame o datasets.insert
método com um recurso de conjunto de dados definido:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Criar o modelo remoto para geração de embedding de texto
Nesta seção, você cria um modelo remoto que representa um modelo de geração de embedding de texto da Agent Platform hospedado.
Ao criar o modelo, você usa a conexão DEFAULT
para chamar a API Text Embeddings
e receber embeddings de texto usando o modelo text-embedding-005. Se você não tiver uma conexão padrão, a instrução CREATE MODEL vai criar uma para você.
Para criar o modelo de embedding de texto, siga estas etapas:
No Google Cloud console, acesse a página BigQuery.
Para criar o modelo, cole este comando no editor de consultas e, em seguida, clique em Executar:
CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'text-embedding-005');
A consulta leva vários segundos para ser concluída. Depois disso, o modelo
embedding_modelpode ser acessado pelo painel Explorer.Você recebe uma mensagem de confirmação como esta:
Successfully created model named embedding_model.
Gerar embeddings de texto
Gere embeddings de texto com base em resumos de patentes usando a
AI.GENERATE_EMBEDDING função,
e, em seguida, grave-os em uma tabela do BigQuery para que possam ser
pesquisados.
A geração de embeddings usando a
AI.GENERATE_EMBEDDING função
pode falhar devido a cotas
ou indisponibilidade de serviço do LLM da Agent Platform. Se isso acontecer, os detalhes do erro serão retornados na coluna status nos resultados da consulta.
Para métodos alternativos de geração de embedding de texto no BigQuery, consulte o tutorial de iembedding de texto com modelos pré-treinados do TensorFlow.
Para gerar embeddings de texto, cole este comando no editor de consultas e clique em Executar:
CREATE OR REPLACE TABLEbqml_tutorial.embeddingsAS SELECT * FROM AI.GENERATE_EMBEDDING( MODELbqml_tutorial.embedding_model, ( SELECT *, abstract AS content FROMpatents-public-data.google_patents_research.publicationsWHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore' ) ) WHERE LENGTH(status) = 0;
Essa consulta leva vários minutos para ser concluída. Você recebe uma confirmação
mensagem como esta:This statement created a new table named
embeddings.
Criar um índice vetorial
Se você criar um índice vetorial em uma coluna de embedding, uma pesquisa vetorial que é realizada nessa coluna usa a técnica de pesquisa do Vizinho aproximado mais perto. Essa técnica melhora o desempenho da pesquisa vetorial e retorna resultados mais aproximados, mas o recall é reduzido.
Para criar um índice vetorial, use a
CREATE VECTOR INDEX
instrução de linguagem de definição de dados (DDL, na sigla em inglês). Para verificar se o índice está disponível,
consulte a visualização INFORMATION_SCHEMA.VECTOR_INDEXES
para verificar se o valor da coluna coverage_percentage é maior que 0,
e se o valor da coluna last_refresh_time não é NULL.
Para criar e verificar o índice vetorial, siga estas etapas:
Para criar o índice vetorial, cole este comando no editor de consultas e então clique em Executar:
CREATE OR REPLACE VECTOR INDEX my_index ON `bqml_tutorial.embeddings`(embedding) OPTIONS(index_type = 'IVF', distance_type = 'COSINE', ivf_options = '{"num_lists":500}');
Você recebe uma mensagem de confirmação como esta:
The vector index creation on table bqml_tutorial.embeddings was initiated. Please query bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES to check the progress of the index.A criação de um índice vetorial geralmente leva apenas alguns segundos. São necessários mais dois a três minutos para que o índice vetorial seja preenchido de forma assíncrona.
Para verificar se o índice está pronto para ser usado, cole este comando no editor de consultas e clique em Executar:
SELECT table_name, index_name, index_status, coverage_percentage, last_refresh_time, disable_reason FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`;
Substitua
PROJECT_IDpela ID do seu projeto.Depois de executar a consulta, o índice estará disponível se a coluna
index_statusnos resultados mostrar que o índice estáACTIVEe se o valorcoverage_percentagefor100.
Realizar uma pesquisa de similaridade de texto usando o índice vetorial
Use a
VECTOR_SEARCH função
para pesquisar patentes relevantes que correspondam a embeddings gerados a partir de uma
consulta de texto.
O argumento top_k determina o número de correspondências a serem retornadas, neste caso, cinco. A opção fraction_lists_to_search determina a porcentagem de listas de índices vetoriais a serem pesquisadas.
O índice vetorial criado tem 500 listas. Portanto, o valor fraction_lists_to_search de .01 indica que essa pesquisa vetorial
verifica cinco dessas listas. Um valor fraction_lists_to_search menor, conforme mostrado
aqui, oferece um recall
menor
e um desempenho mais rápido.
Para mais informações sobre listas de índices vetoriais, consulte a num_lists
opção de índice vetorial.
O modelo usado para gerar os embeddings nessa consulta precisa ser o mesmo usado para gerar os embeddings na tabela que você está comparando. Caso contrário, os resultados da pesquisa não serão precisos.
Para realizar uma pesquisa de similaridade de texto, cole este comando no editor de consultas, e clique em Executar:
SELECT query.query, base.publication_number, base.title, base.abstract FROM VECTOR_SEARCH( TABLEbqml_tutorial.embeddings, 'embedding', ( SELECT embedding, content AS query FROM AI.GENERATE_EMBEDDING( MODELbqml_tutorial.embedding_model, (SELECT 'improving password security' AS content)) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}');
O resultado será assim:
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | query | publication_number | title | abstract | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | improving password security | SG-120868-A1 | Data storage device security method and a... | Methods for improving security in data stora... | | improving password security | SG-10201610585W-A | Passsword management system and process... | PASSSWORD MANAGEMENT SYSTEM AND PROCESS ... | | improving password security | SG-148888-A1 | Improved system and method for... | IMPROVED SYSTEM AND METHOD FOR RANDOM... | | improving password security | SG-194267-A1 | Method and system for protecting a password... | A system for providing security for a... | | improving password security | SG-120868-A1 | Data storage device security... | Methods for improving security in data... | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
Criar o modelo remoto para geração de texto
Para criar um modelo remoto que represente um modelo de geração de texto da Agent Platform hospedado, cole este comando no editor de consultas e clique em Executar:
CREATE OR REPLACE MODEL bqml_tutorial.text_model
REMOTE WITH CONNECTION DEFAULT
OPTIONS (ENDPOINT = 'gemini-2.5-flash');
Você recebe uma mensagem de confirmação semelhante a esta:
Successfully created model named text_model.
Gerar texto aumentado pelos resultados da pesquisa vetorial
Alimente os resultados da pesquisa como solicitações para gerar texto com a
AI.GENERATE_TEXT função.
Para aumentar os resultados da pesquisa vetorial, cole este comando no editor de consultas, e clique em Executar:
SELECT result AS generated, prompt FROM AI.GENERATE_TEXT( MODELbqml_tutorial.text_model, ( SELECT CONCAT( 'Propose some project ideas to improve user password security using the context below: ', STRING_AGG( FORMAT("patent title: %s, patent abstract: %s", base.title, base.abstract), ',\n') ) AS prompt, FROM VECTOR_SEARCH( TABLEbqml_tutorial.embeddings, 'embedding', ( SELECT embedding, content AS query FROM AI.GENERATE_EMBEDDING( MODELbqml_tutorial.embedding_model, (SELECT 'improving password security' AS content) ) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}') ), STRUCT(600 AS max_output_tokens));
O resultado será assim:
+------------------------------------------------+------------------------------------------------------------+ | generated | prompt | +------------------------------------------------+------------------------------------------------------------+ | These patents suggest several project ideas to | Propose some project ideas to improve user password | | improve user password security. Here are | security using the context below: patent title: Active | | some, categorized by the patent they build | new password entry dialog with compact visual indication | | upon: | of adherence to password policy, patent abstract: | | | An active new password entry dialog provides a compact | | **I. Projects based on "Active new password | visual indication of adherence to password policies. A | | entry dialog with compact visual indication of | visual indication of progress towards meeting all | | adherence to password policy":** | applicable password policies is included in the display | | | and updated as new password characters are being... | +------------------------------------------------+------------------------------------------------------------+
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
- No Google Cloud console, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
- Na caixa de diálogo, digite o ID do projeto e clique em Desligar para excluir o projeto.
Como alternativa, para manter o projeto e excluir os recursos usados neste tutorial, siga estas etapas:
Acessar a página do BigQuery.
No painel à esquerda, expanda o projeto e clique em Conjuntos de dados.
Para o conjunto de dados
bqml_tutorial, clique em Abrir ações > Excluir.Na caixa de diálogo Excluir conjunto de dados, clique em Excluir para confirmar.
No painel à esquerda, clique em Conexões.
Para a conexão
__default_cloudresource_connection__, clique em Abrir ações > Excluir.Na caixa de diálogo Excluir conexão , insira
deletee clique em Excluir para confirmar.
A seguir
- Para saber como criar um pipeline de RAG com base no conteúdo de PDF analisado, consulte Analisar PDFs em um pipeline de geração aumentada por recuperação.