Insights de LLMs no local: BigQuery e Gemini para análise de dados estruturados e não estruturados

1. Introdução

Grandes conjuntos de dados contêm insights valiosos, mas extrair uma compreensão significativa pode ser uma tarefa difícil. As ferramentas de análise tradicionais geralmente não fornecem explicações sutis e semelhantes às humanas que nos ajudam a entender verdadeiramente a história dentro de nossos dados. Os data warehouses estão armazenando cada vez mais dados não estruturados, mas eles nem sempre eram acessíveis para conseguir insights. Textos, imagens e vídeos não estruturados contêm informações valiosas para aprimorar seus negócios. Os LLMs oferecem uma nova maneira poderosa de entender seus dados, fornecendo explicações, análise de sentimento, detecção de objetos e muito mais. Com o surgimento dos modelos multimodais (e a capacidade de armazenar dados de objetos, como imagens e vídeos no BigQuery usando tabelas de objetos), a integração de LLMs avançados, como o Gemini 1.0 Pro (para análise baseada em texto) e o Gemini 1.0 Pro Vision (para análise de texto e imagem/vídeo), com o BigQuery pode transformar a maneira como você analisa dados.

Neste codelab, vamos analisar os dois métodos a seguir para extrair insights de LLM com base nos dados da sua empresa e escaloná-los para milhares de linhas no BigQuery:

Método 1: invocação de modelo remoto

  • Chame o Gemini 1.0 Pro no BigQuery usando ML.GENERATE_TEXT na consulta SELECT.
  • Use essa abordagem quando o modelo já estiver disponível como um modelo remoto no BigQuery e você quiser usá-lo imediatamente. Verifique o status do modelo que você quer usar na documentação do BigQuery.

Método 2: implementação de função remota

  • Chamar uma função do Cloud que implemente o Gemini 1.0 Pro Vision, exposta como uma função remota no BigQuery.
  • Use essa abordagem quando o modelo que você quer usar não estiver disponível pronto para uso como remoto ou quando você quiser mais flexibilidade e personalização no seu caso de uso.

O que você vai criar

  • Para o método de Invocação de modelo remoto, você vai criar um resumidor de local para o conjunto de dados de Internet Archive (disponível publicamente no BigQuery) invocando o modelo remoto do Gemini 1.0 Pro na construção ML.GENERATE_TEXT no BigQuery.

Diagrama de fluxo para invocação de modelo remoto

  • Para o método de Implementação da função remota, você vai criar um validador de imagens para comparar com uma imagem de referência. Para isso, você vai criar um conjunto de dados com capturas de tela da imagem de teste em uma tabela externa e pedir que o Gemini 1.0 Pro Vision valide essas imagens em relação à imagem de referência. Depois você vai criar uma função do Cloud em Java que implementa a chamada do Gemini Pro Vision e invocá-la como uma função remota no BigQuery.

Diagrama de fluxo para implementação da função remota

Observação:

Pode haver mais modelos de IA generativa da Vertex AI disponíveis como modelos remotos no BigQuery. Isso significa que é possível acessar esses modelos com a construção ML.GENERATE_TEXT do BigQuery prontamente. No entanto, mesmo no caso de disponibilidade de modelos remotos, você sempre tem a opção de criar personalizações avançadas para seu caso de uso com o Cloud Functions e depois acessar esses modelos como funções remotas do BigQuery.

Por que usar o BigQuery?

O BigQuery é um data warehouse em nuvem sem servidor que pode ser escalonado de bytes a petabytes com sobrecarga operacional mínima. Por isso, ele é uma ótima opção para armazenar dados de treinamento de ML. Com o machine learning (BQML) integrado e os recursos de análise integrados do BigQuery, é possível criar previsões sem código usando apenas consultas SQL. Além disso, é possível acessar dados de fontes externas com consultas federadas, o que elimina a necessidade de pipelines de ETL complicados.

O BigQuery é um data warehouse em nuvem totalmente gerenciado que ajuda os usuários a analisar dados estruturados, semiestruturados e não estruturados.

2. Requisitos

  • Use um navegador, como o Chrome ou o Firefox.
  • Ter um projeto do Google Cloud com o faturamento ativado.

3. Antes de começar

  1. No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
  2. Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto .
  3. Você usará o Cloud Shell, um ambiente de linha de comando em execução no Google Cloud que vem pré-carregado com o bq. Clique em "Ativar o Cloud Shell" na parte de cima do console do Google Cloud.

Imagem do botão "Ativar o Cloud Shell"

  1. Depois de se conectar ao Cloud Shell, verifique se você já está autenticado e se o projeto está configurado com o ID do seu projeto usando o seguinte comando:
gcloud auth list
  1. Execute o comando a seguir no Cloud Shell para confirmar que o comando gcloud conhece seu projeto.
