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:
- Habilitaste la API de Vertex AI en tu proyecto de Google Cloud.
- Instalaste el SDK de Vertex AI para ABAP en tu entorno de SAP.
- Configura la autenticación para acceder a la API de Vertex AI.
- Configuraste los parámetros de generación del modelo.
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:
- El usuario proporciona una instrucción de entrada.
- El SDK pasa la instrucción de entrada y las declaraciones de funciones al modelo.
- 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.
- Si se establece la invocación automática, el SDK llama al módulo de funciones de SAP.
- Luego, el SDK invoca el modelo con el resultado de la función llamada.
- El modelo responde con una respuesta confiable para la instrucción final enriquecida con el resultado de la función llamada.
- 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.
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, comostring
,integer
oboolean
.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 enABAP_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, comostring
,integer
oboolean
.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 enABAP_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:
- El usuario proporciona una instrucción de entrada.
- El SDK pasa la instrucción de entrada y las declaraciones de funciones al modelo.
- 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.
- Si se establece la invocación automática, el SDK llama al servicio de OData.
- Luego, el SDK invoca el modelo con el resultado del servicio de OData llamado.
- El modelo responde con una respuesta confiable para la instrucción final enriquecida con el resultado del servicio de OData llamado.
- 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.
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
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.
- Establece un nombre adecuado para el elemento nuevo.
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
Sí 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.
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
Sí Edm.String
PARAMETER_NAME ParameterValue
Sí Edm.String
PARAMETER_VALUE Crea conjuntos de entidades para todas las entidades que creaste como parte de los pasos anteriores.
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:- Establece un nombre para la asociación.
- En el campo Entidad principal, establece el nombre de la entidad que creaste en el paso 1.
- En el campo Cardinalidad de la entidad principal, establece
M
. - En el campo Entidad dependiente, establece
ContextParameters
. - En el campo Cardinalidad de entidad dependiente, establece
M
. - Guarda y genera los artefactos del entorno de ejecución de OData.
Agrega el servicio de OData creado en SAP Gateway y activa el nodo ICF.
Genera el archivo EDMX para los metadatos de OData de la siguiente manera:
- Ve a TCode /iwfnd/maint_services y obtén los metadatos del servicio de OData.
- Dale formato al archivo XML generado y guárdalo con la extensión
.edmx
.
Escribe la lógica de la función de OData
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.
Para redefinir el método
CREATE_DEEP_ENTITY
de la claseDPC_EXT
generada, completa los siguientes pasos:- 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. - Escribe la lógica de ABAP para
get
oprepare
la respuesta para aumentar el contexto de Gemini en la aplicación de BTP. - En el campo FUNCTION_RESPONSE, establece la respuesta.
- En el campo MODIFIED_USER_REQUEST, establece la instrucción modificada.
- 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. ```
- Si creaste más de una entidad de OData en la sección Crea las entidades de servicio de OData, agrega una sentencia
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 ODataMODIFIED_GEMINI_PROMPT
: La instrucción modificada que proporciona GeminiODATA_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
- 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.
- En la ventana New Service Consumption Model, completa los siguientes pasos:
- En el campo Paquete, selecciona y sube el archivo EDMX que generaste antes en una sección anterior.
- Ingresa un nombre y una descripción.
- En el campo Modo de consumo remoto, selecciona OData.
- Haz clic en Finish (Finalizar).
Crea un servicio de salida HTTP
- En tu proyecto ABAP, abre el menú contextual.
- Selecciona tu paquete y haz clic en Nuevo > Otro objeto de repositorio de ABAP.
- En el campo Tipo de servicio, selecciona Servicio HTTP.
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.
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:
- En tu proyecto ABAP, selecciona Communication Scenario y, luego, haz clic en Next.
- En la ventana New Communication Scenario, completa los siguientes pasos:
- Ingresa un nombre y una descripción.
- Haz clic en Siguiente.
- En el campo Communication Scenario Type, selecciona Customer Managed.
- Ve a la pestaña Salidas.
- En el campo Instancias permitidas, selecciona Una instancia por situación y sistema de comunicación.
- En el campo Métodos de autenticación compatibles, selecciona las siguientes casillas de verificación: Básica, X.509 y OAuth 2.0.
- En el campo OAuth 2.0 Grant Type, selecciona SAML 2.0 Bearer Assertion.
- En la sección Servicios salientes, haz clic en Agregar y, luego, selecciona el servicio saliente que creaste en la sección anterior.
- 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.
- Guarda la situación de comunicación.
Crea un acuerdo de comunicación
- Accede al SAP Fiori launchpad del sistema BTP ABAP en el que está instalado el SDK de ABAP para Google Cloud.
Abre la app Communication Arrangement.
- Haz clic en Nuevo.
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.
Haz clic en Crear.
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.
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, comostring
,integer
oboolean
.PARAMETER_DESCRIPTION
: Una explicación clara del propósito del parámetro y el formato esperadoPARAMETER_IS_REQUIRED
: Establece el valor enABAP_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 ODataODATA_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?
- Obtén información sobre el desarrollo de aplicaciones con la edición SAP BTP del SDK de ABAP para Google Cloud.
- Haz tus preguntas y analiza el SDK de Vertex AI para ABAP con la comunidad en Cloud Forums.