搭配使用 Gemini 和 SAP 函式呼叫

本文概略說明如何在 SAP BTP、ABAP 環境中使用 Vertex AI SDK for ABAP,藉此搭配使用 SAP 函式呼叫與 Gemini。

您可以使用函式呼叫功能定義自訂函式,並將這些函式提供給 Gemini 模型。模型不會直接叫用自訂函式,而是產生結構化資料輸出內容,指定函式名稱和建議的引數。您可以使用這項輸出內容編寫應用程式,以便取用結構化輸出內容並呼叫外部 API。接著,您可以將產生的 API 輸出內容納入進一步的模型提示,以便提供更完整的查詢回應。

ABAP 專用的 Vertex AI SDK 可讓 ABAP 開發人員透過下列方式,在 SAP 函式模組中叫用自訂邏輯,簡化函式呼叫程序:

  • SAP 函式模組名稱或 OData (開放資料通訊協定) 服務名稱,以函式宣告的形式傳遞至模型,說明函式或服務的名稱、用途和相關參數。
  • 在叫用模型時,隱含設定 SAP 函式模組或 OData 服務的自動叫用功能。

事前準備

使用 Gemini 搭配 ABAP 適用的 Vertex AI SDK 進行 SAP 函式呼叫前,請確認您或管理員已完成下列先決條件:

透過叫用 SAP 函式模組,使用 SAP 資料豐富 Gemini AI 模型內容

本節說明如何叫用 SAP 函式模組,藉此使用 SAP 資料豐富 Gemini AI 模型的背景資訊。

以下是 ABAP 開發人員呼叫 SAP 函式模組的典型流程:

  1. 使用者提供輸入提示。
  2. SDK 會將輸入提示和函式宣告傳遞至模型。
  3. 模型會查看提示和宣告的函式,找出要呼叫的函式,並建議呼叫函式的參數值。
  4. 如果設定自動叫用,SDK 就會呼叫 SAP 函式模組。
  5. 接著,SDK 會使用呼叫函式的輸出內容叫用模型。
  6. 模型會針對最終提示回覆可靠的答案,並加入呼叫函式的輸出內容。
  7. SDK 會將回應傳回給使用者。

如果您選擇不自動叫用 SAP 函式模組,SDK 就會讓您使用函式呼叫功能,而無需任何 SAP 函式模組叫用。在這種情況下,您可以按照一般函式呼叫工作流程使用外部工具,例如 API 和函式。

在 SAP BTP ABAP 環境中,使用 Gemini 呼叫 SAP 函式

將 Gemini 多模態叫用者類別例項化

如要在 SAP 中叫用函式,請使用 /GOOG/CL_GENERATIVE_MODEL 類別。您可以傳遞在模型產生參數中設定的模型鍵,藉此將類別例項化。

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

MODEL_KEY 替換為模型鍵名稱,該名稱會在模型產生參數中設定。

建立 SAP 函式模組

如要建立 SAP 函式模組,以便由 SDK 自動叫用,請按照提供的結構定義操作:

類別 參數名稱 關聯類型
匯入中 IT_FUNCTION_PARAMETERS /GOOG/T_FUNCTION_PARAMETERS
匯出中 EV_FUNCTION_RESPONSE STRING
正在進行變更 CV_PROMPT STRING
例外狀況 /GOOG/CX_SDK Exception Class

根據匯入參數,在函式模組中編寫自訂邏輯,可透過 SELECT 查詢擷取 SAP 資料,或呼叫外部 API 或模組來取得遺漏的資訊。

設定匯出參數 EV_FUNCTION_RESPONSE,並將資訊回饋至 LLM 情境。您也可以根據自訂邏輯和業務需求,變更或修改 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 函式模組的說明。

您也可以宣告不含參數的函式,做為備用或備援函式。如果使用者提示未提供足夠資訊來呼叫特定函式,您可以指示 Gemini 選取這個備用函式。

設定自動叫用 SAP 函式模組