gcloud config list project
  1. Se o projeto não estiver definido, use este comando:
gcloud config set project <YOUR_PROJECT_ID>
  1. Acesse o Gemini para Google Cloud Marketplace e ative a API. Também é possível usar o seguinte comando no terminal do Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. Verifique se as seguintes APIs estão ativadas:
  • BigQuery
  • Conexão do BigQuery
  • Função do Cloud
  • Cloud Run
  • O Vertex AI
  • Cloud Build
  • APIs do Cloud Storage

A alternativa ao comando gcloud é passar pelo console usando este link.

Consulte a documentação para ver o uso e os comandos gcloud.

4. Criar um conjunto de dados do BigQuery e uma conexão externa

Vamos começar criando um conjunto de dados e uma conexão de recursos do Cloud.

Um conjunto de dados no BigQuery é um contêiner para todas as tabelas e objetos do seu aplicativo.

Para criar um conjunto de dados, faça o seguinte:

  1. Acesse a página do BigQuery no console do Google Cloud.
  2. No painel Explorador, selecione o projeto em que você quer criar o conjunto de dados.
  3. Expanda a opção Ações (o ícone de reticências verticais) e clique em Criar conjunto de dados.

Imagem do menu de ações e da opção &quot;Criar conjunto de dados&quot;

  1. Clique em Criar conjunto de dados.
  2. Insira gemini_bq_fn no campo ID do conjunto de dados.
  3. Defina seu tipo de local como Multi-region e aceite o valor padrão, que é US(multiple regions in United States.
  4. Clique em Criar conjunto de dados.
  5. Verifique se o conjunto de dados foi criado e listado no ID do projeto no painel Explorer.

É necessária uma conexão com o BigQuery para interagir com a função do Cloud. Para criar uma função remota, crie uma conexão com o BigQuery. Neste codelab, usaremos a conexão do BigLake para acessar o modelo do BigQuery usando a função do Cloud. As conexões do BigLake ajudam a conectar a fonte de dados externa, mantendo o controle de acesso e a segurança refinados do BigQuery, que, neste caso, é a API Gemini Pro da Vertex AI.

Para criar a conexão do BigLake, faça o seguinte:

  1. Clique em Adicionar no painel Explorer da página do BigQuery.

Console do BigQuery com o botão &quot;ADICIONAR&quot; destacado para adicionar conexão externa

  1. Clique em Conexões com fontes de dados externas.
  2. No menu "Tipo de conexão", selecione Modelos remotos da Vertex AI, funções remotas e BigLake (recurso do Cloud).
  3. No campo ID da conexão, digite o nome da conexão como gemini-bq-conn.
  4. Defina seu tipo de local como Multi-region e aceite o valor padrão, que é US(multiple regions in United States.
  5. Clique em Criar conexão.
  6. Clique em Acessar conexão e copie o ID da conta de serviço no painel Informações de conexão.

Captura de tela com informações da conexão

  1. Acesse a página IAM e administrador e clique em Conceder acesso.
  2. Cole o ID da conta de serviço no campo Novos princípios.
  3. Selecione o papel Vertex AI user na lista de papéis e clique em Salvar.

Captura de tela: conceder acesso à conta de serviço

Você criou o conjunto de dados e a conexão do BigQuery. Agora você vai concluir as etapas necessárias para a invocação do modelo remoto.

5. Caso de uso 1: invocação de modelo remoto: configurar invocação de modelo remoto

Agora que você criou o conjunto de dados e a conexão, vamos criar um modelo no BigQuery baseado no modelo de fundação do Gemini Pro da Vertex AI. Ao final deste exercício, você vai ter seu aplicativo LLM funcionando usando apenas consultas SQL.

Etapa 1: criar uma tabela do BigQuery que contenha os dados de entrada para o modelo remoto

Crie uma tabela chamada books no conjunto de dados que possa conter cerca de 50 registros da tabela bigquery-public-data.gdelt_internetarchivebooks.1905 no conjunto de dados do Internet Archive Books proveniente do uso público do BigQuery.

Para isso, execute a seguinte instrução DDL (linguagem de definição de dados) no painel do editor SQL do BigQuery:

create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)

Etapa 2 : criar um modelo do BigQuery

Criar um modelo no conjunto de dados. Para fazer isso, execute a DDL a seguir no painel do Editor SQL do BigQuery:

CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');

O modelo foi criado com uma opção de visualização.

Etapa 3 : testar seu novo aplicativo de IA generativa

Use a função ML.GENERATE_TEXT em uma consulta SELECT para enviar uma solicitação ao modelo remoto.

SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
 (select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
 TRUE AS flatten_json_output));

O seguinte resultado será exibido:

Resultado da consulta ML.GENERATE_TEXT no BigQuery

Parabéns! Você demonstrou como usar um modelo remoto baseado em um modelo gemini-pro com a função ML.GENERATE_TEXT para analisar dados de texto em uma tabela do BigQuery.

