Richiama i modelli Gemini

Questo documento descrive come invocare i modelli Gemini per generare una risposta per input di testo e multimodali utilizzando l'SDK Vertex AI per ABAP. I modelli Gemini possono accettare più modalità di input, tra cui testo, immagini, video, audio e documenti. Puoi utilizzare i modelli Gemini per casi d'uso come i seguenti:

  • Riassumere un testo in formato libero
  • Descrivere o interpretare gli asset multimediali
  • Traduzione tra lingue

L'utilizzo di modelli generativi per creare funzionalità incentrate sull'IA non richiede alcuna competenza in materia di machine learning (ML). Non è necessario raccogliere un set di dati di grandi dimensioni o addestrare un modello. Per avviare il tuo primo programma, è sufficiente descrivere cosa vuoi che faccia il modello in poche frasi. L'SDK Vertex AI per ABAP fornisce classi e metodi ABAP per accedere ai modelli Gemini dal tuo ambiente SAP. Per iniziare, consulta questi esempi di codice.

Prima di iniziare

Prima di utilizzare l'SDK Vertex AI per ABAP con i modelli Gemini, assicurati che tu o i tuoi amministratori abbiate completato i seguenti prerequisiti:

Invia richiesta a Gemini

Questa sezione spiega come inviare richieste ai modelli Gemini tramite l'API Vertex AI utilizzando l'SDK Vertex AI per ABAP.

Crea un'istanza della classe di invocatore multimodale Gemini

Per richiamare i modelli di testo e multimodali di Gemini utilizzando prompt di testo o multimodali, puoi utilizzare la classe /GOOG/CL_GENERATIVE_MODEL. Puoi creare un'istanza della classe passando la chiave del modello configurata nei parametri di generazione del modello.

DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

Sostituisci MODEL_KEY con il nome della chiave del modello, configurata nei parametri di generazione del modello.

Generare contenuti con un prompt

Per generare contenuti fornendo al modello un prompt di testo, puoi utilizzare il metodo GENERATE_CONTENT.

lo_model->generate_content( 'PROMPT' ).

Sostituisci PROMPT con il prompt di testo.

Fornire istruzioni di sistema al modello

Per passare al modello istruzioni di sistema basate su testo, puoi utilizzare il metodo SET_SYSTEM_INSTRUCTIONS.

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

Sostituisci SYSTEM_INSTRUCTIONS con le istruzioni di sistema per il modello.

Aggiungere impostazioni di sicurezza

Per aggiungere impostazioni di sicurezza per consentire al modello di generare risposte, puoi utilizzare il metodo ADD_SAFETY_SETTINGS. Questa funzionalità viene utilizzata per imporre linee guida di sicurezza al modello al fine di bloccare i contenuti non sicuri.

lo_model->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                               iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                               iv_harm_block_method    = 'HARM_BLOCK_METHOD' ).

Sostituisci quanto segue:

A ogni chiamata del metodo, il metodo ADD_SAFETY_SETTINGS aggiunge le impostazioni di sicurezza specificate all'input del modello.

Imposta la configurazione di generazione per il modello

Gestisci la configurazione di generazione per i modelli nella tabella /GOOG/AI_CONFIG. Per sostituire la configurazione di generazione per una determinata chiamata, puoi utilizzare il metodo SET_GENERATION_CONFIG. Se il parametro di importazione per una proprietà di generazione è impostato, viene applicato il valore parametro passato.

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' ).

Sostituisci quanto segue:

  • RESPONSE_MIME_TYPE: tipo MIME di risposta per il modello.
  • TEMPERATURE: temperatura di casualità.
  • TOP_P: campionamento Top-P.
  • TOP_K: campionamento Top-K.
  • CANDIDATE_COUNT: numero di candidati da generare.
  • MAX_OUTPUT_TOKENS: numero massimo di token di output per messaggio
  • PRESENCE_PENALTY: penalità positive.
  • FREQUENCY_PENALTY: penalizzazioni per frequenza.

Per ulteriori informazioni su questi parametri, consulta Configurare i parametri di generazione del modello.

Passare l'input multimodale al modello

Puoi richiamare i modelli Gemini utilizzando input multimodali, che possono essere testo, immagini, video, documenti o una combinazione di questi. Puoi passare l'input come dati non elaborati o fornendo l'URI Cloud Storage degli oggetti file.

Impostare i dati non elaborati

