Utiliser l'appel de fonction SAP avec Gemini

Ce document explique comment utiliser l'appel de fonction SAP avec Gemini à l'aide du SDK Vertex AI pour ABAP dans votre environnement SAP BTP, ABAP.

Vous pouvez définir des fonctions personnalisées et les fournir aux modèles Gemini à l'aide de la fonctionnalité Appel de fonction. Les modèles n'appellent pas directement les fonctions personnalisées, mais génèrent une sortie de données structurées qui spécifie le nom de la fonction et les arguments suggérés. Cette sortie vous permet d'écrire des applications qui utilisent la sortie structurée et appellent des API externes. La sortie de l'API obtenue peut ensuite être intégrée à une autre requête de modèle, ce qui permet d'obtenir des réponses de requête plus complètes.

Le SDK Vertex AI pour ABAP simplifie l'appel de fonction pour les développeurs ABAP en leur permettant d'appeler une logique personnalisée écrite dans des modules de fonction SAP :

  • Transmettre le nom du module de fonction SAP ou du service OData (Open Data Protocol) au modèle en tant que déclarations de fonction, en décrivant le nom de la fonction ou du service, leur objectif et les paramètres associés.
  • Définir l'appel automatique du module de fonction SAP ou du service OData implicitement lors de l'appel du modèle.

Avant de commencer

Avant d'utiliser le SDK Vertex AI pour ABAP pour l'appel de fonction SAP avec Gemini, assurez-vous que vous ou vos administrateurs avez rempli les conditions préalables suivantes :

Enrichir le contexte du modèle d'IA Gemini avec des données SAP en appelant un module de fonction SAP

Cette section explique comment enrichir le contexte du modèle d'IA Gemini avec des données SAP en appelant un module de fonction SAP.

Voici le parcours type d'un développeur ABAP pour appeler un module de fonction SAP:

  1. L'utilisateur fournit une requête d'entrée.
  2. Le SDK transmet la requête d'entrée et les déclarations de fonction au modèle.
  3. Le modèle examine la requête et les fonctions déclarées pour déduire la fonction à appeler et suggère les valeurs de paramètre à utiliser.
  4. Si l'appel automatique est défini, le SDK appelle le module de fonction SAP.
  5. Le SDK appelle ensuite le modèle avec la sortie de la fonction appelée.
  6. Le modèle répond avec une réponse fiable pour la requête finale enrichie avec la sortie de la fonction appelée.
  7. Le SDK renvoie la réponse à l'utilisateur.

Si vous choisissez de ne pas appeler automatiquement les modules de fonction SAP, le SDK vous permet d'utiliser la fonctionnalité d'appel de fonction sans aucune invocation de module de fonction SAP. Dans ce cas, vous pouvez suivre le workflow d'appel de fonction type pour utiliser des outils externes tels que des API et des fonctions.

Appel de fonction SAP avec Gemini dans un environnement SAP BTP, ABAP

Instancier la classe d'appelant Gemini multimodal

Pour appeler une fonction dans SAP, vous devez utiliser la classe /GOOG/CL_GENERATIVE_MODEL. Vous instanciez la classe en transmettant la clé de modèle configurée dans les paramètres de génération du modèle.

DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

Remplacez MODEL_KEY par le nom de la clé du modèle, configuré dans les paramètres de génération du modèle.

Créer un module de fonction SAP

Pour créer un module de fonction SAP pour l'appel automatique par le SDK, suivez le schéma fourni :

Catégorie Nom du paramètre Type associé
Importation… IT_FUNCTION_PARAMETERS /GOOG/T_FUNCTION_PARAMETERS
Exportation EV_FUNCTION_RESPONSE STRING
Modification en cours… CV_PROMPT STRING
Exceptions /GOOG/CX_SDK Exception Class

En fonction des paramètres d'importation, écrivez votre logique personnalisée dans le module de fonction, qui peut soit extraire des données SAP via des requêtes SELECT, soit appeler une API ou un module externe pour obtenir les informations manquantes.

Définissez le paramètre d'exportation EV_FUNCTION_RESPONSE avec les informations à renvoyer au contexte LLM. Vous pouvez également modifier le texte de la requête dans CV_PROMPT en fonction de la logique personnalisée et de vos exigences métier pour donner des instructions supplémentaires au LLM en fonction de différents scénarios métier.

Ajouter une déclaration de fonction

