Este documento descreve como invocar os modelos do Gemini para gerar respostas para entrada de texto e multimodais usando o SDK da Vertex AI para ABAP. Os modelos Gemini podem aceitar vários modos de entrada, incluindo texto, imagem, vídeo, áudio e documentos. É possível usar os modelos do Gemini para casos de uso como estes:
- Resumir texto em formato livre
- Como descrever ou interpretar recursos de mídia
- Como traduzir entre idiomas
O uso de modelos generativos para criar recursos centrados em IA não exige nenhuma experiência em aprendizado de máquina (ML). Você não precisa coletar um grande conjunto de dados ou treinar um modelo. Para iniciar seu primeiro programa, basta descrever o que você quer que o modelo faça em algumas frases. O SDK da Vertex AI para ABAP oferece classes e métodos ABAP para acessar os modelos Gemini no seu ambiente SAP. Para começar, confira estes exemplos de código.
Antes de começar
Antes de usar o SDK da Vertex AI para ABAP com os modelos Gemini, verifique se você ou seus administradores concluíram os seguintes pré-requisitos:
- Ativar a API Vertex AI no seu projeto do Google Cloud.
- Instalou o SDK da Vertex AI para ABAP no seu ambiente SAP.
- Configure a autenticação para acessar a API Vertex AI.
- Configurou os parâmetros de geração de modelos.
Enviar solicitação para o Gemini
Esta seção explica como enviar solicitações para modelos do Gemini usando a API Vertex AI com o SDK da Vertex AI para ABAP.
Criar a classe de invocação multimodal do Gemini
Para invocar os modelos de texto e
multimodal do Gemini usando comandos de texto ou multimodais, use
a classe /GOOG/CL_GENERATIVE_MODEL
.
Você instancia a classe
transmitindo a chave de modelo configurada nos parâmetros de geração de modelos.
DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
Substitua MODEL_KEY
pelo nome da chave do modelo, que é configurado
nos parâmetros de geração de modelo.
Gerar conteúdo com um comando
Para gerar conteúdo fornecendo
um comando de texto ao modelo, use o
método GENERATE_CONTENT
.
lo_model->generate_content( 'PROMPT' ).
Substitua PROMPT
pelo comando de texto.
Fornecer instruções do sistema ao modelo
Para transmitir instruções do sistema com base em texto para o modelo,
use o método SET_SYSTEM_INSTRUCTIONS
.
lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).
Substitua SYSTEM_INSTRUCTIONS
pelas instruções do sistema para o modelo.
Adicionar configurações de segurança
Para adicionar configurações de segurança ao modelo para gerar respostas, use o método ADD_SAFETY_SETTINGS
.
Esse recurso é usado para impor diretrizes de segurança ao modelo para bloquear
conteúdo inseguro.
lo_model->add_safety_settings( iv_harm_category = 'HARM_CATEGORY'
iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
iv_harm_block_method = 'HARM_BLOCK_METHOD' ).
Substitua:
HARM_CATEGORY
: a categoria de dano que você quer aplicar.HARM_BLOCK_THRESHOLD
: o nível de limites com base na probabilidade que você quer aplicar.HARM_BLOCK_METHOD
: o método de bloqueio de danos que você quer aplicar.
Com cada chamada de método, o método ADD_SAFETY_SETTINGS
adiciona as configurações de segurança
especificadas à entrada do modelo.
Definir a configuração de geração do modelo
Você mantém a configuração de geração dos modelos na tabela /GOOG/AI_CONFIG
.
Para substituir a configuração de geração de uma chamada específica, use
o método SET_GENERATION_CONFIG
.
Se o parâmetro de importação de uma propriedade de geração estiver definido, o valor do parâmetro
transmitido será aplicado.
lo_model->set_generation_config( iv_response_mime_type = 'RESPONSE_MIME_TYPE'
iv_temperature = 'TEMPERATURE'
iv_top_p = 'TOP_P'
iv_top_k = 'TOP_K'
iv_candidate_count = 'CANDIDATE_COUNT'
iv_max_output_tokens = 'MAX_OUTPUT_TOKENS'
iv_presence_penalty = 'PRESENCE_PENALTY'
iv_frequency_penalty = 'FREQUENCY_PENALTY' ).
Substitua:
RESPONSE_MIME_TYPE
: tipo MIME da resposta para o modelo.TEMPERATURE
: temperatura da aleatoriedade.TOP_P
: amostragem top-P.TOP_K
: amostragem Top-K.CANDIDATE_COUNT
: número de candidatos a serem gerados.MAX_OUTPUT_TOKENS
: número máximo de tokens de saída por mensagemPRESENCE_PENALTY
: penalidades positivas.FREQUENCY_PENALTY
: penalidades de frequência.
Para mais informações sobre esses parâmetros, consulte Configurar parâmetros de geração de modelos.
Transmitir entrada multimodal para o modelo
É possível invocar os modelos Gemini usando entrada multimodal, que pode ser texto, imagem, vídeo, documentos ou uma combinação deles. É possível transmitir a entrada como dados brutos ou fornecendo o URI do Cloud Storage dos objetos de arquivo.
Definir dados brutos
Para fornecer os dados brutos de um arquivo como entrada para o modelo,
junto com o tipo MIME, use o método SET_INLINE_DATA
.
Para considerar apenas uma parte específica de um vídeo,
use os parâmetros de importação opcionais IV_VIDEO_START_OFFSET
e IV_VIDEO_END_OFFSET
, respectivamente.
lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'RAW_DATA' ).
Substitua:
MIME_TYPE
: o tipo MIME padrão IANA dos dados brutos. Por padrão, o tipo MIME é definido comoapplication/pdf
.RAW_DATA
: dados brutos codificados em base64 da imagem, do PDF ou do vídeo a ser incluído inline no comando.
Para limpar os dados brutos dos arquivos da entrada do modelo com a mesma instância da
classe /GOOG/CL_GENERATIVE_MODEL
, use o método CLEAR_INLINE_DATA
.
lo_model->clear_inline_data( ).
Definir objetos do Cloud Storage
Para fornecer o URI de um objeto de arquivo armazenado em um bucket do Cloud Storage como entrada para o modelo, junto com o tipo MIME, use o método SET_FILE_DATA
.
Para considerar apenas uma parte específica de um vídeo,
use os parâmetros de importação opcionais IV_VIDEO_START_OFFSET
e IV_VIDEO_END_OFFSET
, respectivamente.
lo_model->set_file_data( iv_mime_type = 'MIME_TYPE'
iv_file_uri = 'FILE_URI' ).
Substitua:
MIME_TYPE
: o tipo MIME padrão IANA dos dados do arquivo. Por padrão, o tipo MIME é definido comoapplication/pdf
.FILE_URI
: o URI do arquivo armazenado em um bucket do Cloud Storage.
Se você quiser transmitir todos os arquivos presentes em um bucket do Cloud Storage como entrada para o modelo, use o método SET_FILES_FROM_GCS
para especificar o nome do bucket de destino do Cloud Storage.
lo_model->set_files_from_gcs( iv_storage_bucket_name = 'STORAGE_BUCKET_NAME').
Substitua STORAGE_BUCKET_NAME
pelo nome do bucket do Cloud Storage que
contém os arquivos.
Se você tiver uma chave de cliente separada para invocar a API Cloud Storage
pelo ABAP SDK for Google Cloud, transmita o nome da chave de cliente no
parâmetro de importação IV_KEY_NAME
.
Para limpar os objetos definidos por URIs do Cloud Storage da entrada do modelo
com a mesma instância da classe /GOOG/CL_GENERATIVE_MODEL
,
use o método CLEAR_FILE_DATA
.
lo_model->clear_file_data( ).
Definir o tipo MIME da resposta
Para definir o tipo MIME da resposta
que o modelo responde, use o método SET_RESPONSE_MIME_TYPE
.
Se não for definido, o modelo vai usar text/plain
como o tipo MIME da resposta por padrão.
lo_model->set_response_mime_type( iv_mime_type = 'RESPONSE_MIME_TYPE' ).
Substitua RESPONSE_MIME_TYPE
pelo tipo MIME da resposta do conteúdo gerado.
Contar o número de tokens em um comando de texto
Para contar o número de tokens em um comando de texto antes de invocar o
modelo com o comando, use o método COUNT_TOKENS
.
DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text = 'PROMPT'
iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
)->get_total_tokens( ).
DATA(lv_total_billable_characters) = lo_model->count_tokens(
iv_prompt_text = 'PROMPT'
iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
)->get_total_billable_characters( ).
Substitua:
PROMPT
: o texto do comando.SYSTEM_INSTRUCTIONS
: sua instrução do sistema para o modelo.
Receber resposta do Gemini
Para receber respostas processadas do modelo e apresentá-las de uma maneira
significativa para os desenvolvedores ABAP, o SDK fornece a classe
/GOOG/CL_MODEL_RESPONSE
.
A resposta capturada pela classe /GOOG/CL_MODEL_RESPONSE
é vinculada às
solicitações feitas pelos métodos da classe /GOOG/CL_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 por texto
Para receber uma resposta de texto do modelo, use o método GET_TEXT
.
DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
)->get_text( ).
Substitua PROMPT
pelo comando de texto.
Receber classificação de segurança
Para receber uma lista de classificações sobre a segurança da resposta do modelo,
use o método GET_SAFETY_RATING
.
DATA(lt_safety_ratings) = lo_model->generate_content( 'PROMPT'
)->get_safety_rating( ).
Substitua PROMPT
pelo comando de texto.
Receber o número de tokens no comando de solicitação
Para receber o número de tokens na solicitação de entrada para o modelo,
use o método GET_PROMPT_TOKEN_COUNT
.
DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
)->get_prompt_token_count( ).
Substitua PROMPT
pelo comando de texto.
Conferir o número de tokens na resposta do modelo
Para receber o número de tokens na resposta do modelo,
use o método GET_CANDIDATES_TOKEN_COUNT
.
DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
)->get_candidates_token_count( ).
Substitua PROMPT
pelo comando de texto.
Receber o motivo do bloqueio
Para receber o motivo pelo qual o modelo bloqueou a geração de respostas,
use o método GET_BLOCK_REASON
.
DATA(lv_block_reason) = lo_model->generate_content( 'PROMPT'
)->get_block_reason( ).
Substitua PROMPT
pelo comando de texto.
Receber a mensagem do motivo do bloqueio
Para receber uma mensagem de motivo legível para bloquear a geração de respostas pelo modelo,
use o método GET_BLOCK_REASON_MESSAGE
.
DATA(lv_block_reason_message) = lo_model->generate_content( 'PROMPT'
)->get_block_reason_message( ).
Substitua PROMPT
pelo comando de texto.
Amostras de código
Os exemplos de código abaixo demonstram como invocar os modelos Gemini para gerar respostas para vários tipos de entrada.
Geração baseada em texto
O exemplo de código abaixo mostra como gerar uma resposta de um comando de texto com uma instrução do sistema. A instrução do sistema é opcional e pode ser transmitida com o comando para instruir o modelo a se comportar de uma maneira específica.
Exemplo de código
DATA:
lv_instruction TYPE string,
lv_prompt TYPE string.
lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
)->generate_content( lv_prompt
)->get_text( ).
IF lv_response IS NOT INITIAL.
cl_demo_output=>display( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
Substitua:
MODEL_KEY
: o nome da chave do modelo, que é configurado nos parâmetros de geração de modelo.PROMPT
: o texto do comando.SYSTEM_INSTRUCTIONS
: suas instruções do sistema para o modelo.
Geração multimodal
O exemplo de código abaixo mostra como gerar uma resposta com base em uma entrada multimodal, como texto e imagem. É possível mencionar o URI do Cloud Storage ou dados de arquivo brutos de uma imagem, vídeo ou documento com um comando de texto. A instrução do sistema é opcional e pode ser transmitida com o comando para instruir o modelo a se comportar de uma maneira específica.
Exemplo de código
DATA:
lv_instruction TYPE string,
lv_prompt TYPE string.
lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
)->set_file_data( iv_mime_type = 'MIME_TYPE'
iv_file_uri = 'FILE_URI'
)->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'INLINE_DATA'
)->generate_content( lv_prompt
)->get_text( ).
IF lv_response IS NOT INITIAL.
cl_demo_output=>display( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
Substitua:
MODEL_KEY
: o nome da chave do modelo, que é configurado nos parâmetros de geração de modelo.PROMPT
: o texto do comando.SYSTEM_INSTRUCTIONS
: sua instrução do sistema para o modelo.MIME_TYPE
: o tipo MIME padrão IANA dos dados do arquivo. Por padrão, o tipo MIME é definido comoapplication/pdf
.FILE_URI
: o URI do arquivo armazenado em um bucket do Cloud Storage.INLINE_DATA
: dados brutos codificados em base64 da imagem, do PDF ou do vídeo a ser incluído inline no comando.
Adicionar configurações de segurança para o modelo
O exemplo de código abaixo mostra como adicionar configurações de segurança para que o modelo gere uma resposta.
Exemplo de código
DATA:
lv_instruction TYPE string,
lv_prompt TYPE string.
lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
)->set_file_data( iv_mime_type = 'MIME_TYPE'
iv_file_uri = 'FILE_URI'
)->set_inline_data( iv_mime_type = 'MIME_TYPE'
iv_data = 'INLINE_DATA'
)->add_safety_settings( iv_harm_category = 'HARM_CATEGORY'
iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
iv_harm_block_method = 'HARM_BLOCK_METHOD'
)->generate_content( lv_prompt
)->get_text( ).
IF lv_response IS NOT INITIAL.
cl_demo_output=>display( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
Substitua:
MODEL_KEY
: o nome da chave do modelo, que é configurado nos parâmetros de geração de modelo.PROMPT
: o texto do comando.SYSTEM_INSTRUCTIONS
: sua instrução do sistema para o modelo.MIME_TYPE
: o tipo MIME padrão IANA dos dados do arquivo. Por padrão, o tipo MIME é definido comoapplication/pdf
.FILE_URI
: o URI do arquivo armazenado em um bucket do Cloud Storage.INLINE_DATA
: dados brutos codificados em base64 da imagem, do PDF ou do vídeo a ser incluído inline no comando.HARM_CATEGORY
: a categoria de dano que você quer aplicar.HARM_BLOCK_THRESHOLD
: o nível de limites com base na probabilidade que você quer aplicar.HARM_BLOCK_METHOD
: o método de bloqueio de danos que você quer aplicar.
Encontrar o número de tokens e caracteres faturáveis em um comando
Antes de invocar o modelo com um comando, verifique o número de tokens no comando e quantos caracteres faturáveis estão presentes no token para planejar o faturamento do projeto do Google Cloud. O exemplo de código abaixo mostra como encontrar esses números e avaliar o faturamento da chamada de modelo semelhante.
Exemplo de código
DATA:
lv_prompt TYPE string.
lv_prompt = 'PROMPT'.
TRY.
DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
)->get_total_tokens( ).
DATA(lv_total_billable_characters) = lo_model->count_tokens( lv_prompt
)->get_total_billable_characters( ).
IF lv_total_tokens IS NOT INITIAL.
cl_demo_output=>display( 'Total Tokens -' && lv_total_tokens ).
ENDIF.
IF lv_total_billable_characters IS NOT INITIAL.
cl_demo_output=>display( 'Total Billable Characters -' && lv_total_billable_characters ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
Substitua:
PROMPT
: o texto do comando.MODEL_KEY
: o nome da chave do modelo, que é configurado nos parâmetros de geração de modelo.
A seguir
Saiba mais sobre o desenvolvimento de aplicativos com a edição local ou na nuvem do ABAP SDK for Google Cloud.
Faça suas perguntas e converse sobre o SDK da Vertex AI para ABAP com a comunidade em Fóruns do Cloud.