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 conhecer 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 consultaSELECT
. - 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.
- Para o método Implementação de função remota, você criará um validador de imagens para validar imagens de teste em relação a 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.
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
3. Antes de começar
- No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
- Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto .
- 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.
- 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
- Execute o comando a seguir no Cloud Shell para confirmar que o comando gcloud conhece seu projeto.
gcloud config list project
- Se o projeto não estiver definido, use este comando:
gcloud config set project <YOUR_PROJECT_ID>
- 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
- Verifique se as seguintes APIs estão ativadas:
- BigQuery
- Conexão do BigQuery
- Função do Cloud
- Cloud Run
- 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:
- Acesse a página do BigQuery no console do Google Cloud.
- No painel Explorador, selecione o projeto em que você quer criar o conjunto de dados.
- Expanda a opção Ações (o ícone de reticências verticais) e clique em Criar conjunto de dados.
- Clique em Criar conjunto de dados.
- Insira
gemini_bq_fn
no campo ID do conjunto de dados. - Defina seu tipo de local como
Multi-region
e aceite o valor padrão, que éUS(multiple regions in United States.
- Clique em Criar conjunto de dados.
- 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:
- Clique em Adicionar no painel Explorer da página do BigQuery.
- Clique em Conexões com fontes de dados externas.
- No menu "Tipo de conexão", selecione Modelos remotos da Vertex AI, funções remotas e BigLake (recurso do Cloud).
- No campo ID da conexão, digite o nome da conexão como
gemini-bq-conn
. - Defina seu tipo de local como
Multi-region
e aceite o valor padrão, que éUS(multiple regions in United States.
- Clique em Criar conexão.
- Clique em Acessar conexão e copie o ID da conta de serviço no painel Informações de conexão.
- Acesse a página IAM e Administrador e clique em Conceder acesso.
- Cole o ID da conta de serviço no campo Novos princípios.
- Selecione o papel
Vertex AI user
na lista de papéis e clique em Salvar.
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 com base 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));
Você verá o seguinte resultado:
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:
- Inicie o editor do Cloud Shell
- Se você estiver usando o Editor legado, clique em Testar o novo Editor.
- Na barra de status, clique em Cloud Code - Fazer login.
- 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.
- Se o projeto não aparecer na barra de status do Cloud Code, clique em Cloud Code - Fazer login > Selecione 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.
- Na barra de status do Cloud Code, clique no nome do projeto ativo. No menu "Escolha rápida" que aparece, selecione Novo aplicativo.
- Na caixa de diálogo Criar novo aplicativo, selecione Aplicativo do Cloud Functions.
- Selecione Java: Hello World quando solicitado a escolher um modelo.
- Insira
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.
- Adicione as dependências necessárias na tag
<dependencies>... </dependencies>
ou copie as dependências do arquivo de amostra pom.xml. - Mude o nome da classe de
HelloWorld.java
para algo mais significativo. Digamos queGeminiBigQueryFunction.java
. Renomeie o pacote conforme necessário. - 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 projeto no exemplo de código.
- 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
- 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
- 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:
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:
- Para criar um bucket, acesse o console do Cloud Storage e clique em Criar.
- Insira
demo-bq-gemini-public-image
como nome do bucket e clique em Criar. - 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. - Após a criação do bucket, acesse a guia Permissões para consultar e alterar as permissões.
- 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. - Selecione o papel
Storage Object Viewer
e clique em Salvar. Se solicitado, permita o acesso público. - 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:
Estas são as imagens para sua referência:
Imagem de referência
Imagem 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:
- No console do Google Cloud, 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 Encerrar para excluí-lo.
- 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, você é um contador de histórias de 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 o que você criou com esse aprendizado.