Pour ajouter une déclaration de fonction au contexte LLM, vous pouvez utiliser la méthode ADD_FUNCTION_DECLARATION. Appelez la méthode ADD_FUNCTION_DECLARATION chaque fois que vous devez ajouter une fonction au contexte.

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

Remplacez les éléments suivants :

  • PARAMETER_NAME : nom du paramètre.
  • PARAMETER_TYPE : type de données du paramètre, tel que string, integer ou boolean.
  • PARAMETER_DESCRIPTION : explication claire de l'objectif du paramètre et du format attendu.
  • PARAMETER_IS_REQUIRED : si ce paramètre est obligatoire pour que la fonction fonctionne, définissez la valeur sur ABAP_TRUE.
  • FUNCTION_MODULE_NAME : nom du module de fonction SAP.
  • FUNCTION_MODULE_DESCRIPTION : description du module de fonction SAP.

Vous pouvez également déclarer une fonction sans paramètres, qui peut servir de fonction de remplacement ou de sauvegarde. Si une invite utilisateur ne fournit pas suffisamment d'informations pour appeler une fonction spécifique, vous pouvez demander à Gemini de sélectionner cette fonction de remplacement.

Définir l'appel automatique du module de fonction SAP

Pour définir l'appel automatique de la fonction SAP sélectionnée par le modèle, vous pouvez utiliser la méthode SET_AUTO_INVOKE_SAP_FUNCTION. Si ABAP_TRUE est transmis dans le paramètre d'importation IV_AUTO_INVOKE, le module de fonction est appelé par le SDK et sa réponse est incluse dans le contexte LLM pour générer la réponse finale.

Vous devez définir votre module de fonction en suivant le schéma décrit dans la section Créer un module de fonction SAP.

lo_model->set_auto_invoke_sap_function( abap_true ).

Générer du contenu avec des appels de fonction

Pour transmettre le texte de la requête au modèle Gemini, vous pouvez utiliser la méthode GENERATE_CONTENT. Pour obtenir la réponse générée par Gemini avec le contexte supplémentaire ajouté à partir du module de fonction SAP via l'appel de fonction, utilisez la méthode GET_TEXT.

DATA(lv_response) = lo_model->generate_content( iv_prompt_text ='PROMPT'
                           )->get_text( ).

Remplacez PROMPT par votre requête textuelle.

Obtenir le nom de la fonction sélectionnée et les valeurs des paramètres

Pour obtenir la fonction sélectionnée par Gemini (parmi les fonctions déclarées) et ses paramètres suggérés, utilisez la méthode 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) ).

Remplacez PROMPT par votre requête textuelle.

Vous pouvez obtenir le nom de la fonction sélectionnée par Gemini à partir de LV_FUNCTION_NAME et les paramètres suggérés à partir de LT_FUNCTION_PARAMETERS. Vous pouvez utiliser ces informations pour valider, suivre et consigner les actions Gemini conformément aux consignes de votre entreprise concernant la gestion des informations et des événements de sécurité.

Exemple de code

L'exemple de code suivant montre comment utiliser l'appel de fonction SAP pour recevoir une réponse finale du modèle.

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.

Remplacez les éléments suivants :

  • MODEL_KEY : nom de la clé du modèle, configuré dans les paramètres de génération du modèle.
  • PARAMETER_NAME : nom du paramètre.
  • PARAMETER_TYPE : type de données du paramètre, tel que string, integer ou boolean.
  • PARAMETER_DESCRIPTION : explication claire de l'objectif du paramètre et du format attendu.
  • PARAMETER_IS_REQUIRED : si ce paramètre est obligatoire pour que la fonction fonctionne, définissez la valeur sur ABAP_TRUE.
  • FUNCTION_MODULE_NAME : nom du module de fonction SAP.
  • FUNCTION_MODULE_DESCRIPTION : description du module de fonction SAP.
  • PROMPT : votre requête de texte.

Enrichir le contexte du modèle d'IA Gemini avec des données SAP en appelant un service OData

Cette section explique comment enrichir le contexte du modèle d'IA Gemini avec des données SAP en appelant un service OData.

Voici le parcours type d'un développeur ABAP pour appeler un service OData:

  1. L'utilisateur fournit une requête d'entrée.
  2. Le SDK transmet la requête d'entrée et les déclarations de fonction au modèle.
  3. Le modèle examine la requête et les fonctions déclarées pour déduire la fonction à appeler et suggère les valeurs de paramètre à utiliser.
  4. Si l'appel automatique est défini, le SDK appelle le service OData.
  5. Le SDK appelle ensuite le modèle avec la sortie du service OData appelé.
  6. Le modèle répond avec une réponse fiable pour la requête finale enrichie avec la sortie du service OData appelé.
  7. Le SDK renvoie la réponse à l'utilisateur.

