In diesem Dokument erhalten Sie einen Überblick darüber, wie Sie SAP-Funktionsaufrufe mit Gemini mithilfe des Vertex AI SDK for ABAP in Ihrer SAP BTP-Umgebung verwenden.
Mit der Funktion Funktionsaufruf können Sie benutzerdefinierte Funktionen definieren und den Gemini-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 den Namen des SAP-Funktionsmoduls oder den Namen des OData-Dienstes (Open Data Protocol) als Funktionsdeklarationen, die den Namen der Funktion oder des Dienstes, ihren Zweck und zugehörige Parameter beschreiben.
- Legen Sie den automatischen Aufruf des SAP-Funktionsmoduls oder OData-Dienstes beim Aufrufen des Modells implizit fest.
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.
- Konfigurierte Parameter zur Modellgenerierung
Kontext des Gemini-KI-Modells mit SAP-Daten anreichern, indem ein SAP-Funktionsmodul aufgerufen wird
In diesem Abschnitt wird erläutert, wie Sie den Gemini-KI-Modellkontext mit SAP-Daten anreichern, indem Sie ein SAP-Funktionsmodul aufrufen.
Folgendes ist ein typischer ABAP-Entwickler zum Aufrufen eines SAP-Funktionsmoduls:
- 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.
Multimodale Aufrufer-Klasse von Gemini instanziieren
Zum Aufrufen von Funktionsaufrufen in SAP verwenden Sie die Klasse /GOOG/CL_GENERATIVE_MODEL
.
Sie instanziieren die Klasse, indem Sie den in den Parametern für die Modellgenerierung konfigurierten Modellschlüssel übergeben.
DATA(lo_model) = NEW /goog/cl_generative_model( 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.
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 ).
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 dient. Wenn ein Nutzerprompt nicht genügend Informationen zum Aufrufen einer bestimmten Funktion enthält, können Sie Gemini 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
Zum Übergeben des Prompt-Texts an das Gemini-Modell können Sie die Methode GENERATE_CONTENT
verwenden.
Verwenden Sie die Methode GET_TEXT
, um die von Gemini 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.
Namen der ausgewählten Funktion und Parameterwerte abrufen
Mit der Methode GET_FUNCTION_CALL
können Sie die von Gemini 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 Gemini-Funktion finden Sie unter LV_FUNCTION_NAME
und die vorgeschlagenen Parameter unter LT_FUNCTION_PARAMETERS
.
Sie können diese Informationen verwenden, um Gemini-Aktionen gemäß den Richtlinien für Sicherheitsinformationen und Ereignisverwaltung Ihres Unternehmens zu validieren, zu verfolgen und zu protokollieren.
Codebeispiel
Das folgende Codebeispiel zeigt, wie Sie mit SAP-Funktionsaufrufen eine endgültige Antwort vom Modell empfangen.
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.
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.
Kontext des Gemini-KI-Modells mit SAP-Daten anreichern, indem ein OData-Dienst aufgerufen wird
In diesem Abschnitt wird erläutert, wie Sie den Kontext des Gemini-KI-Modells mit SAP-Daten anreichern, indem Sie einen OData-Dienst aufrufen.
Folgendes ist ein typischer ABAP-Entwickler zum Aufrufen eines OData-Dienstes:
- 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 die automatische Aufruffunktion festgelegt ist, ruft das SDK den OData-Dienst auf.
- Das SDK ruft das Modell dann mit der Ausgabe des aufgerufenen OData-Dienstes auf.
- Das Modell antwortet mit einer zuverlässigen Antwort auf die endgültige Eingabeaufforderung, die mit der Ausgabe des aufgerufenen OData-Dienstes angereichert ist.
- Das SDK gibt die Antwort an den Nutzer zurück.
Wenn Sie OData-Dienste nicht automatisch aufrufen, können Sie mit dem SDK das Funktionsaufruffeature ohne OData-Dienstaufruf verwenden. In diesem Fall können Sie dem typischen Funktionsaufruf-Workflow folgen, um externe Tools wie APIs und Funktionen zu verwenden.
OData-Dienst erstellen
Verwenden Sie das folgende Schema, um einen OData-Dienst für den automatischen Aufruf durch das SDK als Funktion zu erstellen:
{
"UserRequest": "Input Prompt as user request",
"FunctionResponse": null,
"ModifiedUserRequest": null,
"ContextParameters": [
{
"ParameterName": "Parameter 1",
"ParameterValue": "Value 1"
},
{
"ParameterName": "Parameter 2",
"ParameterValue": "Value 2"
}
]
}
In der folgenden Tabelle finden Sie Informationen zu den in diesem Schema verwendeten Feldern:
Schemafeld | Feldtyp | Eingabe-/Ausgabemodus | Beschreibung |
---|---|---|---|
UserRequest |
String |
Nur Eingabe | Die Eingabeaufforderung, die der Nutzer eingibt. |
FunctionResponse |
String |
Nur Ausgabe | Die Ausgabe des OData-Dienstes. Es kann sich um einen einzelnen Wert oder einen serialisierten JSON-String handeln. |
ModifiedUserRequest |
String |
Nur Ausgabe | Die geänderte UserRequest , die als Prompt an Gemini gesendet wird. |
ContextParameters |
Table of parameters |
Nur Eingabe | Die Tabelle mit Parametern, die Parameternamen und ‑werte enthält. |
ParameterName |
String |
Nur Eingabe | Name des Funktionsparameters. |
ParameterValue |
String |
Nur Eingabe | Wert des Funktionsparameters, wie von Gemini vorgeschlagen. |
OData-Dienstentitäten erstellen
Erstellen Sie eine Entität mit dem vorherigen Schema.
Diese Entität akzeptiert die Nutzeranfrage als Prompt, leitet sie an Gemini weiter und wird mit dem Vertex AI SDK for ABAP als Funktion deklariert. Diese Entität überträgt auch die OData-Funktionsantwort vom SAP-Backendsystem an BTP, die dann dem Kontext des Gemini-KI-Modells hinzugefügt wird.
- Geben Sie einen geeigneten Namen für das neue Element ein.
Legen Sie Werte für die folgenden Attribute fest. Behalten Sie für alle anderen Attribute die Standardwerte bei.
Name Ist der Schlüssel? EDM-Kerntyp ABAP-Feldname UserRequest
Ja Edm.String
USER_REQUEST FunctionResponse
Nein Edm.String
FUNCTION_RESPONSE ModifiedUserRequest
Nein Edm.String
MODIFIED_USER_REQUEST
Wenn Sie weitere Entitäten im selben OData-Dienst platzieren möchten, erstellen Sie sie mit demselben Schema.
Erstellen Sie eine weitere Entität mit dem Namen
ContextParameters
und den folgenden Attributen. Behalten Sie für alle anderen Attribute die Standardwerte bei.Diese Entität enthält die Funktionsparameter und ihre Werte, die vom Gemini-Modell bereitgestellt werden.
Name Ist der Schlüssel? EDM-Kerntyp ABAP-Feldname ParameterName
Ja Edm.String
PARAMETER_NAME ParameterValue
Ja Edm.String
PARAMETER_VALUE Erstellen Sie Entitätssätze für alle Entitäten, die Sie in den vorherigen Schritten erstellt haben.
Erstellen Sie eine Verknüpfung zwischen jeder Entität, die Sie in Schritt 1 erstellt haben, und der
ContextParameters
-Entität, die Sie in Schritt 2 erstellt haben. Gehen Sie dazu so vor:- Legen Sie einen Namen für die Verknüpfung fest.
- Geben Sie im Feld Principal Entity (Hauptentität) den Namen der Entität ein, die Sie in Schritt 1 erstellt haben.
- Legen Sie im Feld Cardinalität der Hauptentität den Wert
M
fest. - Geben Sie im Feld Dependent Entity (Abhängige Entität) den Wert
ContextParameters
ein. - Legen Sie im Feld Cardinalität der abhängigen Entität den Wert
M
fest. - Speichern und generieren Sie die OData-Laufzeitartefakte.
Fügen Sie den erstellten OData-Dienst in SAP Gateway hinzu und aktivieren Sie den ICF-Knoten.
So generieren Sie die EDMX-Datei für die OData-Metadaten:
- Rufen Sie TCode /iwfnd/maint_services auf und rufen Sie die Metadaten für den OData-Dienst ab.
- Formatieren und speichern Sie die generierte XML-Datei mit der Dateiendung
.edmx
.
OData-Funktionslogik schreiben
Fügen Sie in der generierten
MPC_EXT
-Klasse einen Deep-Entitätstyp hinzu und aktivieren Sie ihn:TYPES: BEGIN OF ts_function_deep_entity, user_request TYPE string, function_response TYPE string, modified_user_request TYPE string, context_parameters TYPE TABLE OF ts_contextparameters WITH DEFAULT KEY, END OF ts_function_deep_entity.
Definieren Sie die
CREATE_DEEP_ENTITY
-Methode der generiertenDPC_EXT
-Klasse neu. Gehen Sie dazu so vor:- Wenn Sie im Abschnitt OData-Dienstentitäten erstellen mehr als eine OData-Entität erstellt haben, fügen Sie für jede OData-Entität eine
CASE
-Anweisung hinzu. - Schreiben Sie die ABAP-Logik in
get
oderprepare
der Antwort, um den Kontext für Gemini in der BTP-Anwendung zu erweitern. - Legen Sie im Feld FUNCTION_RESPONSE die Antwort fest.
- Legen Sie im Feld MODIFIED_USER_REQUEST die geänderte Aufforderung fest.
- Binde die Gesamtantwort mit der OData-Methode
COPY_DATA_TO_REF
in die Nachricht ein.
Im folgenden Snippet ist eine Beispiel-ABAP-Logik zu sehen:
TRY. DATA: ls_request TYPE <z*_mpc_ext>=>ts_function_deep_entity. CASE io_tech_request_context->get_entity_type_name( ). WHEN <z*_mpc_ext>=>gc_ENTITY_NAME. CALL METHOD io_data_provider->read_entry_data IMPORTING es_data = ls_request. <ABAP logic to formulate OData function response> ls_request-modified_user_request = 'MODIFIED_GEMINI_PROMPT'. ls_request-function_response = 'ODATA_FUNCTION_RESPONSE'. CALL METHOD me->copy_data_to_ref EXPORTING is_data = ls_request CHANGING cr_data = er_deep_entity. ENDCASE. CATCH /iwbep/cx_mgw_busi_exception. CATCH /iwbep/cx_mgw_tech_exception. ENDTRY. ```
- Wenn Sie im Abschnitt OData-Dienstentitäten erstellen mehr als eine OData-Entität erstellt haben, fügen Sie für jede OData-Entität eine
Ersetzen Sie Folgendes:
ENTITY_TYPE
: Der Name der OData-Entität, die Sie in Schritt 1 des Abschnitts OData-Dienstentitäten erstellen erstellt habenMODIFIED_GEMINI_PROMPT
: der von Gemini bereitgestellte geänderte PromptODATA_FUNCTION_RESPONSE
: die vom OData-Dienst bereitgestellte Antwort
Wenn Sie mehr als ein Feld oder eine verschachtelte Struktur oder Tabelle als Funktion angeben möchten, können Sie den ABAP-Typ mit der SERIALIZE_JSON
-Methode der /GOOG/CL_JSON_UTIL
-Klasse des SDK in einen String serialisieren.
OData-Dienst als Dienstverbrauchsmodell auf SAP BTP definieren
Nachdem Sie den OData-Dienst erstellt haben, müssen Sie ihn in Ihrer SAP BTP-Umgebung als Dienstverbrauchsmodell definieren. Dazu erstellen Sie ein Modell für die Dienstnutzung, einen ausgehenden HTTP-Dienst, ein Kommunikationsszenario und eine Kommunikationsvereinbarung.
Modell für die Dienstnutzung erstellen
- Öffnen Sie in Ihrem ABAP-Projekt das Kontextmenü und wählen Sie Neu > Anderes ABAP-Repository-Objekt > Geschäftsdienste > Modell für die Dienstnutzung aus.
- Führen Sie im Fenster Neues Modell für die Dienstnutzung die folgenden Schritte aus:
- Wählen Sie im Feld Package (Paket) die EDMX-Datei aus, die Sie in einem früheren Abschnitt generiert haben, und laden Sie sie hoch.
- Geben Sie einen Namen und eine Beschreibung ein.
- Wählen Sie im Feld Remote Consumption Mode (Modus für die Remote-Nutzung) die Option OData aus.
- Klicken Sie auf Beenden.
HTTP-Ausgangsdienst erstellen
- Öffnen Sie in Ihrem ABAP-Projekt das Kontextmenü.
- Wählen Sie Ihr Paket aus und klicken Sie auf Neu > Anderes ABAP-Repository-Objekt.
- Wählen Sie im Feld Service Type (Diensttyp) die Option HTTP Service (HTTP-Dienst) aus.
Geben Sie in das Feld Standardpfadpräfix das Pfadpräfix für Ihren OData-Dienst im SAP-Backendsystem ein.
Das OData-Pfadpräfix finden Sie im SAP Gateway Client. Der Wert im Feld Request URI (Anfrage-URI) ist das Pfadpräfix für Ihren OData-Dienst.
Klicken Sie auf Weiter.
Kommunikationsszenario erstellen
Nachdem Sie einen ausgehenden HTTP-Dienst erstellt haben, müssen Sie ein Kommunikationsszenario erstellen und ihm den ausgehenden Dienst zuweisen. Führen Sie dazu folgende Schritte aus:
- Wählen Sie in Ihrem ABAP-Projekt Kommunikationsszenario aus und klicken Sie auf Weiter.
- Führen Sie im Fenster Neues Kommunikationsszenario die folgenden Schritte aus:
- Geben Sie einen Namen und eine Beschreibung ein.
- Klicken Sie auf Weiter.
- Wählen Sie im Feld Communication Scenario Type (Art des Kommunikationsszenarios) die Option Customer Managed (Vom Kunden verwaltet) aus.
- Rufen Sie den Tab Outbound auf.
- Wählen Sie im Feld Zulässige Instanzen die Option Eine Instanz pro Szenario und Kommunikationssystem aus.
- Klicken Sie im Feld Unterstützte Authentifizierungsmethoden die folgenden Kästchen an: Basic, X.509 und OAuth 2.0.
- Wählen Sie im Feld OAuth 2.0 Grant Type (OAuth 2.0-Grant-Typ) die Option SAML 2.0 Bearer Assertion (SAML 2.0-Antragsträgeraussage) aus.
- Klicken Sie im Bereich Outbound-Dienste auf Hinzufügen und wählen Sie dann den Outbound-Dienst aus, den Sie im vorherigen Abschnitt erstellt haben.
- Prüfen Sie im Abschnitt Outbound Service (Ausgehende Dienste), ob das Default Path Prefix (Standardpfadpräfix) korrekt ist. Falls nicht, klicken Sie auf Synchronisieren.
- Speichern Sie das Kommunikationsszenario.
Kommunikationsvereinbarung erstellen
- Rufen Sie das SAP Fiori-Start-Dashboard des BTP ABAP-Systems auf, in dem das ABAP SDK for Google Cloud installiert ist.
Öffnen Sie die App Kommunikationsvereinbarung.
- Klicken Sie auf Neu.
Geben Sie im angezeigten Dialogfeld Neue Kommunikationsvereinbarung Werte für die folgenden Felder ein:
- Szenario: Wählen Sie das Kommunikationsszenario aus, das Sie im Abschnitt Kommunikationsszenario erstellen erstellt haben.
- Name der Vereinbarung: Geben Sie einen Namen für die Kommunikationsvereinbarung ein.
Klicken Sie auf Erstellen.
Wählen Sie für die angezeigte Kommunikationsvereinbarung im Feld Kommunikationssystem das Kommunikationssystem aus, das Sie im vorherigen Schritt erstellt haben.
Klicken Sie auf Speichern.
Multimodale Aufrufer-Klasse von Gemini instanziieren
Zum Aufrufen von Funktionsaufrufen in SAP verwenden Sie die Klasse /GOOG/CL_GENERATIVE_MODEL
.
Sie instanziieren die Klasse, indem Sie den in den Parametern für die Modellgenerierung konfigurierten Modellschlüssel übergeben.
DATA(lo_model) = NEW /goog/cl_generative_model( 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.
Funktionsdeklaration hinzufügen
Mit der Methode ADD_FUNCTION_DECLARATION
können Sie dem LLM-Kontext einen OData-Dienst als Funktionsdeklaration hinzufügen. Rufen Sie die Methode ADD_FUNCTION_DECLARATION
jedes Mal auf, wenn Sie dem Kontext einen OData-Dienst als Funktion hinzufügen möchten.
DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties.
DATA ls_connection_parameters TYPE /goog/cl_generative_model=>ty_connection_parameters.
APPEND VALUE #( parameter_name = 'PARAMETER_NAME'
type = 'PARAMETER_TYPE'
description = 'PARAMETER_DESCRIPTION'
is_required = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters.
ls_connection_parameters-connection_type = 'ODATA'.
ls_connection_parameters-comm_scenario = 'COMMUNICATION_SCENARIO'.
ls_connection_parameters-service_id = 'ODATA_SERVICE_ID'.
ls_connection_parameters-proxy_model_id = 'ODATA_SERVICE_CONSUMPTION_MODEL_ID'.
ls_connection_parameters-relative_service_root = 'ODATA_ROOT_URI'.
ls_connection_parameters-entity_set_name = 'ODATA_ENTITY_SET_NAME'.
lo_model->add_function_declaration( iv_name = 'FUNCTION_NAME'
iv_description = 'FUNCTION_DESCRIPTION'
it_parameters = lt_parameters
is_connection_parameters = ls_connection_parameters ).
Ersetzen Sie Folgendes:
PARAMETER_NAME
: der Name des ParametersPARAMETER_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
: Legen Sie den Wert aufABAP_TRUE
fest, wenn dieser Parameter für die Funktion erforderlich ist.COMMUNICATION_SCENARIO
: die ID des von Ihnen erstellten KommunikationsszenariosODATA_SERVICE_ID
: die ID des ausgehenden Dienstes, den Sie für den OData-Dienst erstellt habenODATA_SERVICE_CONSUMPTION_MODEL_ID
: die ID des Modells für die Dienstnutzung, das Sie für den OData-Dienst erstellt habenODATA_ROOT_URI
: die Stamm-URI des OData-Dienstes im Backend-SAP-SystemODATA_ENTITY_SET_NAME
: der Name des Entitätssatzes des OData-Dienstes, der als Funktion deklariert werden sollFUNCTION_NAME
: Der Name der Funktion, die Sie für den zu verwendenden OData-Dienst deklariert haben.FUNCTION_DESCRIPTION
: die Beschreibung der Funktion, die Sie für den zu verwendenden OData-Dienst deklariert haben
Automatischen Aufruf des OData-Dienstes festlegen
Mit der Methode SET_AUTO_INVOKE_SAP_FUNCTION
können Sie die automatische Aufrufung des OData-Dienstes der SAP-Funktion festlegen, der vom Gemini-Modell ausgewählt wird.
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
Zum Übergeben des Prompt-Texts an das Gemini-Modell können Sie die Methode GENERATE_CONTENT
verwenden.
Verwenden Sie die Methode GET_TEXT
, um die von Gemini 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.
Namen der ausgewählten Funktion und Parameterwerte abrufen
Mit der Methode GET_FUNCTION_CALL
können Sie die von Gemini 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) ).
Codebeispiel
Das folgende Codebeispiel zeigt, wie Sie mit SAP-Funktionsaufrufen und einem OData-Dienst eine endgültige Antwort vom Modell erhalten:
DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties.
DATA ls_connection_parameters TYPE /goog/cl_generative_model=>ty_connection_parameters.
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.
ls_connection_parameters-connection_type = 'ODATA'.
ls_connection_parameters-comm_scenario = 'COMMUNICATION_SCENARIO'.
ls_connection_parameters-service_id = 'ODATA_SERVICE_ID'.
ls_connection_parameters-proxy_model_id = 'ODATA_SERVICE_CONSUMPTION_MODEL_ID'.
ls_connection_parameters-relative_service_root = 'ODATA_ROOT_URI'.
ls_connection_parameters-entity_set_name = 'ODATA_ENTITY_SET_NAME'.
DATA(lv_response) = lo_model_key->add_function_declaration(
iv_name = 'FUNCTION_NAME'
iv_description = 'FUNCTION_DESCRIPTION'
it_parameters = lt_parameters
is_connection_parameters = ls_connection_parameters
)->set_auto_invoke_sap_function( abap_true
)->generate_content( iv_prompt_text ='PROMPT'
)->get_text( ).
IF lv_response IS NOT INITIAL.
out->write( lv_response ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
out->write( lo_cx_sdk->get_text( ) ).
ENDTRY.
Nächste Schritte
- Weitere Informationen zur Anwendungsentwicklung mit der SAP BTP-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.