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

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

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

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

  • 関数宣言として SAP 関数モジュール名をモデルに渡し、関数名、その目的、関連するパラメータを記述します。
  • モデルを呼び出すときに、SAP 関数モジュールの自動呼び出しを暗黙的に設定します。

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

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

Gemini を使用した SAP 関数呼び出し

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

始める前に

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

SAP データを使用して Gemini AI モデルのコンテキストを拡充する

このセクションでは、Vertex AI SDK for ABAP を使用して、Gemini AI モデルのコンテキストを 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 関数モジュールの説明。

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 は、テキスト プロンプトに置き換えます。

コードサンプル

次のコードサンプルは、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: テキスト プロンプト

次のステップ