In diesem Dokument wird beschrieben, wie Sie SAP-Funktionsaufrufe mit den folgenden von Vertex AI gehosteten Modellen mithilfe des Vertex AI SDK for ABAP verwenden:
Mit der Funktion Funktionsaufruf können Sie benutzerdefinierte Funktionen definieren und den Gemini- und Claude-Modellen zur Verfügung stellen. Die Modelle rufen die benutzerdefinierten Funktionen nicht direkt auf, sondern generieren eine strukturierte Datenausgabe, in der der Funktionsname und die vorgeschlagenen Argumente angegeben sind. Mit dieser Ausgabe können Sie Anwendungen schreiben, die die strukturierte Ausgabe verwenden und externe APIs aufrufen. Die resultierende API-Ausgabe kann dann in einen weiteren Modell-Prompt eingefügt werden, um umfassendere Abfrageantworten zu ermöglichen.
Das Vertex AI SDK für ABAP vereinfacht den Funktionsaufruf für ABAP-Entwickler, da sie ihnen die Möglichkeit bietet, benutzerdefinierte Logik aufzurufen, die in SAP-Funktionsmodulen geschrieben wurde:
- Übergeben Sie dem Modell SAP-Funktionsmodulnamen als Funktionsdeklarationen, die den Namen der Funktion, ihren Zweck und zugehörige Parameter beschreiben.
- Legen Sie Automatischen Aufruf des SAP-Funktionsmoduls beim Aufrufen des Modells implizit fest.
Folgendes ist ein typischer ABAP-Entwickler zum Aufrufen von SAP-Funktionsaufrufen:
- Der Nutzer gibt einen Eingabevorschlag ein.
- Das SDK übergibt den Eingabe-Prompt und die Funktionsdeklarationen an das Modell.
- Das Modell prüft den Prompt und die deklarierten Funktionen, um die aufzurufende Funktion abzuleiten, und schlägt die Parameterwerte für den Funktionsaufruf vor.
- Wenn der automatische Aufruf festgelegt ist, ruft das SDK das SAP-Funktionsmodul auf.
- Das SDK ruft das Modell dann mit der Ausgabe der aufgerufenen Funktion auf.
- Das Modell antwortet mit einer zuverlässigen Antwort auf die endgültige Eingabeaufforderung, die mit der Ausgabe der aufgerufenen Funktion angereichert ist.
- Das SDK gibt die Antwort an den Nutzer zurück.
Wenn Sie SAP-Funktionsmodule nicht automatisch aufrufen, können Sie mit dem SDK das Funktionsaufruffeature ohne SAP-Funktionsmodulaufruf verwenden. In diesem Fall können Sie dem typischen Funktionsaufruf-Workflow folgen, um externe Tools wie APIs und Funktionen zu verwenden.
Hinweise
Bevor Sie das Vertex AI SDK für ABAP for SAP-Funktionsaufrufe mit Gemini verwenden, müssen Sie oder Ihre Administratoren die folgenden Voraussetzungen erfüllen:
- Sie haben die Vertex AI API in Ihrem Google Cloud -Projekt aktiviert.
- Sie haben das Vertex AI SDK für ABAP in Ihrer SAP-Umgebung installiert.
- Sie haben die Authentifizierung eingerichtet, um auf die Vertex AI API zuzugreifen.
Für Gemini:
Für Claude:
- Sie haben ein unterstütztes Claude-Modell aus Model Garden in Ihrem Google Cloud -Projekt aktiviert.
- Konfigurierte Parameter zur Modellgenerierung
Kontext des KI-Modells mit SAP-Daten anreichern
In diesem Abschnitt wird erläutert, wie Sie den Kontext des KI-Modells mit SAP-Daten anreichern. Dazu verwenden Sie das Vertex AI SDK für ABAP.
Multimodale Aufrufer-Klasse instanziieren
Zum Aufrufen von Funktionsaufrufen in SAP mit den Gemini-Modellen verwenden Sie die Klasse /GOOG/CL_GENERATIVE_MODEL
.
Zum Aufrufen von Funktionsaufrufen in SAP mit den Claude-Modellen verwenden Sie die Klasse /GOOG/CL_MODEL_CLAUDE
.
Sie instanziieren die Klasse, indem Sie den in den Parametern für die Modellgenerierung konfigurierten Modellschlüssel übergeben.
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' ).
Ersetzen Sie MODEL_KEY
durch den Namen des Modellschlüssels, der in den Parametern für die Modellgenerierung konfiguriert ist.
SAP-Funktionsmodul erstellen
Folgen Sie dem bereitgestellten Schema, um ein SAP-Funktionsmodul für den automatischen Aufruf durch das SDK zu erstellen:
Kategorie | Parametername | Verknüpfter Typ |
---|---|---|
Wird importiert | IT_FUNCTION_PARAMETERS |
/GOOG/T_FUNCTION_PARAMETERS |
Wird exportiert | EV_FUNCTION_RESPONSE |
STRING |
Wird geändert | CV_PROMPT |
STRING |
Ausnahmen | /GOOG/CX_SDK |
Exception Class |
Schreiben Sie auf der Grundlage der Importparameter Ihre benutzerdefinierte Logik in das Funktionsmodul. Dies kann entweder das Abrufen von SAP-Daten über SELECT
-Abfragen oder das Aufrufen einer externen API oder eines externen Moduls sein, um die fehlenden Informationen zu erhalten.
Legen Sie den Exportparameter EV_FUNCTION_RESPONSE
mit den Informationen zum Feedback an den LLM-Kontext fest. Sie können den Prompttext in CV_PROMPT
auch anhand der benutzerdefinierten Logik und Ihrer Geschäftsanforderungen ändern, um den LLM anhand verschiedener Geschäftsszenarien weiter anzuweisen.
Funktionsdeklaration hinzufügen
Mit der Methode ADD_FUNCTION_DECLARATION
können Sie dem LLM-Kontext eine Funktionsdeklaration hinzufügen. Rufen Sie die Methode ADD_FUNCTION_DECLARATION
jedes Mal auf, wenn Sie dem Kontext eine Funktion hinzufügen möchten.
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 ).
Ersetzen Sie Folgendes:
PARAMETER_NAME
: Name des Parameters.PARAMETER_TYPE
: Der Datentyp des Parameters, z. B.string
,integer
oderboolean
.PARAMETER_DESCRIPTION
: Eine klare Erläuterung des Zwecks und des erwarteten Formats des Parameters.PARAMETER_IS_REQUIRED
: Wenn dieser Parameter für die Funktion erforderlich ist, legen Sie den Wert aufABAP_TRUE
fest.FUNCTION_MODULE_NAME
: Name des SAP-Funktionsmoduls.FUNCTION_MODULE_DESCRIPTION
: Beschreibung des SAP-Funktionsmoduls.
Sie können auch eine Funktion ohne Parameter deklarieren, die als Fallback- oder Sicherungsfunktion dienen kann. Wenn ein Nutzer-Prompt nicht genügend Informationen für den Aufruf einer bestimmten Funktion enthält, können Sie das Modell anweisen, diese Fallback-Funktion auszuwählen.
Automatischen Aufruf des SAP-Funktionsmoduls festlegen
Mit der Methode SET_AUTO_INVOKE_SAP_FUNCTION
können Sie die automatische Aufrufung der vom Modell ausgewählten SAP-Funktion festlegen.
Wenn ABAP_TRUE
im Importparameter IV_AUTO_INVOKE
übergeben wird, wird das Funktionsmodul vom SDK aufgerufen und seine Antwort ist im LLM-Kontext enthalten, um die endgültige Antwort zu generieren.
Sie müssen das Funktionsmodul definieren. Folgen Sie dazu dem im Abschnitt SAP-Funktionsmodul erstellen beschriebenen Schema.
lo_model->set_auto_invoke_sap_function( abap_true ).
Inhalte mit Funktionsaufrufen generieren
Wenn Sie den Prompt-Text an ein Modell übergeben möchten, können Sie die Methode GENERATE_CONTENT
verwenden.
Verwenden Sie die Methode GET_TEXT
, um die vom Modell generierte Antwort mit dem zusätzlichen Kontext abzurufen, der aus dem SAP-Funktionsmodul durch Funktionsaufrufe hinzugefügt wurde.
DATA(lv_response) = lo_model->generate_content( iv_prompt_text ='PROMPT'
)->get_text( ).
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Ausgewählten Funktionsnamen und Parameterwerte abrufen
Mit der Methode GET_FUNCTION_CALL
können Sie die vom Modell ausgewählte Funktion (aus den deklarierten Funktionen) und die vorgeschlagenen Parameter abrufen.
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) ).
Ersetzen Sie PROMPT
durch Ihren Text-Prompt.
Den Namen der ausgewählten Funktion finden Sie unter LV_FUNCTION_NAME
und die vorgeschlagenen Parameter unter LT_FUNCTION_PARAMETERS
.
Sie können diese Informationen verwenden, um die Aktionen des Modells gemäß den Richtlinien für Sicherheitsinformationen und Ereignisverwaltung Ihres Unternehmens zu validieren, nachzuverfolgen und zu protokollieren.
Codebeispiel
Das folgende Codebeispiel zeigt, wie Sie mit SAP-Funktionsaufrufen eine endgültige Antwort vom Modell empfangen.
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.
Ersetzen Sie Folgendes:
MODEL_KEY
: Der Name des Modellschlüssels, der in den Modellgenerierungsparametern konfiguriert ist.PARAMETER_NAME
: Name des Parameters.PARAMETER_TYPE
: Der Datentyp des Parameters, z. B.string
,integer
oderboolean
.PARAMETER_DESCRIPTION
: Eine klare Erläuterung des Zwecks und des erwarteten Formats des Parameters.PARAMETER_IS_REQUIRED
: Wenn dieser Parameter für die Funktion erforderlich ist, legen Sie den Wert aufABAP_TRUE
fest.FUNCTION_MODULE_NAME
: Name des SAP-Funktionsmoduls.FUNCTION_MODULE_DESCRIPTION
: Beschreibung des SAP-Funktionsmoduls.PROMPT
: Ihr Text-Prompt.
Automatische Verkettung von Funktionen
Mit der automatischen Funktionsverkettung können Sie mehrere benutzerdefinierte Funktionsmodule aufrufen, um eine Antwort zu generieren. Diese Funktion wird nur unterstützt, wenn der automatische Aufruf von SAP-Funktionsmodulen aktiviert ist.
Das folgende Codebeispiel veranschaulicht die automatische Verkettung von Funktionen.
Für den Prompt Get the air quality in my current location
ruft das Modell zuerst das Funktionsmodul Z_GET_CURRENT_LOCATION
auf, um die Informationen zu Längengrad und Breitengrad abzurufen. Anschließend werden die Informationen zu Längengrad und Breitengrad an das Funktionsmodul Z_GET_CURRENT_AIR_QUALITY
übergeben, um die Luftqualität für die angegebenen Längengrad- und Breitengradpunkte abzurufen.
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.
Wenn Sie die automatische Verkettung von Funktionen deaktivieren und nur die Antwort der ersten Funktion vom LLM erhalten möchten, verwenden Sie die Methode SET_FUNCTION_CALLING_CONFIG
und setzen Sie den Parameter IV_DISABLE_FUNCTION_CHAINING
auf ABAP_TRUE
. Beispiel:
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 ).
Wenn Sie alle vom SDK aufgerufenen Funktionsmodule und die an sie übergebenen Parameter abrufen möchten, rufen Sie die Methode GET_ALL_FUNCTION_CALLS
auf:
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( ).
Nächste Schritte
- Weitere Informationen zur Anwendungsentwicklung mit der lokalen oder einer beliebigen Cloud-Version des ABAP SDK for Google Cloud
- In den Cloud-Foren können Sie Ihre Fragen stellen und mit der Community über das Vertex AI SDK sprechen.