Agora vamos testar outro modelo da Vertex AI usando as funções remotas do BigQuery. Digamos que você queira adicionar mais personalização e flexibilidade ao uso do modelo remotamente no BigQuery. Os modelos compatíveis estão listados na documentação do BigQuery.

6. Caso de uso 2 Implementação da função remota: configurar a implementação da função remota

Neste exercício, você vai criar uma função no BigQuery baseada na função do Cloud em Java que implementa o modelo de fundação do Gemini 1.0 Pro Vision. Primeiro, você vai criar e implantar a função do Cloud em Java para comparar imagens usando o modelo Gemini 1.0 Pro Vision. Depois, vai criar a função remota no BigQuery que invoca a função do Cloud implantada. Lembre-se de que o mesmo procedimento pode ser seguido para qualquer execução de função remota no BigQuery.

Então, vamos começar.

Etapa 1: criar a função do Cloud em Java

Você vai criar uma função do Cloud da segunda geração em Java para validar imagens de teste em relação a uma imagem de referência. A imagem de referência é armazenada em um conjunto de dados contendo capturas de tela da imagem de teste em uma tabela externa no BigQuery. Você vai validar as imagens usando o modelo Gemini Pro Vision (SDK para Java). Em seguida, você implantará a função do Cloud em Java em um endpoint REST.

Siga estas etapas:

  1. Inicie o editor do Cloud Shell
  2. Se você estiver usando o Editor legado, clique em Testar o novo Editor.
  3. Na barra de status, clique em Cloud Code - Fazer login.
  4. Se você precisar autorizar o Editor do Cloud Shell a fazer chamadas de API do Google Cloud, clique em Autorizar. Siga as instruções para fazer login na sua Conta do Google. Você se conectou ao Google Cloud.
  5. Caso seu projeto não esteja na barra de status do Cloud Code, clique em Cloud Code - Fazer login > Selecionar um projeto do Google Cloud. Escolha o projeto do Google Cloud em que você quer criar o Cloud Functions. O projeto é carregado e se torna o projeto ativo no editor do Cloud Shell.
  6. Na barra de status do Cloud Code, clique no nome do projeto ativo. No menu "Escolha rápida" que aparece, selecione Novo aplicativo.
  7. Na caixa de diálogo Criar novo aplicativo, selecione Aplicativo do Cloud Functions.

Página 1 do pop-up &quot;Criar novo aplicativo&quot;

  1. Selecione Java: Hello World quando solicitado a escolher um modelo.

Página 2 do pop-up &quot;Criar novo aplicativo&quot;

  1. Digite Gemini-BQ-Function como o nome do projeto no caminho do projeto. A estrutura do projeto aparece em uma nova visualização do editor do Cloud Shell.

Nova estrutura de projeto do aplicativo de função do Cloud em Java

  1. Adicione as dependências necessárias na tag <dependencies>... </dependencies> ou copie as dependências do arquivo de amostra pom.xml.
  2. Mude o nome da classe de HelloWorld.java para algo mais significativo. Digamos que GeminiBigQueryFunction.java. Renomeie o pacote conforme necessário.
  3. Substitua o código do marcador de posição no arquivo GeminiBigQueryFunction.Java pelo exemplo de código (links em inglês) fornecido no repositório do GitHub. Substitua a variável <YOUR_PROJECT_ID> pelo ID do seu projeto no exemplo de código.
  4. Acesse o terminal do Cloud Shell. Verifique se você está no diretório do projeto. Caso contrário, navegue até o diretório do projeto executando o seguinte comando:
cd Gemini-BQ-Function
  1. Execute a instrução a seguir para criar e implantar a função do Cloud:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .

Substitua o ponto de entrada no comando pelo ponto de entrada da sua função. A saída é um URL REST no seguinte formato:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
  1. Execute o seguinte comando no terminal para testar a Função do Cloud:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'

Resposta para o comando de amostra aleatório:

String de resposta JSON da função do Cloud

Incrível! A implementação genérica do modelo de função do Cloud para Gemini Pro Vision está pronta. Vamos usar esse endpoint diretamente nos dados do BigQuery de uma função remota do BigQuery.

Etapa 2: criar uma tabela de objetos e uma função remota do BigQuery

Pré-requisito