Si vous choisissez de ne pas appeler automatiquement les services OData, le SDK vous permet d'utiliser la fonctionnalité d'appel de fonction sans aucune invocation de service OData. Dans ce cas, vous pouvez suivre le workflow d'appel de fonction type pour utiliser des outils externes tels que des API et des fonctions.

Appel de fonction SAP avec Gemini dans un environnement SAP BTP, ABAP

Créer un service OData

Pour créer un service OData à appeler automatiquement par le SDK en tant que fonction, utilisez le schéma suivant:

{
    "UserRequest": "Input Prompt as user request",
    "FunctionResponse": null,
    "ModifiedUserRequest": null,
    "ContextParameters": [
        {
            "ParameterName": "Parameter 1",
            "ParameterValue": "Value 1"
        },
        {
            "ParameterName": "Parameter 2",
            "ParameterValue": "Value 2"
        }
    ]
}

Le tableau suivant fournit des informations sur les champs utilisés dans ce schéma:

Champ de schéma Type de champ Mode Entrée/Sortie Description
UserRequest String Entrée uniquement Requête d'entrée saisie par l'utilisateur.
FunctionResponse String Sortie uniquement Sortie du service OData. Il peut s'agir d'une valeur unique ou d'une chaîne JSON sérialisée.
ModifiedUserRequest String Sortie uniquement UserRequest modifié, qui est fourni à Gemini en tant qu'invite.
ContextParameters Table of parameters Entrée uniquement Tableau des paramètres, qui inclut les noms et les valeurs des paramètres.
ParameterName String Entrée uniquement Nom du paramètre de fonction.
ParameterValue String Entrée uniquement Valeur du paramètre de fonction, comme suggéré par Gemini.

Créer les entités de service OData

  1. Créez une entité à l'aide du schéma précédent.

    Cette entité accepte la requête de l'utilisateur en tant qu'invite, la transfère à Gemini et est déclarée en tant que fonction à l'aide du SDK Vertex AI pour ABAP. Cette entité renvoie également la réponse de la fonction OData du système SAP backend vers BTP, qui est ensuite enrichie dans le contexte du modèle d'IA Gemini.

    1. Attribuez un nom approprié au nouvel élément.
    2. Définissez les valeurs des attributs suivants. Conservez les valeurs par défaut pour tous les autres attributs.

      Nom Est-ce une clé ? Type de noyau EDM Nom du champ ABAP
      UserRequest Oui Edm.String USER_REQUEST
      FunctionResponse Non Edm.String FUNCTION_RESPONSE
      ModifiedUserRequest Non Edm.String MODIFIED_USER_REQUEST

    Si vous souhaitez placer d'autres entités dans le même service OData, créez-les à l'aide du même schéma.

  2. Créez une autre entité nommée ContextParameters avec les attributs suivants. Conservez les valeurs par défaut pour tous les autres attributs.

    Cette entité contient les paramètres de fonction et leurs valeurs fournis par le modèle Gemini.

    Nom Est-ce une clé ? Type de noyau EDM Nom du champ ABAP
    ParameterName Oui Edm.String PARAMETER_NAME
    ParameterValue Oui Edm.String PARAMETER_VALUE
  3. Créez des ensembles d'entités pour toutes les entités que vous avez créées lors des étapes précédentes.

  4. Créez une association entre chaque entité que vous avez créée à l'étape 1 et l'entité ContextParameters que vous avez créée à l'étape 2, comme suit:

    1. Attribuez un nom à l'association.
    2. Dans le champ Principal Entity (Entité principale), définissez le nom de l'entité que vous avez créée à l'étape 1.
    3. Dans le champ Cardinalité de l'entité principale, définissez M.
    4. Dans le champ Entité dépendante, définissez ContextParameters.
    5. Dans le champ Cardinalité de l'entité dépendante, définissez M.
    6. Enregistrez et générez les artefacts d'exécution OData.
  5. Ajoutez le service OData créé dans SAP Gateway et activez le nœud ICF.

  6. Générez le fichier EDMX pour les métadonnées OData comme suit:

    1. Accédez à TCode /iwfnd/maint_services et obtenez les métadonnées du service OData.
    2. Formatez et enregistrez le fichier XML généré avec l'extension de fichier .edmx.

