Questo documento descrive come utilizzare la chiamata di funzione SAP con i seguenti modelli ospitati su Vertex AI, utilizzando l'SDK Vertex AI per ABAP:
Puoi definire funzioni personalizzate e fornirle ai modelli Gemini e Claude utilizzando la funzionalità Chiamata di funzione. I modelli non richiamano direttamente le funzioni personalizzate, ma generano un output di dati strutturati che specifica il nome della funzione e gli argomenti suggeriti. Questo output ti consente di scrivere applicazioni che prendono l'output strutturato e chiamano API esterne. L'output dell'API risultante può quindi essere incorporato in un ulteriore prompt del modello, consentendo risposte alle query più complete.
L'SDK Vertex AI per ABAP semplifica la chiamata di funzioni per gli sviluppatori ABAP offrendo loro l'opportunità di richiamare la logica personalizzata scritta nei moduli di funzione SAP:
- Trasmissione dei nomi dei moduli di funzione SAP al modello come dichiarazioni di funzione, che descrivono il nome della funzione, il suo scopo e i parametri correlati.
- Impostazione dell'invocazione automatica del modulo di funzione SAP in modo implicito durante l'invocazione del modello.
Di seguito è riportato il percorso tipico di uno sviluppatore ABAP per richiamare la chiamata di funzione SAP:
- L'utente fornisce un prompt di input.
- L'SDK passa il prompt di input e le dichiarazioni di funzione al modello.
- Il modello esamina il prompt e le funzioni dichiarate per derivare la funzione da chiamare e suggerisce i valori dei parametri per chiamare la funzione.
- Se è impostata la chiamata automatica, l'SDK chiama il modulo di funzione SAP.
- L'SDK richiama quindi il modello con l'output della funzione chiamata.
- Il modello risponde con una risposta affidabile per il prompt finale arricchito con l'output della funzione chiamata.
- L'SDK restituisce la risposta all'utente.
Se scegli di non richiamare automaticamente i moduli funzionali SAP, l'SDK ti consente di utilizzare la funzionalità di chiamata di funzione senza alcuna chiamata di modulo funzionale SAP. In questo caso, puoi seguire il flusso di lavoro tipico delle chiamate di funzione per utilizzare strumenti esterni come API e funzioni.
Prima di iniziare
Prima di utilizzare l'SDK Vertex AI per ABAP per la chiamata di funzioni SAP con Gemini, assicurati che tu o i tuoi amministratori abbiate completato i seguenti prerequisiti:
- Abilitato l'API Vertex AI nel tuo progetto Google Cloud .
- Installato l'SDK Vertex AI per ABAP nel tuo ambiente SAP.
- Configura l'autenticazione per accedere all'API Vertex AI.
Per Gemini:
Per Claude:
- Hai abilitato un modello Claude supportato da Model Garden nel tuo progetto Google Cloud .
- Configurato i parametri di generazione del modello.
Arricchire il contesto del modello di AI con i dati SAP
Questa sezione spiega come arricchire il contesto del modello di AI con i dati SAP utilizzando l'SDK Vertex AI per ABAP.
Istanzia la classe di chiamante multimodale
Per richiamare le chiamate di funzione in SAP con i modelli Gemini , utilizza la classe /GOOG/CL_GENERATIVE_MODEL
.
Per richiamare la chiamata di funzione in SAP con i modelli Claude , utilizza la classe /GOOG/CL_MODEL_CLAUDE
.
Istanzia la classe passando la chiave del modello configurata nei parametri di generazione del modello.
Gemini
DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
Claude
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
Sostituisci MODEL_KEY
con il nome della chiave del modello, configurato
nei parametri di generazione del modello.
Crea un modulo di funzione SAP
Per creare un modulo di funzione SAP per la chiamata automatica da parte dell'SDK, segui lo schema fornito:
Categoria | Nome parametro | Tipo associato |
---|---|---|
In fase di importazione | IT_FUNCTION_PARAMETERS |
/GOOG/T_FUNCTION_PARAMETERS |
In fase di esportazione | EV_FUNCTION_RESPONSE |
STRING |
Modifica in corso | CV_PROMPT |
STRING |
Eccezioni | /GOOG/CX_SDK |
Exception Class |
In base ai parametri di importazione, scrivi la logica personalizzata all'interno del modulo della funzione,
che può recuperare i dati SAP tramite query SELECT
o chiamare un'API o un modulo esterno
per ottenere le informazioni mancanti.
Imposta il parametro di esportazione EV_FUNCTION_RESPONSE
con le informazioni
per fornire un feedback al contesto dell'LLM. Puoi anche modificare il testo del prompt
in CV_PROMPT
in base alla logica personalizzata e ai requisiti della tua attività per
istruire ulteriormente il LLM in base a diversi scenari aziendali.
Aggiungi dichiarazione di funzione
Per aggiungere una dichiarazione di funzione al contesto dell'LLM, puoi utilizzare il
metodo ADD_FUNCTION_DECLARATION
. Chiama il metodo ADD_FUNCTION_DECLARATION
ogni volta che devi aggiungere una funzione al contesto.
Gemini
DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties. APPEND VALUE #( parameter_name = 'PARAMETER_NAME' type = 'PARAMETER_TYPE' description = 'PARAMETER_DESCRIPTION' is_required = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters. lo_model->add_function_declaration( iv_name = 'FUNCTION_MODULE_NAME' iv_description = 'FUNCTION_MODULE_DESCRIPTION' it_parameters = lt_parameters ).
Claude
DATA lt_parameters TYPE /goog/cl_model_claude=>tt_parameter_properties. APPEND VALUE #( parameter_name = 'PARAMETER_NAME' type = 'PARAMETER_TYPE' description = 'PARAMETER_DESCRIPTION' is_required = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters. lo_model->add_function_declaration( iv_name = 'FUNCTION_MODULE_NAME' iv_description = 'FUNCTION_MODULE_DESCRIPTION' it_parameters = lt_parameters ).
Sostituisci quanto segue:
PARAMETER_NAME
: il nome del parametro.PARAMETER_TYPE
: il tipo di dati del parametro, ad esempiostring
,integer
oboolean
.PARAMETER_DESCRIPTION
: una spiegazione chiara dello scopo e del formato previsto del parametro.PARAMETER_IS_REQUIRED
: se questo parametro è obbligatorio per il funzionamento della funzione, imposta il valore suABAP_TRUE
.FUNCTION_MODULE_NAME
: nome del modulo di funzione SAP.FUNCTION_MODULE_DESCRIPTION
: Descrizione del modulo di funzione SAP.
Puoi anche dichiarare una funzione senza parametri, che può fungere da funzione di riserva o di backup. Se un prompt utente non fornisce informazioni sufficienti per chiamare una funzione specifica, puoi chiedere al modello di selezionare questa funzione di riserva.
Imposta la chiamata automatica del modulo di funzione SAP
Per impostare la chiamata automatica della funzione SAP selezionata dal modello, puoi utilizzare il metodo SET_AUTO_INVOKE_SAP_FUNCTION
.
Se ABAP_TRUE
viene passato nel parametro di importazione IV_AUTO_INVOKE
, il modulo della funzione viene richiamato dall'SDK e la relativa risposta viene inclusa nel contesto dell'LLM per generare la risposta finale.
Devi definire il modulo della funzione seguendo lo schema descritto nella sezione Crea il modulo della funzione SAP.
lo_model->set_auto_invoke_sap_function( abap_true ).
Generare contenuti con la chiamata di funzione
Per passare il testo del prompt a un modello, puoi utilizzare il metodo GENERATE_CONTENT
.
Per ottenere la risposta generata dal modello con il contesto aggiuntivo aggiunto dal modulo di funzione SAP tramite le chiamate di funzione, utilizza il metodo GET_TEXT
.
DATA(lv_response) = lo_model->generate_content( iv_prompt_text ='PROMPT'
)->get_text( ).
Sostituisci PROMPT
con il tuo prompt di testo.
Recupera il nome della funzione selezionata e i valori dei parametri
Per ottenere la funzione selezionata dal modello
(tra quelle dichiarate) e i relativi parametri suggeriti,
utilizza il metodo GET_FUNCTION_CALL
.
DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
)->generate_content( iv_prompt_text = 'PROMPT' ).
lo_response->get_function_call( IMPORTING ev_function_name = DATA(lv_function_name)
et_function_parameters = DATA(lt_function_parameters) ).
Sostituisci PROMPT
con il tuo prompt di testo.
Puoi ottenere il nome della funzione selezionata da
LV_FUNCTION_NAME
e i parametri suggeriti da LT_FUNCTION_PARAMETERS
.
Puoi utilizzare queste informazioni per convalidare, monitorare e registrare le azioni del modello in base alle linee guida per la gestione degli eventi e delle informazioni di sicurezza aziendale.
Esempio di codice
Il seguente esempio di codice mostra come utilizzare la chiamata di funzione SAP per ricevere una risposta finale dal modello.
Gemini
DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties. TRY. DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ). APPEND VALUE #( parameter_name = 'PARAMETER_NAME' type = 'PARAMETER_TYPE' description = 'PARAMETER_DESCRIPTION' is_required = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters. DATA(lv_response) = lo_model->add_function_declaration( iv_name = 'FUNCTION_MODULE_NAME' iv_description = 'FUNCTION_MODULE_DESCRIPTION' it_parameters = lt_parameters )->set_auto_invoke_sap_function( abap_true )->generate_content( iv_prompt_text ='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.
Claude
DATA lt_parameters TYPE /goog/cl_model_claude=>tt_parameter_properties. TRY. DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ). APPEND VALUE #( parameter_name = 'PARAMETER_NAME' type = 'PARAMETER_TYPE' description = 'PARAMETER_DESCRIPTION' is_required = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters. DATA(lv_response) = lo_model->add_function_declaration( iv_name = 'FUNCTION_MODULE_NAME' iv_description = 'FUNCTION_MODULE_DESCRIPTION' it_parameters = lt_parameters )->set_auto_invoke_sap_function( abap_true )->generate_content( iv_prompt_text ='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.PARAMETER_NAME
: il nome del parametro.PARAMETER_TYPE
: il tipo di dati del parametro, ad esempiostring
,integer
oboolean
.PARAMETER_DESCRIPTION
: una spiegazione chiara dello scopo e del formato previsto del parametro.PARAMETER_IS_REQUIRED
: se questo parametro è obbligatorio per il funzionamento della funzione, imposta il valore suABAP_TRUE
.FUNCTION_MODULE_NAME
: nome del modulo di funzione SAP.FUNCTION_MODULE_DESCRIPTION
: Descrizione del modulo di funzione SAP.PROMPT
: il tuo prompt di testo.
Concatenazione automatica delle funzioni
La funzionalità di concatenamento automatico delle funzioni ti consente di richiamare più moduli di funzione definita dall'utente dall'utente per generare una risposta. Questa funzionalità è supportata solo quando è abilitata l'invocazione automatica dei moduli funzionali SAP.
Il seguente esempio di codice illustra l'incatenamento automatico delle funzioni.
Per il prompt Get the air quality in my current location
, il modello
richiama prima il modulo di funzione Z_GET_CURRENT_LOCATION
per ottenere
le informazioni su longitudine e latitudine, quindi passa le informazioni su longitudine e
latitudine al modulo di funzione Z_GET_CURRENT_AIR_QUALITY
per ottenere la qualità dell'aria per i punti di longitudine e latitudine specificati.
Gemini
gv_prompt = 'Get the air quality in my current location'. gv_system_instruction = 'You are a helpful weather assistant bot. You can turn find my location and get the weather information like temperature' && 'You can also alert me about EarthQuakes and Storm.' && 'You can also provide me information on Air Quality based on a location' && 'Do not perform any other tasks.'. TRY. DATA(lo_model_key) = NEW /goog/cl_generative_model( iv_model_key = 'gemini-flash-2' ). gv_final_op = lo_model_key->gs_ai_config-model_id. lo_model_key->add_function_declaration( iv_name = 'Z_GET_CURRENT_LOCATION' iv_description = 'Get the current location' it_parameters = gt_parameters ). CLEAR gt_parameters. gs_parameter-parameter_name = |Latitude|. gs_parameter-type = 'string'. gs_parameter-description = |Latitude|. gs_parameter-is_required = abap_true. APPEND gs_parameter TO gt_parameters. CLEAR gs_parameter. gs_parameter-parameter_name = |Longitude|. gs_parameter-type = 'string'. gs_parameter-description = |Longitude|. gs_parameter-is_required = abap_true. APPEND gs_parameter TO gt_parameters. CLEAR gs_parameter. lo_model_key->add_function_declaration( iv_name = 'Z_GET_WEATHER_INFORMATION' iv_description = 'Gets weather information like temperature for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->add_function_declaration( iv_name = 'Z_GET_CURRENT_AIR_QUALITY' iv_description = 'Gets weather information like temperature for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->add_function_declaration( iv_name = 'GET_EARTHQUAKE_POSSIBILITY' iv_description = 'Gets possibility of Earthquake for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->add_function_declaration( iv_name = 'GET_STORM_POSSIBILITY' iv_description = 'Gets possibility of a STORM for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->set_system_instructions( EXPORTING iv_text = gv_system_instruction ). DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true )->generate_content( iv_prompt_text = gv_prompt ). DATA(ls_response) = lo_response->get_response( ). /ui2/cl_json=>serialize( EXPORTING data = ls_response-candidates[ 1 ]-content-parts " Data to serialize RECEIVING r_json = DATA(lv_json_string) " JSON string ). IF lv_json_string IS NOT INITIAL. CLEAR gv_output. gv_output = lv_json_string. ENDIF. CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk). cl_demo_output=>display( lo_cx_sdk->get_text( ) ). ENDTRY. lo_model_key->close( ). CLEAR lo_model_key. CLEAR lo_response. CLEAR ls_response.
Claude
gv_prompt = 'Get the air quality in my current location'. gv_system_instruction = 'You are a helpful weather assistant bot. You can turn find my location and get the weather information like temperature' && 'You can also alert me about EarthQuakes and Storm.' && 'You can also provide me information on Air Quality based on a location' && 'Do not perform any other tasks.'. TRY. DATA(lo_model_key) = NEW /goog//goog/cl_model_claude( iv_model_key = 'claude' ). gv_final_op = lo_model_key->gs_ai_config-model_id. lo_model_key->add_function_declaration( iv_name = 'Z_GET_CURRENT_LOCATION' iv_description = 'Get the current location' it_parameters = gt_parameters ). CLEAR gt_parameters. gs_parameter-parameter_name = |Latitude|. gs_parameter-type = 'string'. gs_parameter-description = |Latitude|. gs_parameter-is_required = abap_true. APPEND gs_parameter TO gt_parameters. CLEAR gs_parameter. gs_parameter-parameter_name = |Longitude|. gs_parameter-type = 'string'. gs_parameter-description = |Longitude|. gs_parameter-is_required = abap_true. APPEND gs_parameter TO gt_parameters. CLEAR gs_parameter. lo_model_key->add_function_declaration( iv_name = 'Z_GET_WEATHER_INFORMATION' iv_description = 'Gets weather information like temperature for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->add_function_declaration( iv_name = 'Z_GET_CURRENT_AIR_QUALITY' iv_description = 'Gets weather information like temperature for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->add_function_declaration( iv_name = 'GET_EARTHQUAKE_POSSIBILITY' iv_description = 'Gets possibility of Earthquake for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->add_function_declaration( iv_name = 'GET_STORM_POSSIBILITY' iv_description = 'Gets possibility of a STORM for a given location which is latitude and longitude' it_parameters = gt_parameters ). lo_model_key->set_system_instructions( EXPORTING iv_text = gv_system_instruction ). DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true )->generate_content( iv_prompt_text = gv_prompt ). DATA(ls_response) = lo_response->get_response( ). /ui2/cl_json=>serialize( EXPORTING data = ls_response-candidates[ 1 ]-content-parts " Data to serialize RECEIVING r_json = DATA(lv_json_string) " JSON string ). IF lv_json_string IS NOT INITIAL. CLEAR gv_output. gv_output = lv_json_string. ENDIF. CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk). cl_demo_output=>display( lo_cx_sdk->get_text( ) ). ENDTRY. lo_model_key->close( ). CLEAR lo_model_key. CLEAR lo_response. CLEAR ls_response.
Per disattivare l'incatenamento automatico delle funzioni e ottenere solo la risposta della prima funzione
dall'LLM, utilizza il metodo SET_FUNCTION_CALLING_CONFIG
e imposta
il parametro IV_DISABLE_FUNCTION_CHAINING
su ABAP_TRUE
. Ad esempio:
lo_model_key->set_function_calling_config( iv_disable_function_chaining = abap_true ).
DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
)->generate_content( iv_prompt_text = gv_prompt ).
Se vuoi ottenere tutti i moduli di funzioni richiamati dall'SDK e i parametri passati, chiama il metodo GET_ALL_FUNCTION_CALLS
:
DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
)->generate_content( iv_prompt_text = gv_prompt ).
DATA(ls_response) = lo_response->get_all_function_calls( ).
Passaggi successivi
- Scopri di più sullo sviluppo di applicazioni con la versione on-premise o cloud di ABAP SDK for Google Cloud.
- Poni le tue domande e discuti dell'SDK Vertex AI per ABAP con la community sui forum di Cloud.