Usa llamadas a funciones de SAP con Gemini

En este documento, se proporciona una descripción general de cómo usar las llamadas a funciones de SAP con Gemini con el SDK de Vertex AI para ABAP en tu entorno de ABAP de SAP BTP.

Puedes definir funciones personalizadas y proporcionarlas a los modelos de Gemini con la función Llamada a función. Los modelos no invocan directamente las funciones personalizadas, sino que generan un resultado de datos estructurados que especifica el nombre de la función y los argumentos sugeridos. Este resultado te permite escribir aplicaciones que tomen el resultado estructurado y llamen a APIs externas. El resultado de la API resultante se puede incorporar a otra instrucción del modelo, lo que permite respuestas de consulta más completas.

El SDK de Vertex AI para ABAP simplifica las llamadas a funciones para los desarrolladores de ABAP, ya que les brinda oportunidades para invocar lógica personalizada escrita en módulos de funciones de SAP de las siguientes maneras:

  • Pasar el nombre del módulo de funciones de SAP o el nombre del servicio de OData (protocolo de datos abiertos) al modelo como declaraciones de funciones, que describen el nombre de la función o el servicio, su propósito y los parámetros relacionados.
  • Establecer la invocación automática del módulo de funciones de SAP o del servicio de OData de forma implícita mientras se invoca el modelo.

Antes de comenzar

Antes de usar el SDK de Vertex AI para ABAP para las llamadas a funciones de SAP con Gemini, asegúrate de que tú o tus administradores hayan completado los siguientes requisitos previos:

Invoca un módulo de funciones de SAP para enriquecer el contexto del modelo de IA de Gemini con datos de SAP

En esta sección, se explica cómo puedes enriquecer el contexto del modelo de IA de Gemini con datos de SAP mediante la invocación de un módulo de funciones de SAP.

El siguiente es un recorrido típico de un desarrollador de ABAP para invocar un módulo de función de SAP:

  1. El usuario proporciona una instrucción de entrada.
  2. El SDK pasa la instrucción de entrada y las declaraciones de funciones al modelo.
  3. El modelo revisa la instrucción y las funciones declaradas para derivar la función a la que llamar y sugiere los valores de los parámetros para llamar a la función.
  4. Si se establece la invocación automática, el SDK llama al módulo de funciones de SAP.
  5. Luego, el SDK invoca el modelo con el resultado de la función llamada.
  6. El modelo responde con una respuesta confiable para la instrucción final enriquecida con el resultado de la función llamada.
  7. El SDK muestra la respuesta al usuario.

Si decides no invocar automáticamente los módulos de funciones de SAP, el SDK te permite usar la función de llamada a función sin ninguna invocación de módulo de función de SAP. En este caso, puedes seguir el flujo de trabajo típico de llamadas a función para usar herramientas externas, como APIs y funciones.

Llamadas a funciones de SAP con Gemini en un entorno de SAP BTP, ABAP

Crea una instancia de la clase de invocador multimodal de Gemini

Para invocar llamadas a funciones en SAP, usa la clase /GOOG/CL_GENERATIVE_MODEL. Para crear una instancia de la clase, debes pasar la clave de modelo configurada en los parámetros de generación del modelo.

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

Reemplaza MODEL_KEY por el nombre de la clave de modelo, que se configura en los parámetros de generación del modelo.

Crea un módulo de función de SAP

Para crear un módulo de función de SAP para que el SDK lo invoque automáticamente, sigue el esquema proporcionado:

Categoría Nombre del parámetro Tipo asociado
Se está importando IT_FUNCTION_PARAMETERS /GOOG/T_FUNCTION_PARAMETERS
Exportando EV_FUNCTION_RESPONSE STRING
Cambiando CV_PROMPT STRING
Excepciones /GOOG/CX_SDK Exception Class

En función de los parámetros de importación, escribe tu lógica personalizada dentro del módulo de la función, que puede ser recuperar datos de SAP a través de consultas SELECT o llamar a una API o un módulo externos para obtener la información faltante.

Configura el parámetro de exportación EV_FUNCTION_RESPONSE con la información para enviar comentarios al contexto de LLM. También puedes cambiar o modificar el texto de la instrucción en CV_PROMPT según la lógica personalizada y los requisitos empresariales para dar más instrucciones al LLM según diferentes situaciones empresariales.