Écrire la logique de la fonction OData

  1. Dans la classe MPC_EXT générée, ajoutez et activez un type d'entité profonde:

    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. Redéfinissez la méthode CREATE_DEEP_ENTITY de la classe DPC_EXT générée en procédant comme suit:

    1. Si vous avez créé plusieurs entités OData dans la section Créer les entités de service OData, ajoutez une instruction CASE pour chaque entité OData.
    2. Écrivez la logique ABAP pour get ou prepare la réponse afin d'enrichir le contexte pour Gemini dans l'application BTP.
    3. Dans le champ FUNCTION_RESPONSE, définissez la réponse.
    4. Dans le champ MODIFIED_USER_REQUEST, définissez la requête modifiée.
    5. À l'aide de la méthode OData COPY_DATA_TO_REF, liez la réponse globale dans le message.

    L'extrait de code suivant est un exemple de logique ABAP:

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

Remplacez les éléments suivants :

  • ENTITY_TYPE: nom de l'entité OData que vous avez créée à l'étape 1 de la section Créer les entités de service OData
  • MODIFIED_GEMINI_PROMPT: requête modifiée fournie par Gemini
  • ODATA_FUNCTION_RESPONSE: réponse fournie par le service OData

Si vous avez plusieurs champs, ou une structure ou une table imbriquée à transmettre en tant que réponse de fonction, vous pouvez sérialiser le type ABAP dans une chaîne à l'aide de la méthode SERIALIZE_JSON de la classe /GOOG/CL_JSON_UTIL du SDK.

Définir le service OData comme modèle de consommation de service sur SAP BTP

Après avoir créé le service OData, vous devez le définir en tant que modèle de consommation de service dans votre environnement SAP BTP. Pour ce faire, créez un modèle de consommation de services, un service sortant HTTP, un scénario de communication et un arrangement de communication.

