Receber insights do Gemini sobre dados do BigQuery

O SDK de IA e ML do BigQuery para ABAP permite usar consultas do Gemini nos dados corporativos armazenados no BigQuery e retornar os resultados dos agentes ou aplicativos baseados em ABAP. Com o SDK, você pode usar os modelos do Gemini para fazer o seguinte:

  • Gerar insights de dados de texto no BigQuery
  • Gerar insights de dados de imagens ou vídeos no BigQuery

É possível executar insights com base no Gemini nos dados corporativos armazenados nos conjuntos de dados do BigQuery usando a função ML.GENERATE_TEXT.

Para acessar os modelos Gemini na Vertex AI, crie um modelo remoto no BigQuery ML que represente o endpoint do modelo da Vertex AI. Depois de criar um modelo remoto sobre o modelo da Vertex AI que você quer usar, é possível acessar os recursos desse modelo executando a função do BigQuery ML no modelo remoto.

Antes de começar

Antes de usar o SDK de IA e ML do BigQuery para ABAP com os modelos Gemini, verifique se você ou seus administradores concluíram os seguintes pré-requisitos:

Preços

O SDK de IA e ML do BigQuery para ABAP é oferecido sem custos financeiros. No entanto, você é responsável pelas cobranças nas plataformas BigQuery e Vertex AI da seguinte maneira:

  • BigQuery ML: há cobrança pelos dados processados no BigQuery.
  • Vertex AI: haverá custos pelas chamadas para o serviço da Vertex AI representado pelo modelo remoto.

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.

Para mais informações sobre os preços do BigQuery, consulte a página Preços do BigQuery.

Para mais informações sobre os preços da Vertex AI, consulte a página Preços da Vertex AI.

Executar consultas do Gemini no BigQuery

Esta seção explica como gerar insights com base no Gemini a partir de dados corporativos no BigQuery usando o SDK de IA e ML do BigQuery para ABAP.

A classe ABAP /GOOG/CL_BQ_GENERATIVE_MODEL enviada com o SDK permite executar consultas do Gemini usando a função ML.GENERATE_TEXT do BigQuery.

Definir consulta do Gemini

É possível usar o SDK para executar consultas do Gemini das seguintes maneiras:

  • Salve a consulta para executar o Gemini no BigQuery. Use a classe /GOOG/CL_BQ_QUERY e forneça o nome da consulta salva quando você instanciar a classe na lógica do aplicativo.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_name  = 'SAVED_QUERY_NAME' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    Substitua:

    • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
    • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
    • SAVED_QUERY_NAME: o nome da consulta em que a consulta é salva no BigQuery.
  • Transmita o texto da consulta para invocar o Gemini ao instanciar a classe /GOOG/CL_BQ_QUERY da lógica do aplicativo.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_text  = 'QUERY_TEXT' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    Substitua:

    • CLIENT_KEY: a chave de cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.
    • QUERY_LOCATION_ID: o Google Cloud local em que a consulta é salva.
    • QUERY_TEXT: o texto da consulta que você quer executar com o Gemini.

Quando você instancia a classe /GOOG/CL_BQ_QUERY com o nome da consulta salva ou o texto da consulta direta, ela define a consulta na classe. Em seguida, você pode transmitir a referência de classe como entrada para a classe ABAP /GOOG/CL_BQ_GENERATIVE_MODEL para invocar a consulta.

Instancie a classe de invocação do Gemini do BigQuery

Para invocar os modelos multimodais e de texto do Gemini em conjuntos de dados do BigQuery, use a classe /GOOG/CL_BQ_GENERATIVE_MODEL.