Agrega la declaración de la función

Para agregar una declaración de función al contexto de LLM, puedes usar el método ADD_FUNCTION_DECLARATION. Llama al método ADD_FUNCTION_DECLARATION cada vez que necesites agregar una función al contexto.

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

Reemplaza lo siguiente:

  • PARAMETER_NAME: El nombre del parámetro.
  • PARAMETER_TYPE: Es el tipo de datos del parámetro, como string, integer o boolean.
  • PARAMETER_DESCRIPTION: Una explicación clara del propósito del parámetro y el formato esperado.
  • PARAMETER_IS_REQUIRED: Si este parámetro es obligatorio para que la función se ejecute, establece el valor en ABAP_TRUE.
  • FUNCTION_MODULE_NAME: Es el nombre del módulo de funciones de SAP.
  • FUNCTION_MODULE_DESCRIPTION: Es la descripción del módulo de funciones de SAP.

También puedes declarar una función sin parámetros, que puede servir como función de resguardo o de resguardo. Si un mensaje del usuario no proporciona suficiente información para llamar a una función específica, puedes indicarle a Gemini que seleccione esta función de resguardo.

Cómo configurar la invocación automática del módulo de funciones de SAP

Para configurar la invocación automática de la función de SAP que selecciona el modelo, puedes usar el método SET_AUTO_INVOKE_SAP_FUNCTION. Si se pasa ABAP_TRUE en el parámetro de importación IV_AUTO_INVOKE, el SDK invoca el módulo de función y su respuesta se incluye con el contexto de LLM para generar la respuesta final.

Debes definir tu módulo de funciones siguiendo el esquema que se describe en la sección Cómo crear un módulo de funciones de SAP.

lo_model->set_auto_invoke_sap_function( abap_true ).

Genera contenido con llamadas a función

Para pasar el texto de la instrucción al modelo de Gemini, puedes usar el método GENERATE_CONTENT. Para obtener la respuesta que genera Gemini con el contexto adicional agregado desde el módulo de funciones de SAP a través de llamadas a funciones, usa el método GET_TEXT.

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

Reemplaza PROMPT por tu instrucción de texto.

Obtén el nombre de la función seleccionada y los valores de los parámetros

Para obtener la función que seleccionó Gemini (entre las funciones declaradas) y sus parámetros sugeridos, usa el método 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) ).

Reemplaza PROMPT por tu instrucción de texto.

Puedes obtener el nombre de la función seleccionada de Gemini de LV_FUNCTION_NAME y los parámetros sugeridos de LT_FUNCTION_PARAMETERS. Puedes usar esta información para validar, hacer un seguimiento y registrar las acciones de Gemini según los lineamientos de administración de información y eventos de seguridad de tu empresa.

Muestra de código

En la siguiente muestra de código, se ilustra cómo usar las llamadas a función de SAP para recibir una respuesta final del modelo.

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.

Reemplaza lo siguiente:

  • MODEL_KEY: El nombre de la clave del modelo, que se configura en los parámetros de generación del modelo.
  • PARAMETER_NAME: El nombre del parámetro.
  • PARAMETER_TYPE: Es el tipo de datos del parámetro, como string, integer o boolean.
  • PARAMETER_DESCRIPTION: Una explicación clara del propósito del parámetro y el formato esperado.
  • PARAMETER_IS_REQUIRED: Si este parámetro es obligatorio para que la función se ejecute, establece el valor en ABAP_TRUE.
  • FUNCTION_MODULE_NAME: Es el nombre del módulo de funciones de SAP.
  • FUNCTION_MODULE_DESCRIPTION: Es la descripción del módulo de funciones de SAP.
  • PROMPT: Tu sugerencia de texto.

Enriquece el contexto del modelo de IA de Gemini con datos de SAP mediante la invocación de un servicio de OData

En esta sección, se explica cómo puedes enriquecer el contexto del modelo de IA de Gemini con datos de SAP invocando un servicio de OData.