Você vai precisar de um bucket do Cloud Storage para esta parte do exercício. Siga estas etapas para criar um bucket do Cloud Storage:

  1. Para criar um bucket, acesse o console do Cloud Storage e clique em Criar.
  2. Insira demo-bq-gemini-public-image como nome do bucket e clique em Criar.
  3. Desmarque a opção Enforce public access prevention on this bucket. Embora você esteja criando esse bucket para acesso público neste exercício, recomendamos impedir o acesso público e conceder permissões a contas de serviço específicas, conforme necessário nos casos de uso corporativos.
  4. Após a criação do bucket, acesse a guia Permissões para consultar e alterar as permissões.
  5. Para adicionar principais, clique em Conceder acesso. Especifique um ID de conta de serviço para conceder permissões a uma conta específica ou especifique allUsers para conceder acesso público ao seu bucket.
  6. Selecione o papel Storage Object Viewer e clique em Salvar. Se solicitado, permita o acesso público.
  7. Acesse a guia Objetos e faça upload das imagens de referência e de teste para comparação. Neste codelab, é possível fazer upload dos seguintes objetos disponíveis publicamente: baseline.JPG, TEST1.JPG e TEST2.JPG.

Crie uma tabela de objetos do BigQuery

Crie uma tabela de objetos externa do BigQuery para acessar os dados não estruturados do bucket usando a conexão e o conjunto de dados que você criou antes. Para isso, execute a seguinte instrução DDL (linguagem de definição de dados) no painel do editor de consultas do BigQuery:

CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);

Verifique se uma nova tabela de objetos chamada image_validation foi criada no conjunto de dados.

Crie uma função remota do BigQuery

Criar uma função remota no BigQuery para invocar a função do Cloud em Java que implementa o modelo Gemini Pro Vision Crie isso no mesmo conjunto de dados. Para fazer isso, execute a DDL a seguir no painel do editor de SQL do console do BigQuery:

CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
 REMOTE WITH CONNECTION `us.gemini-bq-conn`
 OPTIONS (
   endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
   max_batching_rows = 1
 );

O URL do endpoint é o URL REST que foi retornado anteriormente neste exercício. Isso cria a função remota no BigQuery. Há três parâmetros na DDL acima. Os dois primeiros parâmetros são URLs para as imagens armazenadas na tabela de objetos criada na etapa anterior. O último parâmetro é o comando para o modelo (Gemini Pro Vision). Consulte o código do Cloud Functions em Java usado para analisar essa assinatura:

Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();

Invoque o Gemini no BigQuery

Use a função remota em uma consulta SELECT para testar a função e validar as imagens em relação ao comando.

select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image.  Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';  

Faça a consulta acima com os arquivos de objetos TEST1 e TEST2. Um resultado semelhante a este será exibido:

Captura de tela do resultado da função remota do BigQuery

Estas são as imagens para sua referência:

Imagem de referência

Imagem de referência do caso de teste

Imagem de teste

Imagem de teste 1 para o caso de teste

Observe que as duas imagens são semelhantes porque têm a visualização do console do Cloud da Duet AI, mas o texto delas é diferente gerado pelo modelo no formato JSON.

Com isso, você testou corretamente a implementação da função remota.

7. Benefícios e casos de uso

Vamos conferir alguns dos benefícios de integrar o BigQuery e o Gemini para análises de dados estruturados e não estruturados.

  • Trazendo a GenAI nos seus dados: você não precisa mais mover dados, duplicá-los e aumentar a complexidade. É possível analisar dados e gerar insights no mesmo ambiente do BigQuery.
  • Análises aprimoradas: as explicações da linguagem natural do Gemini agregam uma nova camada de compreensão aos seus dados, e você pode fazer isso usando consultas SQL.
  • Escalonabilidade: essa solução lida com grandes conjuntos de dados e análises complexas com facilidade e pouco esforço de código.

Existem muitas aplicações para isso. Considere cenários em finanças (análise de tendências de mercado), varejo (sentimento do cliente), saúde (resumos de relatórios médicos) etc. em que suas equipes de análise e negócios possam implementá-los com relativamente pouco esforço, recursos e uma linguagem e ferramenta familiares de sua escolha.

8. Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta postagem, siga estas etapas:

  1. No console do Google Cloud, acesse a página Gerenciar recursos.
  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
  4. Se quiser manter o projeto, pule as etapas acima e exclua a função do Cloud. Para isso, acesse o Cloud Functions e, na lista de funções, marque a que você quer excluir e clique em Excluir.

9. Parabéns

Parabéns! Com os modelos do Gemini integrados ao BigQuery, você não está mais apenas analisando seus dados, passando a contar a história deles com dados. É possível gerar as narrativas ocultas nos seus conjuntos de dados e transformar a maneira como você entende seus insights. Começar experiências! Aplique essa técnica aos seus próprios conjuntos de dados e descubra as histórias contidas neles. Como o BigQuery oferece suporte a dados não estruturados em tabelas de objetos ( Tabelas externas), use o Gemini Pro Vision para criar insights generativos sobre dados de imagem. Para orientações mais detalhadas, consulte a documentação da Vertex AI, das Funções remotas do BigQuery e do Cloud Functions. Este é o repositório do GitHub (link em inglês) deste projeto. Conte para nós o que você criou com esse aprendizado.