Créer un modèle de consommation de service

  1. Dans votre projet ABAP, ouvrez le menu contextuel, puis sélectionnez New > Other ABAP Repository Object > Business Services > Service Consumption Model (Nouveau > Autre objet de dépôt ABAP > Services d'entreprise > Modèle de consommation de services).
  2. Dans la fenêtre Nouveau modèle de consommation de services, procédez comme suit :
    1. Dans le champ Package (Package), sélectionnez et importez le fichier EDMX que vous avez généré précédemment dans une section précédente.
    2. Saisissez un nom et une description.
    3. Dans le champ Remote Consumption Mode (Mode de consommation à distance), sélectionnez OData.
    4. Cliquez sur Terminer.

Créer un service sortant HTTP

  1. Dans votre projet ABAP, ouvrez le menu contextuel.
  2. Sélectionnez votre package, puis cliquez sur Nouveau > Autre objet de dépôt ABAP.
  3. Dans le champ Service type (Type de service), sélectionnez HTTP Service (Service HTTP).
  4. Dans le champ Default Path Prefix (Préfixe de chemin d'accès par défaut), saisissez le préfixe de chemin d'accès de votre service OData dans le système SAP backend.

    Pour connaître le préfixe de chemin OData, accédez au client de la passerelle SAP. La valeur affichée dans le champ URI de la requête correspond au préfixe de chemin d'accès de votre service OData.

  5. Cliquez sur Suivant.

Créer un scénario de communication

Après avoir créé un service sortant HTTP, vous devez créer un scénario de communication et y attribuer le service sortant. Pour cela, procédez comme suit :

  1. Dans votre projet ABAP, sélectionnez Scénario de communication, puis cliquez sur Suivant.
  2. Dans la fenêtre Nouveau scénario de communication, procédez comme suit :
    1. Saisissez un nom et une description.
    2. Cliquez sur Suivant.
    3. Dans le champ Type de scénario de communication, sélectionnez Géré par le client.
    4. Accédez à l'onglet Sortant.
    5. Dans le champ Instances autorisées, sélectionnez Une instance par scénario et système de communication.
    6. Dans le champ Méthodes d'authentification compatibles, cochez les cases Basique, X.509 et OAuth 2.0.
    7. Dans le champ OAuth 2.0 Grant Type (Type d'autorisation OAuth 2.0), sélectionnez SAML 2.0 Bearer Assertion (Assertion de porteur SAML 2.0).
    8. Dans la section Services sortants, cliquez sur Ajouter, puis sélectionnez le service sortant que vous avez créé dans la section précédente.
    9. Dans la section Service sortant, assurez-vous que le préfixe de chemin d'accès par défaut est correct. Si ce n'est pas le cas, cliquez sur Synchroniser.
    10. Enregistrez le scénario de communication.

Créer une configuration de communication

  1. Accéder à la plate-forme de lancement SAP Fiori du système BTP ABAP dans lequel le SDK ABAP pour Google Cloud est installé.
  2. Ouvrez l'application Configuration de communication.

    1. Cliquez sur New (Nouveau).
    2. Dans la boîte de dialogue Nouvelle configuration de communication qui s'affiche, saisissez une valeur pour les champs suivants :

      • Scénario: sélectionnez le scénario de communication que vous avez créé dans la section Créer un scénario de communication.
      • Nom de la configuration : saisissez un nom pour la configuration de communication.
    3. Cliquez sur Créer.

    4. Pour la configuration de la communication qui s'affiche, dans le champ Système de communication, sélectionnez le système de communication que vous avez créé à l'étape précédente.

    5. Cliquez sur Enregistrer.

Instancier la classe d'appelant Gemini multimodal

Pour appeler une fonction dans SAP, vous devez utiliser la classe /GOOG/CL_GENERATIVE_MODEL. Vous instanciez la classe en transmettant la clé de modèle configurée dans les paramètres de génération du modèle.

DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

Remplacez MODEL_KEY par le nom de la clé du modèle, configuré dans les paramètres de génération du modèle.

Ajouter une déclaration de fonction

Pour ajouter un service OData en tant que déclaration de fonction au contexte LLM, vous pouvez utiliser la méthode ADD_FUNCTION_DECLARATION. Appelez la méthode ADD_FUNCTION_DECLARATION chaque fois que vous devez ajouter un service OData en tant que fonction au contexte.

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

Remplacez les éléments suivants :

  • PARAMETER_NAME: nom du paramètre
  • PARAMETER_TYPE: type de données du paramètre, tel que string, integer ou boolean
  • PARAMETER_DESCRIPTION: explication claire de l'objectif du paramètre et du format attendu
  • PARAMETER_IS_REQUIRED: définissez la valeur sur ABAP_TRUE si ce paramètre est obligatoire pour que la fonction fonctionne.
  • COMMUNICATION_SCENARIO: ID du scénario de communication que vous avez créé
  • ODATA_SERVICE_ID: ID du service sortant que vous avez créé pour le service OData
  • ODATA_SERVICE_CONSUMPTION_MODEL_ID: ID du modèle de consommation de services que vous avez créé pour le service OData
  • ODATA_ROOT_URI: URI racine du service OData dans le système SAP de backend
  • ODATA_ENTITY_SET_NAME: nom de l'ensemble d'entités du service OData à déclarer en tant que fonction
  • FUNCTION_NAME: nom de la fonction que vous avez déclarée pour le service OData que vous souhaitez utiliser
  • FUNCTION_DESCRIPTION: description de la fonction que vous avez déclarée pour le service OData que vous souhaitez utiliser

Définir l'appel automatique du service OData

Pour définir l'appel automatique du service OData de la fonction SAP sélectionné par le modèle Gemini, vous pouvez utiliser la méthode SET_AUTO_INVOKE_SAP_FUNCTION. Si ABAP_TRUE est transmis dans le paramètre d'importation IV_AUTO_INVOKE, le module de fonction est appelé par le SDK et sa réponse est incluse dans le contexte LLM pour générer la réponse finale.

Vous devez définir votre module de fonction en suivant le schéma décrit dans la section Créer un module de fonction SAP.

lo_model->set_auto_invoke_sap_function( abap_true ).

Générer du contenu avec des appels de fonction

Pour transmettre le texte de la requête au modèle Gemini, vous pouvez utiliser la méthode GENERATE_CONTENT. Pour obtenir la réponse générée par Gemini avec le contexte supplémentaire ajouté à partir du module de fonction SAP via l'appel de fonction, utilisez la méthode GET_TEXT.

DATA(lv_response) = lo_model->generate_content( iv_prompt_text ='PROMPT'
                           )->get_text( ).

Remplacez PROMPT par votre requête textuelle.

Obtenir le nom de la fonction sélectionnée et les valeurs des paramètres

Pour obtenir la fonction sélectionnée par Gemini (parmi les fonctions déclarées) et ses paramètres suggérés, utilisez la méthode 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) ).

Exemple de code

L'exemple de code suivant montre comment utiliser l'appel de fonction SAP avec un service OData pour recevoir une réponse finale du modèle:

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.

Étape suivante