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
  • Descrizione o interpretazione degli asset multimediali
  • Traduzione da una lingua all'altra

L'utilizzo di modelli generativi per creare funzionalità incentrate sull'AI non richiede alcuna esperienza nel 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 Gemini personalizzati, accertati 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.

Creare un'istanza per la classe callback 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.

Genera contenuti con un prompt

Generare contenuti fornendo un prompt di testo al modello, puoi utilizzare GENERATE_CONTENT.

lo_model->generate_content( 'PROMPT' ).

Sostituisci PROMPT con il prompt di testo.

Fornisci 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 del modello.

Aggiungi 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 per 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 è impostato il parametro di importazione per una proprietà di generazione, viene restituito viene attivato.

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, considera solo una parte specifica di un video: puoi impostare l'ora di inizio e l'ora di fine utilizzando il menu facoltativo rispettivamente IV_VIDEO_START_OFFSET e IV_VIDEO_END_OFFSET.

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

Imposta oggetti da Cloud Storage

Per fornire l'URI di un oggetto file archiviato in un come input del modello, insieme al tipo MIME, puoi usare il metodo SET_FILE_DATA. Per gli input video, considera solo una parte specifica di un video: puoi impostare l'ora di inizio e l'ora di fine utilizzando il menu facoltativo rispettivamente IV_VIDEO_START_OFFSET e IV_VIDEO_END_OFFSET.

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 tipo MIME della risposta

Per impostare il tipo MIME della risposta con cui il modello risponde, puoi usare 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 di risposta dei contenuti generati.

Conta il numero di token in un prompt di testo

a contare il numero di token in un prompt di testo prima di richiamare il metodo modello con il prompt, puoi usare 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:

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

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 tuo 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 usare 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 tuo 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.

Ricevi messaggio del motivo del blocco

Per ricevere un messaggio di motivazione leggibile per il blocco della generazione di risposte da parte del modello, puoi usare il metodo GET_BLOCK_REASON_MESSAGE.

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

Sostituisci PROMPT con il tuo prompt di testo.

Esempi di codice

I seguenti esempi di codice mostrano come richiamare il metodo Modelli Gemini per generare risposte per tipi diversi di input.

Generazione basata su testo

Il seguente esempio di codice mostra come generare una risposta da un prompt di testo insieme con 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 trasmesso insieme al prompt per indicare al modello di comportarsi in un modo specifico.

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, che è 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 affinché il modello generi 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, che è configurato nei parametri di generazione del modello.
  • PROMPT: il tuo 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. La l'esempio di codice riportato di seguito come trovare questi numeri e valutare la fatturazione per una chiamata 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