本文档介绍了如何通过 Vertex AI SDK for ABAP 使用 Gemini 进行 SAP 函数调用。
您可以定义自定义函数,并使用函数调用功能将其提供给 Gemini 模型。模型不会直接调用自定义函数,而是生成指定函数名称和建议参数的结构化数据输出。借助此输出,您可以编写采用结构化输出并调用外部 API 的应用。然后,可以将生成的 API 输出并入进一步的模型提示中,以便获得更全面的查询回答。
Vertex AI SDK for ABAP 通过以下方式让 ABAP 开发者有机会调用在 SAP 函数模块中编写的自定义逻辑,从而简化他们的函数调用操作:
- 将 SAP 函数模块名称作为函数声明传递给模型,描述函数的名称、用途和相关参数。
- 在调用模型时,隐式设置 SAP 函数模块的自动调用。
以下是 ABAP 开发者调用 SAP 函数调用的典型流程:
- 用户提供输入提示。
- SDK 将输入提示和函数声明传递给模型。
- 该模型会检查提示和声明的函数,以推导要调用的函数,并建议用于调用该函数的参数值。
- 如果设置了自动调用,SDK 会调用 SAP 函数模块。
- 然后,SDK 会使用所调用函数的输出调用模型。
- 模型会以可靠的答案回答使用所调用函数的输出丰富的最终提示。
- SDK 会将回答返回给用户。
如果您选择不自动调用 SAP 函数模块,则 SDK 可让您在不调用任何 SAP 函数模块的情况下使用函数调用功能。在这种情况下,您可以遵循典型的函数调用工作流程来使用外部工具,例如 API 和函数。
准备工作
在通过 Vertex AI SDK for ABAP 使用 Gemini 进行 SAP 函数调用之前,请确保您或您的管理员已满足以下前提条件:
- 在 Google Cloud 项目中启用了 Vertex AI API。
- 在 SAP 环境中安装了 Vertex AI SDK for ABAP。
- 设置身份验证以访问 Vertex AI API。
- 配置了模型生成参数。
使用 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
:参数的数据类型,例如string
、integer
或boolean
。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
:参数的数据类型,例如string
、integer
或boolean
。PARAMETER_DESCRIPTION
:清楚地说明参数的用途和预期格式。PARAMETER_IS_REQUIRED
:如果此参数是函数运行所必需的,请将其值设置为ABAP_TRUE
。FUNCTION_MODULE_NAME
:SAP 函数模块的名称。FUNCTION_MODULE_DESCRIPTION
:SAP 函数模块的说明。PROMPT
:您的文本提示。
后续步骤
在 Cloud 论坛上提出问题并与社区讨论 Vertex AI SDK for ABAP。