SAP-Funktionsaufrufe mit Gemini verwenden

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:

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:

  1. Der Nutzer gibt einen Eingabevorschlag ein.
  2. Das SDK übergibt den Eingabe-Prompt und die Funktionsdeklarationen an das Modell.
  3. 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.
  4. Wenn der automatische Aufruf festgelegt ist, ruft das SDK das SAP-Funktionsmodul auf.
  5. Das SDK ruft das Modell dann mit der Ausgabe der aufgerufenen Funktion auf.
  6. Das Modell antwortet mit einer zuverlässigen Antwort auf die endgültige Eingabeaufforderung, die mit der Ausgabe der aufgerufenen Funktion angereichert ist.
  7. 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.

SAP-Funktionsaufrufe mit Gemini in einer SAP BTP, ABAP-Umgebung

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 oder boolean.
  • 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 auf ABAP_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 oder boolean.
  • 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 auf ABAP_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:

  1. Der Nutzer gibt einen Eingabevorschlag ein.
  2. Das SDK übergibt den Eingabe-Prompt und die Funktionsdeklarationen an das Modell.
  3. 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.
  4. Wenn die automatische Aufruffunktion festgelegt ist, ruft das SDK den OData-Dienst auf.
  5. Das SDK ruft das Modell dann mit der Ausgabe des aufgerufenen OData-Dienstes auf.
  6. Das Modell antwortet mit einer zuverlässigen Antwort auf die endgültige Eingabeaufforderung, die mit der Ausgabe des aufgerufenen OData-Dienstes angereichert ist.
  7. 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.

SAP-Funktionsaufrufe mit Gemini in einer SAP BTP, ABAP-Umgebung

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

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

    1. Geben Sie einen geeigneten Namen für das neue Element ein.
    2. 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.

  2. 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
  3. Erstellen Sie Entitätssätze für alle Entitäten, die Sie in den vorherigen Schritten erstellt haben.

  4. 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:

    1. Legen Sie einen Namen für die Verknüpfung fest.
    2. Geben Sie im Feld Principal Entity (Hauptentität) den Namen der Entität ein, die Sie in Schritt 1 erstellt haben.
    3. Legen Sie im Feld Cardinalität der Hauptentität den Wert M fest.
    4. Geben Sie im Feld Dependent Entity (Abhängige Entität) den Wert ContextParameters ein.
    5. Legen Sie im Feld Cardinalität der abhängigen Entität den Wert M fest.
    6. Speichern und generieren Sie die OData-Laufzeitartefakte.
  5. Fügen Sie den erstellten OData-Dienst in SAP Gateway hinzu und aktivieren Sie den ICF-Knoten.

  6. So generieren Sie die EDMX-Datei für die OData-Metadaten:

    1. Rufen Sie TCode /iwfnd/maint_services auf und rufen Sie die Metadaten für den OData-Dienst ab.
    2. Formatieren und speichern Sie die generierte XML-Datei mit der Dateiendung .edmx.

OData-Funktionslogik schreiben

  1. 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.
    
  2. Definieren Sie die CREATE_DEEP_ENTITY-Methode der generierten DPC_EXT-Klasse neu. Gehen Sie dazu so vor:

    1. 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.
    2. Schreiben Sie die ABAP-Logik in get oder prepare der Antwort, um den Kontext für Gemini in der BTP-Anwendung zu erweitern.
    3. Legen Sie im Feld FUNCTION_RESPONSE die Antwort fest.
    4. Legen Sie im Feld MODIFIED_USER_REQUEST die geänderte Aufforderung fest.
    5. 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.
     ```
    

Ersetzen Sie Folgendes:

  • ENTITY_TYPE: Der Name der OData-Entität, die Sie in Schritt 1 des Abschnitts OData-Dienstentitäten erstellen erstellt haben
  • MODIFIED_GEMINI_PROMPT: der von Gemini bereitgestellte geänderte Prompt
  • ODATA_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

  1. Ö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.
  2. Führen Sie im Fenster Neues Modell für die Dienstnutzung die folgenden Schritte aus:
    1. 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.
    2. Geben Sie einen Namen und eine Beschreibung ein.
    3. Wählen Sie im Feld Remote Consumption Mode (Modus für die Remote-Nutzung) die Option OData aus.
    4. Klicken Sie auf Beenden.

HTTP-Ausgangsdienst erstellen

  1. Öffnen Sie in Ihrem ABAP-Projekt das Kontextmenü.
  2. Wählen Sie Ihr Paket aus und klicken Sie auf Neu > Anderes ABAP-Repository-Objekt.
  3. Wählen Sie im Feld Service Type (Diensttyp) die Option HTTP Service (HTTP-Dienst) aus.
  4. 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.

  5. 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:

  1. Wählen Sie in Ihrem ABAP-Projekt Kommunikationsszenario aus und klicken Sie auf Weiter.
  2. Führen Sie im Fenster Neues Kommunikationsszenario die folgenden Schritte aus:
    1. Geben Sie einen Namen und eine Beschreibung ein.
    2. Klicken Sie auf Weiter.
    3. Wählen Sie im Feld Communication Scenario Type (Art des Kommunikationsszenarios) die Option Customer Managed (Vom Kunden verwaltet) aus.
    4. Rufen Sie den Tab Outbound auf.
    5. Wählen Sie im Feld Zulässige Instanzen die Option Eine Instanz pro Szenario und Kommunikationssystem aus.
    6. Klicken Sie im Feld Unterstützte Authentifizierungsmethoden die folgenden Kästchen an: Basic, X.509 und OAuth 2.0.
    7. 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.
    8. 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.
    9. Prüfen Sie im Abschnitt Outbound Service (Ausgehende Dienste), ob das Default Path Prefix (Standardpfadpräfix) korrekt ist. Falls nicht, klicken Sie auf Synchronisieren.
    10. Speichern Sie das Kommunikationsszenario.

Kommunikationsvereinbarung erstellen

  1. Rufen Sie das SAP Fiori-Start-Dashboard des BTP ABAP-Systems auf, in dem das ABAP SDK for Google Cloud installiert ist.
  2. Öffnen Sie die App Kommunikationsvereinbarung.

    1. Klicken Sie auf Neu.
    2. 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.
    3. Klicken Sie auf Erstellen.

    4. Wählen Sie für die angezeigte Kommunikationsvereinbarung im Feld Kommunikationssystem das Kommunikationssystem aus, das Sie im vorherigen Schritt erstellt haben.

    5. 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 Parameters
  • PARAMETER_TYPE: Der Datentyp des Parameters, z. B. string, integer oder boolean.
  • PARAMETER_DESCRIPTION: Eine klare Erläuterung des Zwecks und des erwarteten Formats des Parameters.
  • PARAMETER_IS_REQUIRED: Legen Sie den Wert auf ABAP_TRUE fest, wenn dieser Parameter für die Funktion erforderlich ist.
  • COMMUNICATION_SCENARIO: die ID des von Ihnen erstellten Kommunikationsszenarios
  • ODATA_SERVICE_ID: die ID des ausgehenden Dienstes, den Sie für den OData-Dienst erstellt haben
  • ODATA_SERVICE_CONSUMPTION_MODEL_ID: die ID des Modells für die Dienstnutzung, das Sie für den OData-Dienst erstellt haben
  • ODATA_ROOT_URI: die Stamm-URI des OData-Dienstes im Backend-SAP-System
  • ODATA_ENTITY_SET_NAME: der Name des Entitätssatzes des OData-Dienstes, der als Funktion deklariert werden soll
  • FUNCTION_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