El siguiente es un recorrido típico de un desarrollador de ABAP para invocar un servicio de OData:

  1. El usuario proporciona una instrucción de entrada.
  2. El SDK pasa la instrucción de entrada y las declaraciones de funciones al modelo.
  3. El modelo revisa la instrucción y las funciones declaradas para derivar la función a la que llamar y sugiere los valores de los parámetros para llamar a la función.
  4. Si se establece la invocación automática, el SDK llama al servicio de OData.
  5. Luego, el SDK invoca el modelo con el resultado del servicio de OData llamado.
  6. El modelo responde con una respuesta confiable para la instrucción final enriquecida con el resultado del servicio de OData llamado.
  7. El SDK muestra la respuesta al usuario.

Si decides no invocar automáticamente los servicios de OData, el SDK te permite usar la función de llamada a función sin ninguna invocación de servicio de OData. En este caso, puedes seguir el flujo de trabajo típico de llamadas a función para usar herramientas externas, como APIs y funciones.

Llamadas a funciones de SAP con Gemini en un entorno de SAP BTP, ABAP

Crea un servicio de OData

Para crear un servicio de OData para que el SDK lo invoque automáticamente como una función, usa el siguiente esquema:

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

En la siguiente tabla, se proporciona información sobre los campos que se usan en este esquema:

Campo del esquema Tipo de campo Modo de entrada/salida Descripción
UserRequest String Solo entrada Es la instrucción de entrada que ingresa el usuario.
FunctionResponse String Solo salida El resultado del servicio de OData. Puede ser un solo valor o una cadena JSON serializada.
ModifiedUserRequest String Solo salida El UserRequest modificado, que se envía a Gemini como instrucción
ContextParameters Table of parameters Solo entrada La tabla de parámetros, que incluye los nombres y valores de los parámetros.
ParameterName String Solo entrada Es el nombre del parámetro de la función.
ParameterValue String Solo entrada Es el valor del parámetro de la función, como lo sugiere Gemini.

Crea las entidades del servicio de OData

  1. Crea una entidad con el esquema anterior.

    Esta entidad acepta la solicitud del usuario como una instrucción, la reenvía a Gemini y se declara como una función con el SDK de Vertex AI para ABAP. Esta entidad también lleva la respuesta de la función de OData del sistema de SAP de backend al BTP, que luego se agrega al contexto del modelo de IA de Gemini.

    1. Establece un nombre adecuado para el elemento nuevo.
    2. Establece valores para los siguientes atributos. Conserva los valores predeterminados para todos los demás atributos.

      Nombre ¿Es clave? Tipo de núcleo de EDM Nombre del campo ABAP
      UserRequest Edm.String USER_REQUEST
      FunctionResponse No Edm.String FUNCTION_RESPONSE
      ModifiedUserRequest No Edm.String MODIFIED_USER_REQUEST

    Si quieres colocar más entidades en el mismo servicio de OData, crea las con el mismo esquema.

  2. Crea otra entidad llamada ContextParameters con los siguientes atributos. Conserva los valores predeterminados para todos los demás atributos.

    Esta entidad contiene los parámetros de la función y sus valores que proporciona el modelo Gemini.

    Nombre ¿Es clave? Tipo de núcleo de EDM Nombre del campo ABAP
    ParameterName Edm.String PARAMETER_NAME
    ParameterValue Edm.String PARAMETER_VALUE
  3. Crea conjuntos de entidades para todas las entidades que creaste como parte de los pasos anteriores.

  4. Crea una asociación entre cada entidad que creaste en el paso 1 con la entidad ContextParameters que creaste en el paso 2 de la siguiente manera:

    1. Establece un nombre para la asociación.
    2. En el campo Entidad principal, establece el nombre de la entidad que creaste en el paso 1.
    3. En el campo Cardinalidad de la entidad principal, establece M.
    4. En el campo Entidad dependiente, establece ContextParameters.
    5. En el campo Cardinalidad de entidad dependiente, establece M.
    6. Guarda y genera los artefactos del entorno de ejecución de OData.
  5. Agrega el servicio de OData creado en SAP Gateway y activa el nodo ICF.

  6. Genera el archivo EDMX para los metadatos de OData de la siguiente manera:

    1. Ve a TCode /iwfnd/maint_services y obtén los metadatos del servicio de OData.
    2. Dale formato al archivo XML generado y guárdalo con la extensión .edmx.

