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:
- Hai attivato l'API Vertex AI nel tuo progetto Google Cloud.
- Hai installato l'SDK Vertex AI per ABAP nel tuo ambiente SAP.
- Configura l'autenticazione per accedere all'API Vertex AI.
- Configura i parametri di generazione del modello.
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:
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.
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 messaggioPRESENCE_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 suapplication/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 suapplication/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:
PROMPT
: il prompt di testo.SYSTEM_INSTRUCTIONS
: l'istruzione di sistema per il modello.
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:
MODEL_KEY
: il nome della chiave del modello, configurato nei parametri di generazione del modello.PROMPT
: il prompt di testo.SYSTEM_INSTRUCTIONS
: le istruzioni di sistema per il modello.
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 suapplication/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 suapplication/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:
PROMPT
: il prompt di testo.MODEL_KEY
: il nome della chiave del modello, configurato nei parametri di generazione del modello.
Passaggi successivi
Scopri di più sullo sviluppo di applicazioni con la versione on-premise o qualsiasi versione cloud di ABAP SDK for Google Cloud.
Poni le tue domande e discuti dell'SDK Vertex AI per ABAP con la community nei forum di Cloud.