使用 Gemini 进行 SAP 函数调用

本文档介绍了如何通过 Vertex AI SDK for ABAP 使用 Gemini 进行 SAP 函数调用。

您可以定义自定义函数,并使用函数调用功能将其提供给 Gemini 模型。模型不会直接调用自定义函数,而是生成指定函数名称和建议参数的结构化数据输出。借助此输出,您可以编写采用结构化输出并调用外部 API 的应用。然后,可以将生成的 API 输出并入进一步的模型提示中,以便获得更全面的查询回答。

Vertex AI SDK for ABAP 通过以下方式让 ABAP 开发者有机会调用在 SAP 函数模块中编写的自定义逻辑,从而简化他们的函数调用操作:

  • SAP 函数模块名称作为函数声明传递给模型,描述函数的名称、用途和相关参数。
  • 在调用模型时,隐式设置 SAP 函数模块的自动调用。

以下是 ABAP 开发者调用 SAP 函数调用的典型流程:

  1. 用户提供输入提示。
  2. SDK 将输入提示和函数声明传递给模型。
  3. 该模型会检查提示和声明的函数,以推导要调用的函数,并建议用于调用该函数的参数值。
  4. 如果设置了自动调用,SDK 会调用 SAP 函数模块。
  5. 然后,SDK 会使用所调用函数的输出调用模型。
  6. 模型会以可靠的答案回答使用所调用函数的输出丰富的最终提示
  7. SDK 会将回答返回给用户。

使用 Gemini 进行 SAP 函数调用

如果您选择不自动调用 SAP 函数模块,则 SDK 可让您在不调用任何 SAP 函数模块的情况下使用函数调用功能。在这种情况下,您可以遵循典型的函数调用工作流程来使用外部工具,例如 API 和函数。

准备工作

在通过 Vertex AI SDK for ABAP 使用 Gemini 进行 SAP 函数调用之前,请确保您或您的管理员已满足以下前提条件:

使用 SAP 数据丰富 Gemini AI 模型上下文

本部分介绍了如何通过 Vertex AI SDK for ABAP 使用 SAP 数据来丰富 Gemini AI 模型上下文。

实例化多模态 Gemini 调用程序类

如需在 SAP 中调用函数调用,请使用 /GOOG/CL_GENERATIVE_MODEL 类。您可以通过传递在模型生成参数中配置的模型键来实例化该类。

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

MODEL_KEY 替换为模型键名,该名称在模型生成参数中进行配置。

创建 SAP 函数模块

如需创建可由 SDK 自动调用的 SAP 函数模块,请遵循提供的架构:

类别 参数名称 关联类型
导入 IT_FUNCTION_PARAMETERS /GOOG/T_FUNCTION_PARAMETERS
导出 EV_FUNCTION_RESPONSE STRING
更改 CV_PROMPT STRING
异常 /GOOG/CX_SDK Exception Class

根据导入参数,在函数模块中编写您的自定义逻辑,该逻辑可以是通过 SELECT 查询提取 SAP 数据,也可以是调用外部 API 或模块以获取缺失的信息。

使用要反馈给 LLM 上下文的信息设置导出参数 EV_FUNCTION_RESPONSE。您还可以根据自定义逻辑和业务要求更改或修改 CV_PROMPT 中的提示文本,以便根据不同的业务场景进一步指示 LLM。

添加函数声明

如需向 LLM 上下文添加函数声明,您可以使用 ADD_FUNCTION_DECLARATION 方法。每当您需要向上下文添加函数时,都应调用 ADD_FUNCTION_DECLARATION 方法。

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

替换以下内容:

  • PARAMETER_NAME:参数的名称。
  • PARAMETER_TYPE:参数的数据类型,例如 stringintegerboolean
  • PARAMETER_DESCRIPTION:清楚地说明参数的用途和预期格式。
  • PARAMETER_IS_REQUIRED:如果此参数是函数运行所必需的,请将其值设置为 ABAP_TRUE
  • FUNCTION_MODULE_NAME:SAP 函数模块的名称。
  • FUNCTION_MODULE_DESCRIPTION:SAP 函数模块的说明。

设置 SAP 函数模块的自动调用

如需设置模型选择的所选 SAP 函数的自动调用,您可以使用 SET_AUTO_INVOKE_SAP_FUNCTION 方法。如果在导入参数 IV_AUTO_INVOKE 中传递 ABAP_TRUE,则 SDK 会调用函数模块,并且其回答会包含在 LLM 上下文中,以生成最终回答。

您必须按照创建 SAP 函数模块部分中所述的架构定义函数模块。

lo_model->set_auto_invoke_sap_function( abap_true ).

使用函数调用生成内容

如需将提示文本传递给 Gemini 模型,您可以使用 GENERATE_CONTENT 方法。如需获取 Gemini 生成的回答以及通过函数调用从 SAP 函数模块添加的额外上下文,请使用 GET_TEXT 方法。

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

PROMPT 替换为您的文本提示

代码示例

以下代码示例展示了如何使用 SAP 函数调用来接收模型的最终回答。

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.

替换以下内容:

  • MODEL_KEY:模型键名,可在模型生成参数中配置。
  • PARAMETER_NAME:参数的名称。
  • PARAMETER_TYPE:参数的数据类型,例如 stringintegerboolean
  • PARAMETER_DESCRIPTION:清楚地说明参数的用途和预期格式。
  • PARAMETER_IS_REQUIRED:如果此参数是函数运行所必需的,请将其值设置为 ABAP_TRUE
  • FUNCTION_MODULE_NAME:SAP 函数模块的名称。
  • FUNCTION_MODULE_DESCRIPTION:SAP 函数模块的说明。
  • PROMPT:您的文本提示

后续步骤