Escribe la lógica de la función de OData

  1. En la clase MPC_EXT generada, agrega y activa un tipo de entidad profunda:

    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. Para redefinir el método CREATE_DEEP_ENTITY de la clase DPC_EXT generada, completa los siguientes pasos:

    1. Si creaste más de una entidad de OData en la sección Crea las entidades de servicio de OData, agrega una sentencia CASE para cada entidad de OData.
    2. Escribe la lógica de ABAP para get o prepare la respuesta para aumentar el contexto de Gemini en la aplicación de BTP.
    3. En el campo FUNCTION_RESPONSE, establece la respuesta.
    4. En el campo MODIFIED_USER_REQUEST, establece la instrucción modificada.
    5. Cuando usas el método COPY_DATA_TO_REF de OData, vincula la respuesta general en el mensaje.

    El siguiente fragmento es una lógica de ABAP de muestra:

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

Reemplaza lo siguiente:

  • ENTITY_TYPE: El nombre de la entidad de OData que creaste en el paso 1 de la sección Crea las entidades de servicio de OData
  • MODIFIED_GEMINI_PROMPT: La instrucción modificada que proporciona Gemini
  • ODATA_FUNCTION_RESPONSE: La respuesta que proporciona el servicio de OData

Si tienes más de un campo, o una estructura o tabla anidada que se pasará como respuesta de la función, puedes serializar el tipo ABAP en una cadena con el método SERIALIZE_JSON de la clase /GOOG/CL_JSON_UTIL del SDK.

Define el servicio de OData como un modelo de consumo de servicios en SAP BTP

Después de crear el servicio de OData, debes definirlo como un modelo de consumo de servicios en tu entorno de SAP BTP. Para ello, creas un modelo de consumo de servicios, un servicio HTTP saliente, una situación de comunicación y un acuerdo de comunicación.

Crea un modelo de consumo de servicios

  1. En tu proyecto de ABAP, abre el menú contextual y selecciona Nuevo > Otro objeto de repositorio de ABAP > Servicios empresariales > Modelo de consumo de servicios.
  2. En la ventana New Service Consumption Model, completa los siguientes pasos:
    1. En el campo Paquete, selecciona y sube el archivo EDMX que generaste antes en una sección anterior.
    2. Ingresa un nombre y una descripción.
    3. En el campo Modo de consumo remoto, selecciona OData.
    4. Haz clic en Finish (Finalizar).

Crea un servicio de salida HTTP

  1. En tu proyecto ABAP, abre el menú contextual.
  2. Selecciona tu paquete y haz clic en Nuevo > Otro objeto de repositorio de ABAP.
  3. En el campo Tipo de servicio, selecciona Servicio HTTP.
  4. En el campo Default Path Prefix, ingresa el prefijo de ruta de acceso de tu servicio de OData en el sistema SAP de backend.

    Para conocer el prefijo de ruta de OData, accede al cliente de la puerta de enlace de SAP. El valor que ves en el campo Request URI es el prefijo de ruta de tu servicio de OData.

  5. Haz clic en Siguiente.

Crea una situación de comunicación

Después de crear un servicio saliente de HTTP, debes crear una situación de comunicación y asignarle el servicio saliente. Para hacerlo, completa los siguientes pasos:

  1. En tu proyecto ABAP, selecciona Communication Scenario y, luego, haz clic en Next.
  2. En la ventana New Communication Scenario, completa los siguientes pasos:
    1. Ingresa un nombre y una descripción.
    2. Haz clic en Siguiente.
    3. En el campo Communication Scenario Type, selecciona Customer Managed.
    4. Ve a la pestaña Salidas.
    5. En el campo Instancias permitidas, selecciona Una instancia por situación y sistema de comunicación.
    6. En el campo Métodos de autenticación compatibles, selecciona las siguientes casillas de verificación: Básica, X.509 y OAuth 2.0.
    7. En el campo OAuth 2.0 Grant Type, selecciona SAML 2.0 Bearer Assertion.
    8. En la sección Servicios salientes, haz clic en Agregar y, luego, selecciona el servicio saliente que creaste en la sección anterior.
    9. En la sección Servicio saliente, asegúrate de que el Prefijo de ruta de acceso predeterminado sea correcto. Si no es así, haz clic en Sincronizar.
    10. Guarda la situación de comunicación.

