Gemini で SAP 関数呼び出しを使用する

このドキュメントでは、SAP BTP、ABAP 環境で Vertex AI SDK for ABAP を使用して、Gemini で SAP 関数呼び出しを使用する方法の概要について説明します。

カスタム関数を定義して、関数呼び出し機能を使用して Gemini モデルに提供できます。モデルはカスタム関数を直接呼び出すのではなく、関数名と推奨される引数を指定する構造化データ出力を生成します。この出力を使用すると、構造化出力を受け取って外部 API を呼び出すアプリケーションを作成できます。生成された API 出力を別のモデル プロンプトに組み込むことで、より包括的なクエリ レスポンスを実現できます。

Vertex AI SDK for ABAP は、次のように SAP 関数モジュールに記述されたカスタム ロジックを呼び出す機会を提供することで、ABAP の関数呼び出しの開発を簡素化します。

  • 関数宣言として SAP 関数モジュール名または OData(Open Data Protocol)サービス名をモデルに渡し、関数またはサービスの名前、その目的、関連するパラメータを記述します。
  • モデルを呼び出すときに、SAP 関数モジュールまたは OData サービスの自動呼び出しを暗黙的に設定します。

始める前に

Gemini で SAP 関数呼び出しを行う Vertex AI SDK for ABAP を使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。

SAP 関数モジュールを呼び出して、Gemini AI モデルのコンテキストを SAP データで拡充する

このセクションでは、SAP 関数モジュールを呼び出して、Gemini AI モデルのコンテキストを SAP データで拡充する方法について説明します。

以下は、ABAP 開発者が SAP 関数モジュールを呼び出す一般的な手順です。

  1. ユーザーが入力プロンプトを入力します。
  2. SDK が入力プロンプトと関数宣言をモデルに渡します。
  3. モデルは、プロンプトと宣言された関数を確認して、呼び出す関数を導出し、関数を呼び出すパラメータ値を提案します。
  4. 自動呼び出しが設定されている場合、SDK は SAP 関数モジュールを呼び出します。
  5. SDK は、呼び出された関数の出力を使用してモデルを呼び出します。
  6. モデルは、呼び出された関数の出力で拡充された最終プロンプトに対して信頼できる回答を返します。
  7. SDK がユーザーに回答を返します。

SAP 関数モジュールを自動的に呼び出さない場合、SDK では SAP 関数モジュールを呼び出すことなく、関数呼び出し機能を使用できます。この場合、一般的な関数呼び出しワークフローに従って API や関数などの外部ツールを使用できます。

SAP BTP、ABAP 環境での Gemini を使用した SAP 関数呼び出し

Gemini マルチモーダル Invoker クラスをインスタンス化する

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 またはモジュールを呼び出して不足している情報を取得します。

エクスポート パラメータ 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 メソッドを使用します。インポート パラメータ IV_AUTO_INVOKEABAP_TRUE が渡されると、SDK によって関数モジュールが呼び出され、そのレスポンスが LLM コンテキストに含まれ、最終的なレスポンスが生成されます。

関数モジュールは、SAP 関数モジュールを作成するで説明されているスキーマに従って定義する必要があります。

lo_model->set_auto_invoke_sap_function( abap_true ).

関数呼び出しでコンテンツを生成する

プロンプト テキストを Gemini モデルに渡すには、GENERATE_CONTENT メソッドを使用します。関数呼び出しを介して SAP 関数モジュールからのコンテキストが追加され、Gemini によって生成されたレスポンスを取得するには、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 は、テキスト プロンプトに置き換えます。

Gemini が選択した関数の名前は LV_FUNCTION_NAME から、推奨されるパラメータは 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 サービスを呼び出して、Gemini AI モデルのコンテキストを SAP データで拡充する

このセクションでは、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 サービスを作成する

SDK によって関数として自動呼び出しされる OData サービスを作成するには、次のスキーマを使用します。