Per fornire i dati non elaborati di un file come input al modello, insieme al relativo tipo MIME, puoi utilizzare il metodo SET_INLINE_DATA. Per gli input video, per prendere in considerazione solo una parte specifica di un video, puoi impostare l'ora di inizio e l'ora di fine utilizzando i parametri facoltativi di importazione IV_VIDEO_START_OFFSET e IV_VIDEO_END_OFFSET, rispettivamente.

lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
                           iv_data      = 'RAW_DATA' ).

Sostituisci quanto segue:

  • MIME_TYPE: il tipo MIME standard IANA dei dati non elaborati. Per impostazione predefinita, il tipo MIME è impostato su application/pdf.
  • RAW_DATA: i dati non elaborati codificati in Base64 dell'immagine, del PDF o del video da includere in linea nel prompt.

Per cancellare i dati non elaborati dei file dall'input del modello con la stessa istanza della classe /GOOG/CL_GENERATIVE_MODEL, puoi utilizzare il metodo CLEAR_INLINE_DATA.

lo_model->clear_inline_data( ).

Impostare oggetti da Cloud Storage

Per fornire l'URI di un oggetto file archiviato in un bucket Cloud Storage come input per il modello, insieme al tipo MIME, puoi utilizzare il metodo SET_FILE_DATA. Per gli input video, per prendere in considerazione solo una parte specifica di un video, puoi impostare l'ora di inizio e l'ora di fine utilizzando i parametri facoltativi di importazione IV_VIDEO_START_OFFSET e IV_VIDEO_END_OFFSET, rispettivamente.

lo_model->set_file_data( iv_mime_type = 'MIME_TYPE'
                         iv_file_uri  = 'FILE_URI' ).

Sostituisci quanto segue:

  • MIME_TYPE: il tipo MIME standard IANA dei dati del file. Per impostazione predefinita, il tipo MIME è impostato su application/pdf.
  • FILE_URI: l'URI del file archiviato in un bucket Cloud Storage.

Se vuoi passare tutti i file presenti in un bucket Cloud Storage come input al modello, utilizza il metodo SET_FILES_FROM_GCS per specificare il nome del bucket Cloud Storage di destinazione.

lo_model->set_files_from_gcs( iv_storage_bucket_name = 'STORAGE_BUCKET_NAME').

Sostituisci STORAGE_BUCKET_NAME con il nome del bucket Cloud Storage che contiene i file.

Se hai una chiave client separata per chiamare l'API Cloud Storage tramite l'ABAP SDK for Google Cloud, passa il nome della chiave client nel parametro di importazione IV_KEY_NAME.

Per cancellare gli oggetti impostati tramite gli URI di Cloud Storage dall'input del modello con la stessa istanza della classe /GOOG/CL_GENERATIVE_MODEL, puoi utilizzare il metodo CLEAR_FILE_DATA.

lo_model->clear_file_data( ).

Imposta il tipo MIME di risposta

Per impostare il tipo MIME della risposta con cui il modello risponde, puoi utilizzare il metodo SET_RESPONSE_MIME_TYPE. Se non è impostato, per impostazione predefinita il modello prende text/plain come tipo MIME di risposta.

lo_model->set_response_mime_type( iv_mime_type = 'RESPONSE_MIME_TYPE' ).

Sostituisci RESPONSE_MIME_TYPE con il tipo MIME della risposta dei contenuti generati.

Contare il numero di token in un prompt di testo

Per contare il numero di token in un prompt di testo prima di invocare il modello con il prompt, puoi utilizzare il metodo 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( ).

Sostituisci quanto segue:

Ricevere una risposta da Gemini

Per ricevere le risposte elaborate dal modello e presentarle in modo significativo per gli sviluppatori ABAP, l'SDK fornisce la classe/GOOG/CL_MODEL_RESPONSE.

La risposta acquisita dalla classe /GOOG/CL_MODEL_RESPONSE è collegata alle richieste effettuate tramite i metodi della classe /GOOG/CL_MODEL_RESPONSE, in modo da poter accedere direttamente alla risposta in un'unica istruzione senza dover utilizzare variabili per memorizzare i risultati intermedi./GOOG/CL_GENERATIVE_MODEL

Ricevere una risposta via SMS

Per ricevere una risposta di testo dal modello, puoi utilizzare il metodo GET_TEXT.

DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
                                )->get_text( ).

Sostituisci PROMPT con il prompt di testo.

Ottenere la valutazione di sicurezza

Per ricevere un elenco di valutazioni per la sicurezza della risposta del modello, puoi utilizzare il metodo GET_SAFETY_RATING.

DATA(lt_safety_ratings) = lo_model->generate_content( 'PROMPT'
                                 )->get_safety_rating( ).

