Gemini による迅速なプロトタイピング

Google の Generative Language API を使用すると、Gemini モデルを使用してシームレスなプロトタイピングを行うことができます。複雑なインフラストラクチャの設定や、モデルのデプロイの管理をしなくても、Gemini モデルの機能をテストして利用できます。Google のブラウザベースのプロトタイピング ツール Google AI Studio は、Generative Language API を使用して、生成モデルによるブラウザベースのプロトタイピングを可能にします。

Vertex AI SDK for ABAP を使用すると、Generative Language API(Gemini API)を使用して、ABAP 環境から直接プロトタイピングを開始できます。Gemini モデルにアクセスするには、Google AI Studio で生成された API キーが必要です。この API キーは 1 回だけ生成する必要があります。

API キーを生成する

Google AI Studio から生成した API キーを使用すると、Gemini API に対する認証を簡単に行えます。

API キーを生成するには、次の操作を行います。

  1. Google AI Studio で [API キー] ページを開きます。

    API キーを取得する

  2. [API キーを作成] をクリックします。

  3. 表示されている場合は、法的通知を読んで同意し、[続行] をクリックします。

  4. 表示されている場合は、安全設定に関する注意事項を読み、確認します。

  5. [API キーを作成] ダイアログで、次のオプションのうち該当する方を選択します。

    • 新しいプロジェクトで API キーを作成する
    • 既存のプロジェクトで API キーを作成する
  6. キー文字列をコピーして安全に保管します。この API キーは、Gemini API への認証を構成するために必要です。

  7. API キーを生成した Google Cloud プロジェクトのプロジェクト番号をコピーします。この値は後の手順で必要になります。

認証を設定する

API キーを使用して Gemini API に対する認証を行うには、次のいずれかの方法を使用します。

SAP SSF に保存されている API キーを使用して認証する

API キーを安全に保つには、生成された API キーを SAP SSF に保存し、SSF 認証クラスを使用してクライアント キーを構成します。このクライアント キーを使用して Gemini API にアクセスできます。 詳しくは以下をご覧ください。

カスタム認証クラスを介して API キーを使用して認証する

または、カスタム認証クラスを作成して API キーを保持し、カスタム認証クラスでクライアント キーを構成することもできます。