如要設定模型所選 SAP 函式的自動叫用,您可以使用 SET_AUTO_INVOKE_SAP_FUNCTION 方法。如果 ABAP_TRUE 是在匯入參數 IV_AUTO_INVOKE 中傳遞,則 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 替換為您的文字「提示」

取得所選函式名稱和參數值

如要取得 Gemini 所選函式 (從已宣告的函式中選取) 及其建議參數,請使用 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) ).

PROMPT 替換為您的文字「提示」

您可以從 LV_FUNCTION_NAME 取得 Gemini 所選函式的名稱,以及 LT_FUNCTION_PARAMETERS 的建議參數。您可以根據企業的安全性資訊和事件管理指南,使用這項資訊驗證、追蹤及記錄 Gemini 動作。

程式碼範例

以下程式碼範例說明如何使用 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:您的文字提示

透過叫用 OData 服務,使用 SAP 資料豐富 Gemini AI 模型內容

本節說明如何透過叫用 OData 服務,為 Gemini AI 模型內容增添 SAP 資料。

以下是 ABAP 開發人員呼叫 OData 服務的典型流程:

  1. 使用者提供輸入提示。
  2. SDK 會將輸入提示和函式宣告傳遞至模型。
  3. 模型會查看提示和宣告的函式,找出要呼叫的函式,並建議呼叫函式的參數值。
  4. 如果設定自動叫用功能,SDK 就會呼叫 OData 服務。
  5. 接著,SDK 會使用所呼叫 OData 服務的輸出內容叫用模型。
  6. 模型會回覆可靠的答案,針對最終提示提供經過強化的輸出內容,也就是已呼叫的 OData 服務輸出內容。
  7. SDK 會將回應傳回給使用者。

如果您選擇不自動叫用 OData 服務,SDK 就會讓您使用函式呼叫功能,而無需任何 OData 服務叫用。在這種情況下,您可以按照一般函式呼叫工作流程使用外部工具,例如 API 和函式。

在 SAP BTP ABAP 環境中,使用 Gemini 呼叫 SAP 函式

建立 OData 服務

如要建立 OData 服務,讓 SDK 以函式自動叫用,請使用下列結構定義:

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

下表提供這個結構定義中使用的欄位資訊:

結構定義欄位 欄位類型 輸入/輸出模式 說明
UserRequest String 僅限輸入 使用者輸入的輸入提示。
FunctionResponse String 僅供輸出 OData 服務的輸出內容。可以是單一值或序列化的 JSON 字串。
ModifiedUserRequest String 僅供輸出 經過修改的 UserRequest,會以提示的形式提供給 Gemini。
ContextParameters Table of parameters 僅限輸入 參數表格,包含參數名稱和值。
ParameterName String 僅限輸入 函式參數的名稱。
ParameterValue String 僅限輸入 Gemini 建議的函式參數值。

建立 OData 服務實體

  1. 使用上述結構定義建立實體。

    這個實體會將使用者要求視為提示,並將其轉送至 Gemini,並使用 ABAP 專用的 Vertex AI SDK 宣告為函式。這個實體也會將 OData 函式回應從後端 SAP 系統傳回至 BTP,然後將其擴充至 Gemini AI 模型脈絡。

    1. 為新項目設定適當的名稱。
    2. 設定下列屬性的值。保留所有其他屬性的預設值。

      名稱 是否為關鍵? EDM 核心類型 ABAP 欄位名稱
      UserRequest Edm.String USER_REQUEST
      FunctionResponse Edm.String FUNCTION_RESPONSE
      ModifiedUserRequest Edm.String MODIFIED_USER_REQUEST

    如果您想在同一個 OData 服務中放置更多實體,請使用相同的結構定義建立實體。

  2. 建立另一個名為 ContextParameters 的實體,並加入下列屬性。保留所有其他屬性的預設值。

    這個實體包含 Gemini 模型提供的函式參數及其值。

    名稱 是否為關鍵? EDM 核心類型 ABAP 欄位名稱
    ParameterName Edm.String PARAMETER_NAME
    ParameterValue Edm.String PARAMETER_VALUE
  3. 為先前步驟中建立的所有實體建立實體組合。

  4. 請在步驟 1 中建立的每個實體與步驟 2 中建立的 ContextParameters 實體之間建立關聯,如下所示:

    1. 設定關聯名稱。
    2. 在「Principal Entity」欄位中,設定您在步驟 1 建立實體的名稱。
    3. 在「Principal Entity Cardinality」欄位中設定 M
    4. 在「Dependent Entity」欄位中,設定 ContextParameters
    5. 在「Dependent Entity Cardinality」欄位中,設定 M
    6. 儲存並產生 OData 執行階段構件。
  5. 在 SAP Gateway 中新增已建立的 OData 服務,並啟用 ICF 節點。

  6. 如以下所示,為 OData 中繼資料產生 EDMX 檔案:

    1. 前往 TCode /iwfnd/maint_services,取得 OData 服務的中繼資料。
    2. 將產生的 XML 格式化並儲存,並使用 .edmx 副檔名儲存。