Crea un acuerdo de comunicación

  1. Accede al SAP Fiori launchpad del sistema BTP ABAP en el que está instalado el SDK de ABAP para Google Cloud.
  2. Abre la app Communication Arrangement.

    1. Haz clic en Nuevo.
    2. En el diálogo Nuevo acuerdo de comunicaciones que aparece, ingresa un valor para los siguientes campos:

      • Situación: Selecciona la situación de comunicación que creaste en la sección Crea una situación de comunicación.
      • Nombre del acuerdo: ingresa un nombre para el acuerdo de comunicación.
    3. Haz clic en Crear.

    4. Para la disposición de comunicación que aparece, en el campo Sistema de comunicaciones, selecciona el sistema de comunicación que creaste en el paso anterior.

    5. Haz clic en Guardar.

Crea una instancia de la clase de invocador multimodal de Gemini

Para invocar llamadas a funciones en SAP, usa la clase /GOOG/CL_GENERATIVE_MODEL. Para crear una instancia de la clase, debes pasar la clave de modelo configurada en los parámetros de generación del modelo.

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

Reemplaza MODEL_KEY por el nombre de la clave de modelo, que se configura en los parámetros de generación del modelo.

Agrega la declaración de la función

Para agregar un servicio de OData como una declaración de función al contexto de LLM, puedes usar el método ADD_FUNCTION_DECLARATION. Llama al método ADD_FUNCTION_DECLARATION cada vez que necesites agregar un servicio de OData como una función al contexto.

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

Reemplaza lo siguiente:

  • PARAMETER_NAME: Es el nombre del parámetro.
  • PARAMETER_TYPE: Es el tipo de datos del parámetro, como string, integer o boolean.
  • PARAMETER_DESCRIPTION: Una explicación clara del propósito del parámetro y el formato esperado
  • PARAMETER_IS_REQUIRED: Establece el valor en ABAP_TRUE si este parámetro es obligatorio para que la función se ejecute.
  • COMMUNICATION_SCENARIO: Es el ID de la situación de comunicación que creaste.
  • ODATA_SERVICE_ID: Es el ID del servicio saliente que creaste para el servicio de OData.
  • ODATA_SERVICE_CONSUMPTION_MODEL_ID: El ID del modelo de consumo de servicios que creaste para el servicio de OData
  • ODATA_ROOT_URI: Es el URI raíz del servicio de OData en el sistema de SAP de backend.
  • ODATA_ENTITY_SET_NAME: Es el nombre del conjunto de entidades del servicio de OData que se declarará como una función.
  • FUNCTION_NAME: El nombre de la función que declaraste para el servicio de OData que deseas usar.
  • FUNCTION_DESCRIPTION: Es la descripción de la función que declaraste para el servicio de OData que deseas usar.

Cómo configurar la invocación automática del servicio de OData

Para configurar la invocación automática del servicio de OData de la función de SAP que selecciona el modelo Gemini, puedes usar el método SET_AUTO_INVOKE_SAP_FUNCTION. Si se pasa ABAP_TRUE en el parámetro de importación IV_AUTO_INVOKE, el SDK invoca el módulo de función y su respuesta se incluye con el contexto de LLM para generar la respuesta final.

Debes definir tu módulo de funciones siguiendo el esquema que se describe en la sección Cómo crear un módulo de funciones de SAP.

lo_model->set_auto_invoke_sap_function( abap_true ).

Genera contenido con llamadas a función

Para pasar el texto de la instrucción al modelo de Gemini, puedes usar el método GENERATE_CONTENT. Para obtener la respuesta que genera Gemini con el contexto adicional agregado desde el módulo de funciones de SAP a través de llamadas a funciones, usa el método GET_TEXT.

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

Reemplaza PROMPT por tu instrucción de texto.

Obtén el nombre de la función seleccionada y los valores de los parámetros

Para obtener la función que seleccionó Gemini (entre las funciones declaradas) y sus parámetros sugeridos, usa el método 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) ).

Muestra de código

En la siguiente muestra de código, se ilustra cómo usar las llamadas a función de SAP con un servicio de OData para recibir una respuesta final del modelo:

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.

¿Qué sigue?