オンプレミスまたは任意のクラウド エディション

  1. SAP システムで、ABAP SDK for Google Cloud に付属のインターフェース /GOOG/IF_AUTH を実装して、Z クラスを作成します。

    1. SAP GUI で、トランザクション コード SE24 を実行します。
    2. [Object type] フィールドに名前(Z_TEST_GEMINI_API など)を入力し、[Create] をクリックします。
    3. [Object type] が [Class] であることを確認して、[OK] をクリックします。
    4. [Description] フィールドにクラスの説明(Class for authentication to Google AI Studio など)を指定し、クラスを [Local Object] として保存するか、[Transport Request] に保存します。
    5. [Interfaces] タブを開き、インターフェース /GOOG/IF_AUTH を追加して Enter キーを押します。
    6. [Methods] タブを開きます。インターフェース /GOOG/IF_AUTH のメソッドが Z クラスに自動的に実装されます。
    7. メソッド /GOOG/IF_AUTH~GET_ACCESS_TOKEN をダブルクリックします。
    8. メソッド /GOOG/IF_AUTH~GET_ACCESS_TOKEN に、次のコードを追加します。

      ev_auth_type = /goog/if_auth=>c_auth_type_apik_ssf.
      cv_token = 'API_KEY'.
      GET TIME STAMP FIELD ev_logtime.
      

      API_KEY は、Google AI Studio で生成した API キーに置き換えます。

    9. Z クラスを有効にします。

  2. SAP システムで、クライアント キー構成を作成します。

    1. SAP GUI で、トランザクション コード /GOOG/SDK_IMG を実行します。

      または、トランザクション コード SPRO を実行して、[SAP Reference IMG] をクリックします。

    2. [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。

    3. [New Entries] をクリックします。

    4. 次のフィールドに値を入力します。

    フィールド 説明
    Google Cloud キー名 クライアント キー構成の名前を指定します(例: TEST_GEMINI_API)。
    Google Cloud サービス アカウント名 このフィールドは空白のままにしておきます。
    Google Cloud のスコープ このフィールドは空白のままにしておきます。
    Google Cloud プロジェクト ID API キーが保存されている Google Cloud プロジェクトのプロジェクト番号を指定します。
    コマンド名 このフィールドは空白のままにしておきます。
    認可クラス 前の手順で作成した Z クラス(Z_TEST_GEMINI_API など)を指定します。
    トークンのキャッシュ保存

    このフィールドは空白のままにしておきます。

    トークンの更新期限(秒) このフィールドは空白のままにしておきます。
    認可パラメータ 1 このフィールドは空白のままにしておきます。
    認可パラメータ 2 このフィールドは空白のままにしておきます。
    1. 新しいエントリを保存します。
  3. クライアント キーをメモしておきます。このクライアント キーは認証に使用します。

SAP BTP エディション

  1. SAP BTP、ABAP 環境で、ABAP SDK for Google Cloud に付属の /GOOG/CL_AUTH_BASE クラスを継承して、新しいクラスを作成します。

    1. Eclipse プラットフォームで、クラスを作成するパッケージを右クリックし、[Create] > [ABAP Class] をクリックします。
    2. [Name] フィールドに「ZCL_TEST_GEMINI_API」と入力します。
    3. [Description] フィールドに「Authentication Class for testing Gemini API」と入力します。
    4. [Superclass] フィールドに「/GOOG/CL_AUTH_BASE」と入力します。
    5. [Next] をクリックします。
    6. トランスポート リクエストを選択するか、新しいリクエストを作成します。
    7. [Finish] をクリックします。
    8. エディタで、既存のコードを次のコードに置き換えます。

      CLASS zcl_test_gemini_api DEFINITION
        PUBLIC
        INHERITING FROM /goog/cl_auth_base FINAL
        CREATE PUBLIC.
        PUBLIC SECTION.
          CONSTANTS: BEGIN OF c_com_scn_sdk,
                       wif     TYPE /goog/comm_scenario VALUE '/GOOG/COM_SDK_WIF',
                       apik_sm TYPE /goog/comm_scenario VALUE '/GOOG/COM_SDK_APIKSM',
                       END OF c_com_scn_sdk.
          METHODS get_access_token REDEFINITION.
       PROTECTED SECTION.
       PRIVATE SECTION.
      ENDCLASS.
      CLASS zcl_test_gemini_api IMPLEMENTATION.
        METHOD get_access_token.
          ev_auth_type = CONV #( apikey_sm ).
          ev_token = API_KEY.
        ENDMETHOD.
      ENDCLASS.
      

      API_KEY は、Google AI Studio で生成した API キーに置き換えます。

    9. Z クラスを有効にします。

    10. このクラスのプロパティに移動し、[API State] タブに移動して、契約状態 C1 で API をリリースします。

      API の状態の詳細については、開発オブジェクトのリリースをご覧ください。

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

  3. Google SDK: Main Configuration アプリにアクセスし、次の操作を行います。

    1. [Create] をクリックします。
    2. [Create new entry] ダイアログで、次のフィールドに値を入力します。

      フィールド 説明
      Google Cloud キー名 クライアント キー構成の名前を指定します(例: GEMINI_QUICK_TEST)。
      Google Cloud サービス アカウント名 このフィールドは空白のままにしておきます。
      Google Cloud のスコープ このフィールドは空白のままにしておきます。
      Google Cloud プロジェクト ID API キーを作成した Google Cloud プロジェクトのプロジェクト ID を指定します。
      Google Cloud プロジェクト番号 API キーを作成した Google Cloud プロジェクトのプロジェクト番号を指定します。
      認証の種類 [Z] を選択します。
      認証クラス 前の手順で作成した ZCL_TEST_GEMINI_API クラスを選択します。
    3. 新しいエントリを保存します。

  4. クライアント キーをメモしておきます。このクライアント キーは認証に使用します。

サンプルコードを実行する

オンプレミスまたは任意のクラウド エディション

Gemini API の機能を確認するには、Vertex AI SDK for ABAP に付属の AI Studio デモを使用します。

AI Studio デモを実行する手順は次のとおりです。

  1. SAP GUI で、トランザクション コード /GOOG/SDK_IMG を実行します。

    または、トランザクション コード SPRO を実行して、[SAP Reference IMG] をクリックします。

  2. [ABAP SDK for Google Cloud] > [Demos] に移動します。

  3. [Vertex AI SDK: Demo: Prototyping with Generative Language API] を開きます。

  4. [Client key] フィールドに、認証を設定するで作成したクライアント キーを入力します。

  5. [Model ID] フィールドに、使用する LLM モデルの ID(gemini-1.5-flash など)を入力します。使用可能なモデルについては、モデル バリエーションをご覧ください。

  6. 必要に応じて、次の生成パラメータを指定します。

    • 最大出力トークン
    • レスポンスの MIME タイプ
    • 温度
    • トップ K
    • トップ P

    これらのモデル生成パラメータの詳細については、パラメータ値を試すをご覧ください。

  7. [Enter system instructions] フィールドにシステム指示を入力します。

  8. [Enter prompt] フィールドに入力プロンプトを入力します。

  9. プログラムを実行します。[Response from LLM] 領域に生成された出力が表示されます。

SAP BTP エディション

次のサンプルコードを実行して、Gemini API の機能を確認できます。

  1. Eclipse プラットフォームで、クラスを作成するパッケージを右クリックし、[Create] > [ABAP Class] をクリックします。

  2. [Name] フィールドに「ZCL_INVOKE_LLM」と入力します。

  3. [Description] フィールドに「Sample class for testing Gemini API」と入力します。

  4. [Next] をクリックします。

  5. トランスポート リクエストを選択するか、新しいリクエストを作成します。

  6. [Finish] をクリックします。

  7. エディタで、既存のコードを次のコードに置き換えます。

    CLASS zcl_invoke_llm DEFINITION
     PUBLIC FINAL
     CREATE PUBLIC.
     PUBLIC SECTION.
       INTERFACES if_oo_adt_classrun.
    ENDCLASS.
    CLASS zcl_invoke_llm IMPLEMENTATION.
     METHOD if_oo_adt_classrun~main.
       DATA lv_sys_instruction TYPE string.
       DATA lv_client_key      TYPE /goog/keyname.
       DATA lv_model_id        TYPE string.
       DATA lv_max_tokens      TYPE int4.
       DATA lv_resp_mime_type  TYPE string.
       DATA lv_prompt          TYPE string.
       DATA lv_temperature     TYPE /goog/num_float.
       DATA lv_top_k           TYPE int4.
       DATA lv_top_p           TYPE /goog/num_float.
       DATA ls_input           TYPE /goog/cl_generativelang_v1beta=>ty_045.
       DATA ls_output          TYPE /goog/cl_generativelang_v1beta=>ty_046.
       DATA ls_part            TYPE /goog/cl_generativelang_v1beta=>ty_068.
       DATA lt_parts           TYPE /goog/cl_generativelang_v1beta=>ty_t_068.
       DATA ls_content         TYPE /goog/cl_generativelang_v1beta=>ty_018.
       DATA lv_msg             TYPE string.
       DATA ls_raw             TYPE string.
       DATA lv_err_msg         TYPE string.
       DATA lo_cx_sdk          TYPE REF TO /goog/cx_sdk.
    
       " TODO Developer: Set values for Mandatory Fields
       lv_model_id = 'gemini-1.5-flash'.  " You can also change the Model ID of your choosing
       lv_client_key = 'GEMINI_QUICK_TEST'.    " Client key configured
    
       " TODO Developer: Set values for Optional Fields, if required
       " lv_temperature =
       " lv_top_k =
       " lv_top_p =
       " lv_max_tokens =
    
       " TODO Developer: (Optional) Set the System Instruction
        lv_sys_instruction  = 'You are an Italian Chef in a 5 Star Restaurant'.
    
       " TODO Developer: (Mandatory) Set the Prompt
        lv_prompt = 'Give me a recipe to make Margarita Pizza'.
       IF lv_temperature IS NOT INITIAL.
         ls_input-generation_config-temperature = lv_temperature.
       ENDIF.
       IF lv_top_k IS NOT INITIAL.
         ls_input-generation_config-top_k = lv_top_k.
       ENDIF.
       IF lv_top_p IS NOT INITIAL.
         ls_input-generation_config-top_p = lv_top_p.
       ENDIF.
       IF lv_max_tokens IS NOT INITIAL.
         ls_input-generation_config-max_output_tokens = lv_max_tokens.
       ENDIF.
       IF lv_sys_instruction IS NOT INITIAL.
         ls_input-system_instruction-role = 'system'.
         ls_part-text = lv_sys_instruction.
         APPEND ls_part TO ls_input-system_instruction-parts.
         CLEAR ls_part.
       ENDIF.
       ls_content-role = 'user'.
       IF lv_prompt IS NOT INITIAL.
         ls_part-text = lv_prompt.
         APPEND ls_part TO ls_content-parts.
         CLEAR ls_part.
       ENDIF.
       APPEND ls_content TO ls_input-contents.
       CLEAR ls_content.
       TRY.
           DATA(lo_llm_invoker) = NEW /goog/cl_generativelang_v1beta( iv_key_name = lv_client_key ).
         CATCH /goog/cx_sdk INTO lo_cx_sdk.
           lv_err_msg = lo_cx_sdk->get_text( ).
    out->write( |Exception occurred, reason: { lv_err_msg }| ).
       ENDTRY.
       TRY.
           lo_llm_invoker->generate_content_models( EXPORTING iv_p_models_id = lv_model_id
                                                              is_input       = ls_input
                                                    IMPORTING es_raw         = ls_raw
                                                              es_output      = ls_output
                                                              ev_ret_code    = DATA(lv_ret_code)
                                                              ev_err_text    = DATA(lv_err_text)
                                                              es_err_resp    = DATA(ls_err_resp) ).
         CATCH /goog/cx_sdk INTO lo_cx_sdk.
           lv_err_msg = lo_cx_sdk->get_text( ).
           out->write( |Exception occurred, reason: { lv_err_msg }| ).
           RETURN.
       ENDTRY.
       IF lo_llm_invoker->is_success( lv_ret_code ) = abap_true.
         ASSIGN ls_output-candidates[ 1 ] TO FIELD-SYMBOL(<ls_candidate>).
         IF sy-subrc = 0.
           lt_parts = <ls_candidate>-content-parts.
           ASSIGN lt_parts[ 1 ] TO FIELD-SYMBOL(<ls_part>).
           IF sy-subrc = 0.
             DATA(lv_response) = <ls_part>-text.
             out->write( lv_response ).
           ELSE.
             out->write( |Model stopped generating response due to finish reason: { <ls_candidate>-finish_reason }| ).
             out->write( |Read more about finish reason in the below link:| ).
             out->write( |https://cloud.google.com/vertex-ai/docs/reference/rest/v1/GenerateContentResponse#FinishReason| ).
           ENDIF.
         ENDIF.
       ELSE.
         out->write( |Error occurred, reason: { lv_ret_code }:{ lv_err_text }| ).
       ENDIF.
     ENDMETHOD.
    ENDCLASS.
    
  8. クラスを有効にします。

  9. ABAP コードを実行します。

ABAP を使用して AI ユースケースのプロトタイプを作成する

SDK に用意されている /GOOG/CL_GENERATIVELANGUAGE_V1 クラスと /GOOG/CL_GENERATIVELANG_V1BETA クラスを使用して、プロトタイプの SAP アプリケーションをビルドできます。これらのクラスは、認証を設定するで作成したクライアント キーを使用して ABAP 環境から呼び出すことができます。

次のステップ