TRY.
    DATA(lo_bq_generative_model) = NEW /goog/cl_bq_generative_model( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Substitua CLIENT_KEY pela chave do cliente configurada para autenticação em Google Cloud durante a configuração de autenticação.

Executar consulta do Gemini

Para executar consultas do Gemini com a função ML.GENERATE_TEXT do BigQuery, use o método EXECUTE_QUERY da classe /GOOG/CL_BQ_GENERATIVE_MODEL. O objeto da classe /GOOG/CL_BQ_QUERY definido com a consulta é transmitido como uma entrada para o método.

lo_bq_generative_model->execute_query( io_query = lo_bq_query ).

LO_BQ_QUERY é a referência da classe /GOOG/CL_BQ_QUERY após definir a consulta.

Modificar os parâmetros de geração de modelos

É possível definir os parâmetros de geração do modelo Gemini em uma consulta salva no BigQuery ou no texto de consulta transmitido. No entanto, se você precisar substituir os parâmetros da mesma consulta da lógica do aplicativo ABAP, use o método SET_GENERATION_CONFIG da classe /GOOG/CL_BQ_GENERATIVE_MODEL. Os parâmetros de geração na consulta inicial são substituídos pelos parâmetros transmitidos por esse método.

DATA lt_stop_sequences TYPE /goog/cl_bigquery_v2=>ty_t_string.
DATA lt_safety_settings TYPE /goog/cl_bq_generative_model=>ty_t_safety_settings.
DATA ls_safety_settings TYPE /goog/cl_bq_generative_model=>ty_safety_setting.

APPEND 'STOP_SEQUENCE' TO lt_stop_sequences.

ls_safety_settings-category = 'CATEGORY'.
ls_safety_settings-threshold = 'THRESHOLD'.

APPEND ls_safety_settings TO lt_safety_settings.

lo_bq_generative_model->set_generation_config( iv_temperature               = 'TEMPERATURE'
                               iv_top_p                     = 'TOP_P'
       iv_top_k                     = 'TOP_K'
       iv_max_output_tokens         = 'MAX_OUTPUT_TOKENS'
       iv_flatten_json_output       = 'IS_FLATTEN_JSON_OUTPUT'
       iv_ground_with_google_search = 'IS_GROUND_WITH_GOOGLE_SEARCH'
it_stop_sequences            = lt_stop_sequences
it_safety_settings           = lt_safety_settings ).

Substitua:

  • STOP_SEQUENCE: o valor que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo.
  • CATEGORY: a categoria de segurança de conteúdo para filtrar respostas. Procure valores prováveis do argumento de configurações de segurança na sintaxe de entrada para ML.GENERATE_TEXT.
  • THRESHOLD: o limite de bloqueio correspondente para filtrar respostas. Procure valores prováveis do argumento de configurações de segurança na sintaxe de entrada para ML.GENERATE_TEXT.
  • TEMPERATURE: o valor que controla o grau de aleatoriedade na seleção de token.
  • TOP_P: o valor que muda a forma como o modelo seleciona tokens para saída.
  • TOP_K: o valor que muda a forma como o modelo seleciona tokens para saída.
  • MAX_OUTPUT_TOKENS: o valor que define o número máximo de tokens que podem ser gerados na resposta.
  • IS_FLATTEN_JSON_OUTPUT: um valor booleano que determina se o conteúdo JSON retornado pela função é analisado em colunas separadas.
  • IS_GROUND_WITH_GOOGLE_SEARCH: um valor booleano que determina se o modelo da Vertex AI usa o Embasamento com a Pesquisa Google ao gerar respostas.

Conferir os resultados das consultas do Gemini

Para receber respostas processadas do BigQuery ML para consultas do Gemini e apresentá-las de maneira significativa, use a classe /GOOG/CL_BQ_MODEL_RESPONSE.

A resposta capturada pela classe /GOOG/CL_BQ_MODEL_RESPONSE é encadeada às solicitações feitas pelos métodos da classe /GOOG/CL_BQ_GENERATIVE_MODEL para que você possa acessar diretamente a resposta em uma única instrução sem precisar de variáveis para armazenar os resultados intermediários.

Receber resposta de texto

Para receber uma resposta de texto do modelo, use o método GET_TEXT_RESPONSE.

DATA(lt_bq_response) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                            )->get_text_response( ).

Conferir o status do job de consulta

Cada consulta no BigQuery é executada como um job de consulta. Para conferir o status do job de consulta, use o método GET_QUERY_JOB_STATUS.

lo_bq_generative_model->execute_query( io_query = lo_bq_query
                     )->get_query_job_status(
IMPORTING ev_job_complete          = DATA(lv_job_complete)
  ev_job_creation_reason   = DATA(lv_job_creation_reason)
  ev_job_id                = DATA(lv_job_id)
  ev_query_id              = DATA(lv_query_id)
  ev_total_bytes_processed = DATA(lv_total_bytes_processed)
  ev_total_rows            = DATA(lv_total_rows) ).

O método retorna as seguintes métricas de status do job:

  • Se a consulta foi concluída ou não
  • O motivo da criação de um job
  • Referência ao job que foi criado para executar a consulta
  • ID gerado automaticamente para a consulta
  • O número total de bytes processados para esta consulta
  • O número total de linhas no conjunto de resultados da consulta

Receber erros de jobs de consulta

Para buscar os erros (se houver), use o método GET_QUERY_JOB_ERRORS.

DATA(lt_query_job_errors) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                 )->get_query_job_errors( ).

Receber o motivo do término

Para saber o motivo pelo qual o modelo parou de gerar tokens para cada linha, use o método GET_FINISH_REASON.

DATA(lt_finish_reason) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                              )->get_finish_reason( ).

Receber metadados de uso

Para conferir os metadados de uso sobre a resposta gerada para cada linha, use o método GET_USAGE_METADATA .

DATA(lt_usage_metadata) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_usage_metadata( ).

Os metadados de uso consistem nas seguintes métricas:

  • Contagem total de tokens na resposta de uma linha
  • Contagem de tokens no comando de entrada
  • Contagem total de tokens

Receber classificação de segurança

Para conferir a classificação de segurança da resposta, use o método GET_SAFETY_RATING. As classificações de segurança precisam ser definidas como parâmetros de geração de modelos na consulta de entrada para receber a classificação de segurança da resposta.

DATA(lt_safety_ratings) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_safety_rating( ).

Receber a tabela de respostas geral

Para acessar a tabela de respostas geral da consulta do Gemini que você executou, use o método GET_RESPONSE_TABLE.

lo_bq_model_response->get_response_table(
IMPORTING et_bqml_response              = DATA(lt_bqml_response)
                  et_bqml_response_flatten_json = DATA(lt_bqml_response_flatten_json)
                  et_bqml_response_grounding    = DATA(lt_bqml_response_grounding) ).

Apenas uma tabela de resposta é preenchida com base no parâmetro de geração definido na consulta:

  • ET_BQML_RESPONSE é preenchido quando o parâmetro FLATTEN_JSON_OUTPUT não é definido como TRUE na consulta de entrada.
  • ET_BQML_RESPONSE_FLATTEN_JSON é preenchido quando o parâmetro FLATTEN_JSON_OUTPUT é definido como TRUE na consulta de entrada.
  • ET_BQML_RESPONSE_GROUNDING é preenchido quando o parâmetro FLATTEN_JSON_OUTPUT é definido como TRUE na consulta de entrada e o parâmetro GROUNDING_WITH_GOOGLE_SEARCH também é definido como TRUE na consulta de entrada.

Acessar a fonte de embasamento

Para listar as fontes de fundamentação que o modelo usou para gerar as respostas, use o método GET_GROUNDING_SOURCE.

DATA(lt_query_grounding_sources) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                        )->get_grounding_source( ).