Sostituisci PROMPT con il prompt di testo.

Ottenere il numero di token nel prompt della richiesta

Per ricevere il numero di token nel prompt di input al modello, puoi utilizzare il metodo GET_PROMPT_TOKEN_COUNT.

DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
                                     )->get_prompt_token_count( ).

Sostituisci PROMPT con il prompt di testo.

Ottenere il numero di token nella risposta del modello

Per ricevere il numero di token nella risposta del modello, puoi utilizzare il metodo GET_CANDIDATES_TOKEN_COUNT.

DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
                                         )->get_candidates_token_count( ).

Sostituisci PROMPT con il prompt di testo.

Ottenere il motivo del blocco

Per ricevere il motivo per cui il modello ha bloccato la generazione della risposta, puoi utilizzare il metodo GET_BLOCK_REASON.

DATA(lv_block_reason) = lo_model->generate_content( 'PROMPT'
                               )->get_block_reason( ).

Sostituisci PROMPT con il prompt di testo.

Ricevere un messaggio con il motivo del blocco

Per ricevere un messaggio di motivo leggibile per il blocco della generazione della risposta da parte del modello, puoi utilizzare il metodo GET_BLOCK_REASON_MESSAGE.

DATA(lv_block_reason_message) = lo_model->generate_content( 'PROMPT'
                                       )->get_block_reason_message( ).

Sostituisci PROMPT con il prompt di testo.

Esempi di codice

I seguenti esempi di codice mostrano come invocare i modelli Gemini per generare una risposta per diversi tipi di input.

Generazione basata su testo

Il seguente esempio di codice mostra come generare una risposta da un prompt di testo insieme a un'istruzione di sistema. L'istruzione di sistema è facoltativa e può essere passata insieme al prompt per indicare al modello di comportarsi in un determinato modo.

Esempio di codice

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.

Sostituisci quanto segue:

Generazione multimodale

Il seguente esempio di codice mostra come generare una risposta da un input multimodale, ad esempio testo e un'immagine. Puoi menzionare l'URI Cloud Storage o i dati non elaborati di un'immagine, un video o un documento insieme a un prompt di testo. L'istruzione di sistema è facoltativa e può essere comunicata insieme al prompt per indicare al modello di comportarsi in un determinato modo.

Esempio di codice

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.

Sostituisci quanto segue:

  • MODEL_KEY: il nome della chiave del modello, configurato nei parametri di generazione del modello.
  • PROMPT: il prompt di testo.
  • SYSTEM_INSTRUCTIONS: l'istruzione di sistema per il modello.
  • MIME_TYPE: il tipo MIME standard IANA dei dati del file. Per impostazione predefinita, il tipo MIME è impostato su application/pdf.
  • FILE_URI: l'URI del file archiviato in un bucket Cloud Storage.
  • INLINE_DATA: i dati non elaborati codificati in Base64 dell'immagine, del PDF o del video da includere in linea nel prompt.

Aggiungere le impostazioni di sicurezza per il modello

Il seguente esempio di codice mostra come aggiungere impostazioni di sicurezza per consentire al modello di generare una risposta.

Esempio di codice

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.

Sostituisci quanto segue:

  • MODEL_KEY: il nome della chiave del modello, configurato nei parametri di generazione del modello.
  • PROMPT: il prompt di testo.
  • SYSTEM_INSTRUCTIONS: l'istruzione di sistema per il modello.
  • MIME_TYPE: il tipo MIME standard IANA dei dati del file. Per impostazione predefinita, il tipo MIME è impostato su application/pdf.
  • FILE_URI: l'URI del file archiviato in un bucket Cloud Storage.
  • INLINE_DATA: i dati non elaborati codificati in Base64 dell'immagine, del PDF o del video da includere in linea nel prompt.
  • HARM_CATEGORY: la Categoria di danno che vuoi applicare.
  • HARM_BLOCK_THRESHOLD: il livello delle soglie basato sulla probabilità che vuoi applicare.
  • HARM_BLOCK_METHOD: il metodo di blocco dei contenuti dannosi che vuoi applicare.

Trovare il numero di token e caratteri fatturabili in un prompt

Prima di richiamare il modello con un prompt, ti consigliamo di controllare il numero di token nel prompt e il numero di caratteri fatturabili presenti nel token per pianificare la fatturazione del progetto Google Cloud. Il seguente esempio di codice mostra come trovare questi numeri e valutare la fatturazione per una chiamata di modello simile.

Esempio di codice

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.

Sostituisci quanto segue:

Passaggi successivi