{
    "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 に転送します。また、Vertex AI SDK for ABAP を使用して関数として宣言されます。このエンティティは、バックエンドの SAP システムから BTP に OData 関数レスポンスを返します。このレスポンスは、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. 作成した OData サービスを SAP Gateway に追加し、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. レスポンスの get または prepare に ABAP ロジックを記述して、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 型を文字列にシリアル化できます。

SAP BTP でサービス使用モデルとして OData サービスを定義する

OData サービスを作成したら、SAP BTP 環境でサービス使用モデルとして定義する必要があります。これを行うには、サービス使用モデル、HTTP アウトバウンド サービス、通信シナリオ、通信構成を作成します。

サービス使用モデルを作成する

  1. ABAP プロジェクトでコンテキスト メニューを開き、[新規] > [その他の ABAP リポジトリ オブジェクト] > [ビジネス サービス] > [サービス使用モデル] を選択します。
  2. [New Service Consumption Model] ウィンドウで、次の手順を完了します。
    1. [Package] フィールドで、前のセクションで生成した EDMX ファイルを選択してアップロードします。
    2. 名前と説明を入力します。
    3. [リモート使用モード] フィールドで、[OData] を選択します。
    4. [完了] をクリックします。

HTTP アウトバウンド サービスを作成する

  1. ABAP プロジェクトでコンテキスト メニューを開きます。
  2. パッケージを選択し、[新規] > [その他の ABAP リポジトリ オブジェクト] をクリックします。
  3. [Service Type] フィールドで、[HTTP Service] を選択します。
  4. [Default Path Prefix] フィールドに、バックエンド SAP システムの OData サービスのパス接頭辞を入力します。

    OData パス接頭辞は、SAP Gateway クライアントにアクセスして確認できます。[リクエスト URI] フィールドに表示される値は、OData サービスのパスの接頭辞です。

  5. [次へ] をクリックします。

コミュニケーション シナリオを作成する

HTTP アウトバウンド サービスを作成したら、通信シナリオを作成し、アウトバウンド サービスを割り当てる必要があります。手順は次のとおりです。

  1. ABAP プロジェクトで [通信シナリオ] を選択し、[次へ] をクリックします。
  2. [New Communication Scenario] ウィンドウで、次の手順を行います。
    1. 名前と説明を入力します。
    2. [次へ] をクリックします。
    3. [Communication Scenario Type] フィールドで、[Customer Managed] を選択します。
    4. [送信] タブに移動します。
    5. [Allowed Instances] フィールドで、[One instance per scenario & communication system] を選択します。
    6. [Supported Authentication methods] フィールドで、[Basic]、[X.509]、[OAuth 2.0] のチェックボックスをオンにします。
    7. [OAuth 2.0 Grant Type] 欄で [SAML 2.0 Bearer Assertion] を選択します。
    8. [アウトバウンド サービス] セクションで [追加] をクリックし、前のセクションで作成したアウトバウンド サービスを選択します。
    9. [Outbound Service] セクションで、[Default Path Prefix] が正しいことを確認します。同期されていない場合は、[同期] をクリックします。
    10. 通信シナリオを保存します。

通信設定を作成する

  1. ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
  2. Communication Arrangement アプリを開きます。

    1. [New] をクリックします。
    2. 表示された [New Communication Arrangement] ダイアログで、次のフィールドに値を入力します。

      • シナリオ: [通信シナリオを作成する] セクションで作成した通信シナリオを選択します。
      • Arrangement name: 通信設定の名前を入力します。
    3. [Create] をクリックします。

    4. 表示された通信設定の [Communication System] フィールドで、前の手順で作成した通信システムを選択します。

    5. [保存] をクリックします。

Gemini マルチモーダル Invoker クラスをインスタンス化する

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 メソッドを使用します。インポート パラメータ IV_AUTO_INVOKEABAP_TRUE が渡されると、SDK によって関数モジュールが呼び出され、そのレスポンスが LLM コンテキストに含まれ、最終的なレスポンスが生成されます。

関数モジュールは、SAP 関数モジュールを作成するで説明されているスキーマに従って定義する必要があります。

lo_model->set_auto_invoke_sap_function( abap_true ).

関数呼び出しでコンテンツを生成する

プロンプト テキストを Gemini モデルに渡すには、GENERATE_CONTENT メソッドを使用します。関数呼び出しを介して SAP 関数モジュールからのコンテキストが追加され、Gemini によって生成されたレスポンスを取得するには、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) ).

コードサンプル

次のコードサンプルは、Odata サービスで SAP 関数呼び出しを使用してモデルから最終レスポンスを受信する方法を示しています。

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.

次のステップ