LLM somente SQL com BigQuery ML usando a API Vertex AI PaLM

1. Introdução

Neste codelab, listei as etapas para executar o resumo do código-fonte dos repositórios do GitHub e a identificação da linguagem de programação no repositório, usando o modelo de linguagem grande da Vertex AI para geração de texto ( text-bison) como uma função remota hospedada no BigQuery. Graças ao Archive Project do GitHub, agora temos um resumo completo de mais de 2,8 milhões de repositórios de código aberto do GitHub nos conjuntos de dados públicos do Google BigQuery. A lista de serviços usados é:

  1. BigQuery ML
  2. API PaLM da Vertex AI

O que você vai criar

Você vai criar

  • Um conjunto de dados do BigQuery para conter o modelo
  • Um modelo do BigQuery que hospeda a API PaLM da Vertex AI como uma função remota
  • Uma conexão externa para estabelecer a conexão entre o BigQuery e a Vertex AI

2. Requisitos

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

3. Antes de começar

  1. No console do Google Cloud, na página do 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. Verifique se todas as APIs necessárias (API BigQuery, API Vertex AI, API BigQuery Connection) estão ativadas
  4. Você usará o Cloud Shell, um ambiente de linha de comando em execução no Google Cloud que vem pré-carregado com bq. Consulte a documentação sobre comandos e uso da gcloud

No console do Cloud, clique em "Ativar o Cloud Shell" no canto superior direito:

51622c00acec2fa.png

Se o projeto não estiver definido, use este comando:

gcloud config set project <YOUR_PROJECT_ID>
  1. Acesse o console do BigQuery digitando este URL no seu navegador: https://console.cloud.google.com/bigquery

4. Preparando os dados

Neste caso de uso, vamos utilizar o conteúdo do código-fonte do conjunto de dados github_repos nos Conjuntos de dados públicos do Google BigQuery. Para usar isso, no console do BigQuery, procure por "github_repos" e pressione Enter. Clique na estrela ao lado do conjunto de dados listado como resultado da pesquisa. Depois clique em "MOSTRAR SOMENTE COM ESTRELA" a opção de mostrar apenas os conjuntos de dados públicos.

dc6bf1e2fa6bba8a.png

Expanda as tabelas no conjunto de dados para conferir o esquema e a visualização dos dados. Usaremos o sample_contents, que contém apenas uma amostra (10%) dos dados completos da tabela de conteúdo. Esta é uma prévia dos dados:

e021c689c56abf22.png

5. Como criar o conjunto de dados do BigQuery

Um conjunto de dados do BigQuery é uma coleção de tabelas. Todas as tabelas em um conjunto de dados são armazenadas no mesmo local dos dados. Você também pode anexar controles de acesso personalizados para limitar o acesso a um conjunto de dados e às tabelas dele.

Crie um conjunto de dados na região "US" (ou qualquer região de nossa preferência) chamada bq_llm

c67e9f929629739a.png

Esse conjunto de dados vai hospedar o modelo de ML que vamos criar nas próximas etapas. Normalmente, os dados que usamos no aplicativo de ML também são armazenados em uma tabela desse conjunto de dados. No entanto, no nosso caso de uso, os dados já estão em um conjunto de dados público do BigQuery, vamos fazer referência a isso diretamente do nosso conjunto de dados recém-criado, conforme necessário. Se você quiser fazer esse projeto em um conjunto de dados próprio que esteja em um arquivo CSV (ou em qualquer outro arquivo), execute o comando abaixo no terminal do Cloud Shell para carregar seus dados em um conjunto de dados do BigQuery em uma tabela:

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. Criando conexão externa

Crie uma conexão externa (ative a API BQ Connection, se ainda não tiver feito isso) e anote o ID da conta de serviço nos detalhes de configuração da conexão:

  1. Clique no botão +ADICIONAR no painel do BigQuery Explorer (à esquerda do console do BigQuery) e clique em "Conexão com fontes de dados externas" nas fontes conhecidas listadas
  2. Selecione o tipo de conexão como "BigLake e funções remotas" e forneça "llm-conn" como o ID da conexão

6b75042881eaec5f.png

  1. Depois que a conexão for criada, anote a conta de serviço gerada com base nos detalhes da configuração da conexão

7. Conceder permissões

Nesta etapa, vamos conceder permissões à conta de serviço para acessar o serviço da Vertex AI:

Abra o IAM e adicione a conta de serviço que você copiou depois de criar a conexão externa como a principal e selecione "Usuário da Vertex AI" Função

ff8e1d730879f972.png

8. Criar um modelo de ML remoto

Crie o modelo remoto que representa um modelo de linguagem grande hospedado da Vertex AI:

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

Ele cria um modelo chamado llm_model no conjunto de dados bq_llm que usa a API CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 da Vertex AI como uma função remota. O processo vai levar vários segundos para ser concluído.

9. Gerar texto usando o modelo de ML

Depois de criado, o modelo pode ser usado para gerar, resumir ou categorizar textos.

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**Explicação:

ml_generate_text_result** é a resposta do modelo de geração de texto no formato JSON que contém atributos de conteúdo e segurança: a. O conteúdo representa o texto gerado. b. Os atributos de segurança representam o filtro de conteúdo integrado com um limite ajustável ativado na API Vertex AI Palm para evitar respostas não intencionais ou imprevistas do modelo de linguagem grande. A resposta será bloqueada se violar o limite de segurança.

ML.GENERATE_TEXT é a construção que você usa no BigQuery para acessar o LLM da Vertex AI e realizar tarefas de geração de texto.

CONCAT anexa sua instrução PROMPT e o registro do banco de dados

github_repos é o nome do conjunto de dados e sample_contents é o nome da tabela que contém os dados que vamos usar no design do comando

Temperatura é o parâmetro do comando para controlar a aleatoriedade da resposta. Quanto menor, melhor em termos de relevância.

Max_output_tokens é o número de palavras que você quer em resposta

A resposta da consulta é semelhante a esta:

1156f6eecb548cd5.png

10. Nivelar o resultado da consulta

Vamos nivelar o resultado para não precisar decodificar o JSON explicitamente na consulta:

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**Explicação:

Flatten_json_output** representa o booleano, que, se definido como verdadeiro, retorna um texto simples e compreensível extraído da resposta JSON.

A resposta da consulta é semelhante a esta:

3b662ef7d3ba9263.png

11. 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.

12. Parabéns

Parabéns! Você usou programaticamente um LLM de geração de texto da Vertex AI para realizar análises de texto nos seus dados usando apenas consultas SQL. Confira a documentação do produto LLM da Vertex AI para saber mais sobre os modelos disponíveis.