編寫 OData 函式邏輯

  1. 在產生的 MPC_EXT 類別中,新增及啟用深層實體類型:

    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. 請完成下列步驟,重新定義產生的 DPC_EXT 類別的 CREATE_DEEP_ENTITY 方法:

    1. 如果您在「建立 OData 服務實體」一節中建立了多個 OData 實體,請為每個 OData 實體新增 CASE 陳述式。
    2. 編寫 ABAP 邏輯,以 getprepare 回應,藉此在 BTP 應用程式中增強 Gemini 的內容。
    3. FUNCTION_RESPONSE 欄位中設定回應。
    4. MODIFIED_USER_REQUEST 欄位中,設定經修改的提示。
    5. 使用 COPY_DATA_TO_REF OData 方法,在訊息中繫結整體回應。

    以下程式碼片段為 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.
     ```
    

更改下列內容:

  • ENTITY_TYPE:您在「建立 OData 服務實體」一節的步驟 1 中建立的 OData 實體名稱
  • MODIFIED_GEMINI_PROMPT:Gemini 提供的修改過的提示
  • ODATA_FUNCTION_RESPONSE:OData 服務提供的回應

如果您有一個以上的欄位,或要傳遞做為函式回應的巢狀結構或資料表,則可以使用 SDK /GOOG/CL_JSON_UTIL 類別的 SERIALIZE_JSON 方法,將 ABAP 類型序列化為字串。

將 OData 服務定義為 SAP BTP 上的服務消費模式

建立 OData 服務後,您需要在 SAP BTP 環境中將其定義為服務用量模型。方法是建立服務使用模型、HTTP 外寄服務、通訊情境和通訊安排。

建立服務消費模式

  1. 在 ABAP 專案中,開啟內容選單,然後依序選取「New」>「Other ABAP Repository Object」>「Business Services」>「Service Consumption Model」
  2. 在「New Service Consumption Model」視窗中完成下列步驟:
    1. 在「Package」欄位中,選取並上傳先前在前一個部分產生的 EDMX 檔案。
    2. 輸入名稱和說明。
    3. 在「Remote Consumption Mode」(遠端消費模式) 欄位中,選取「OData」
    4. 按一下「完成」

建立 HTTP 傳出服務

  1. 在 ABAP 專案中開啟內容選單。
  2. 選取套件,然後依序點選「New」>「Other ABAP Repository Object」
  3. 在「Service Type」(服務類型)欄位中,選取「HTTP Service」(HTTP 服務)
  4. 在「Default Path Prefix」欄位中,輸入後端 SAP 系統中 OData 服務的路徑前置字串。

    您可以存取 SAP Gateway Client,找出 OData 路徑前置字串。您在「Request URI」欄位中看到的值,是 OData 服務的路徑前置字串。

  5. 點按「Next」

建立通訊情境

建立 HTTP 外寄服務後,您必須建立通訊情境,並將外寄服務指派給該情境。如要這樣做,請完成下列步驟:

  1. 在 ABAP 專案中,選取「Communication Scenario」,然後按一下「Next」
  2. 在「New Communication Scenario」視窗中,完成下列步驟:
    1. 輸入名稱和說明。
    2. 點按「Next」
    3. 在「Communication Scenario Type」欄位中,選取「Customer Managed」
    4. 前往「Outbound」分頁。
    5. 在「Allowed Instances」欄位中,選取「One instance per scenario & communication system」
    6. 在「Supported Authentication methods」欄位中,選取下列核取方塊:BasicX.509OAuth 2.0
    7. 在「OAuth 2.0 授權類型」欄位中,選取「SAML 2.0 憑證斷言」
    8. 在「Outbound Services」(傳出服務) 專區下方,按一下「Add」(新增),然後選取您在前一個部分建立的傳出服務。
    9. 在「Outbound Service」部分,確認「Default Path Prefix」是否正確。如果沒有,請按一下「同步處理」
    10. 儲存通訊情境。

建立通訊安排

  1. 存取已安裝 ABAP 適用於 Google Cloud 的 SDK 的 BTP ABAP 系統 SAP Fiori 啟動工具。
  2. 開啟「通訊安排」應用程式。

    1. 按一下 [New]
    2. 在隨即顯示的「New Communication Arrangement」對話方塊中,輸入下列欄位的值:

      • 情境:選取您在「建立通訊情境」一節中建立的通訊情境。
      • 安排名稱:輸入通訊安排的名稱。
    3. 按一下 [建立]。

    4. 針對顯示的通訊安排,在「Communication System」欄位中,選取您在先前步驟中建立的通訊系統。

    5. 按一下 [儲存]

將 Gemini 多模態叫用者類別例項化

如要在 SAP 中叫用函式,請使用 /GOOG/CL_GENERATIVE_MODEL 類別。您可以傳遞在模型產生參數中設定的模型鍵,藉此將類別例項化。

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

MODEL_KEY 替換為模型鍵名稱,該名稱會在模型產生參數中設定。

新增函式宣告

如要將 OData 服務新增為 LLM 背景資訊的函式宣告,您可以使用 ADD_FUNCTION_DECLARATION 方法。每次需要將 OData 服務做為函式新增至結構定義時,請呼叫 ADD_FUNCTION_DECLARATION 方法。

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

更改下列內容:

  • PARAMETER_NAME:參數名稱
  • PARAMETER_TYPE:參數的資料類型,例如 stringintegerboolean
  • PARAMETER_DESCRIPTION:清楚說明參數的用途和預期格式
  • PARAMETER_IS_REQUIRED:如果函式必須使用這個參數,請將值設為 ABAP_TRUE
  • COMMUNICATION_SCENARIO:您建立的通訊情境 ID
  • ODATA_SERVICE_ID:您為 OData 服務建立的傳出服務 ID
  • ODATA_SERVICE_CONSUMPTION_MODEL_ID:您為 OData 服務建立的服務使用率模型 ID
  • ODATA_ROOT_URI:後端 SAP 系統中 OData 服務的根 URI
  • ODATA_ENTITY_SET_NAME:要宣告為函式的 OData 服務實體集名稱
  • FUNCTION_NAME:您為要使用的 OData 服務宣告的函式名稱
  • FUNCTION_DESCRIPTION:您為要使用的 OData 服務宣告的函式說明

設定 OData 服務的自動叫用

如要設定 Gemini 模型所選 SAP 函式 OData 服務的自動叫用,您可以使用 SET_AUTO_INVOKE_SAP_FUNCTION 方法。如果 ABAP_TRUE 是在匯入參數 IV_AUTO_INVOKE 中傳遞,則 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 替換為您的文字「提示」

取得所選函式名稱和參數值

如要取得 Gemini 所選函式 (從已宣告的函式中選取) 及其建議參數,請使用 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) ).

程式碼範例

以下程式碼範例說明如何使用 SAP 函式呼叫 Odata 服務,以便接收模型的最終回應:

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.

後續步驟