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 キーを生成するには、次の操作を行います。
Google AI Studio で [API キー] ページを開きます。
[API キーを作成] をクリックします。
表示されている場合は、法的通知を読んで同意し、[続行] をクリックします。
表示されている場合は、安全設定に関する注意事項を読み、確認します。
[API キーを作成] ダイアログで、次のオプションのうち該当する方を選択します。
- 新しいプロジェクトで API キーを作成する
- 既存のプロジェクトで API キーを作成する
キー文字列をコピーして安全に保管します。この API キーは、Gemini API への認証を構成するために必要です。
API キーを生成した Google Cloud プロジェクトのプロジェクト番号をコピーします。この値は後の手順で必要になります。
認証を設定する
API キーを使用して Gemini API に対する認証を行うには、次のいずれかの方法を使用します。
- ABAP SDK for Google Cloud のオンプレミスまたはクラウド エディションの場合。
- ABAP SDK for Google Cloud の SAP BTP エディションの場合。
SAP SSF に保存されている API キーを使用して認証する
API キーを安全に保つには、生成された API キーを SAP SSF に保存し、SSF 認証クラスを使用してクライアント キーを構成します。このクライアント キーを使用して Gemini API にアクセスできます。 詳しくは以下をご覧ください。
カスタム認証クラスを介して API キーを使用して認証する
または、カスタム認証クラスを作成して API キーを保持し、カスタム認証クラスでクライアント キーを構成することもできます。
オンプレミスまたは任意のクラウド エディション
SAP システムで、ABAP SDK for Google Cloud に付属のインターフェース
/GOOG/IF_AUTH
を実装して、Z
クラスを作成します。- SAP GUI で、トランザクション コード
SE24
を実行します。 - [Object type] フィールドに名前(
Z_TEST_GEMINI_API
など)を入力し、[Create] をクリックします。 - [Object type] が [Class] であることを確認して、[OK] をクリックします。
- [Description] フィールドにクラスの説明(
Class for authentication to Google AI Studio
など)を指定し、クラスを [Local Object] として保存するか、[Transport Request] に保存します。 - [Interfaces] タブを開き、インターフェース
/GOOG/IF_AUTH
を追加して Enter キーを押します。 - [Methods] タブを開きます。インターフェース
/GOOG/IF_AUTH
のメソッドがZ
クラスに自動的に実装されます。 - メソッド
/GOOG/IF_AUTH~GET_ACCESS_TOKEN
をダブルクリックします。 メソッド
/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 キーに置き換えます。Z
クラスを有効にします。
- SAP GUI で、トランザクション コード
SAP システムで、クライアント キー構成を作成します。
SAP GUI で、トランザクション コード
/GOOG/SDK_IMG
を実行します。または、トランザクション コード
SPRO
を実行して、[SAP Reference IMG] をクリックします。[ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。
[New Entries] をクリックします。
次のフィールドに値を入力します。
フィールド 説明 Google Cloud キー名 クライアント キー構成の名前を指定します(例: TEST_GEMINI_API
)。Google Cloud サービス アカウント名 このフィールドは空白のままにしておきます。 Google Cloud のスコープ このフィールドは空白のままにしておきます。 Google Cloud プロジェクト ID API キーが保存されている Google Cloud プロジェクトのプロジェクト番号を指定します。 コマンド名 このフィールドは空白のままにしておきます。 認可クラス 前の手順で作成した Z
クラス(Z_TEST_GEMINI_API
など)を指定します。トークンのキャッシュ保存 このフィールドは空白のままにしておきます。
トークンの更新期限(秒) このフィールドは空白のままにしておきます。 認可パラメータ 1 このフィールドは空白のままにしておきます。 認可パラメータ 2 このフィールドは空白のままにしておきます。 - 新しいエントリを保存します。
クライアント キーをメモしておきます。このクライアント キーは認証に使用します。
SAP BTP エディション
SAP BTP、ABAP 環境で、ABAP SDK for Google Cloud に付属の
/GOOG/CL_AUTH_BASE
クラスを継承して、新しいクラスを作成します。- Eclipse プラットフォームで、クラスを作成するパッケージを右クリックし、[Create] > [ABAP Class] をクリックします。
- [Name] フィールドに「
ZCL_TEST_GEMINI_API
」と入力します。 - [Description] フィールドに「
Authentication Class for testing Gemini API
」と入力します。 - [Superclass] フィールドに「
/GOOG/CL_AUTH_BASE
」と入力します。 - [Next] をクリックします。
- トランスポート リクエストを選択するか、新しいリクエストを作成します。
- [Finish] をクリックします。
エディタで、既存のコードを次のコードに置き換えます。
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 キーに置き換えます。Z
クラスを有効にします。このクラスのプロパティに移動し、[API State] タブに移動して、契約状態
C1
で API をリリースします。API の状態の詳細については、開発オブジェクトのリリースをご覧ください。
ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
Google SDK: Main Configuration アプリにアクセスし、次の操作を行います。
- [Create] をクリックします。
[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
クラスを選択します。新しいエントリを保存します。
クライアント キーをメモしておきます。このクライアント キーは認証に使用します。
サンプルコードを実行する
オンプレミスまたは任意のクラウド エディション
Gemini API の機能を確認するには、Vertex AI SDK for ABAP に付属の AI Studio デモを使用します。
AI Studio デモを実行する手順は次のとおりです。
SAP GUI で、トランザクション コード
/GOOG/SDK_IMG
を実行します。または、トランザクション コード
SPRO
を実行して、[SAP Reference IMG] をクリックします。[ABAP SDK for Google Cloud] > [Demos] に移動します。
[Vertex AI SDK: Demo: Prototyping with Generative Language API] を開きます。
[Client key] フィールドに、認証を設定するで作成したクライアント キーを入力します。
[Model ID] フィールドに、使用する LLM モデルの ID(
gemini-1.5-flash
など)を入力します。使用可能なモデルについては、モデル バリエーションをご覧ください。必要に応じて、次の生成パラメータを指定します。
- 最大出力トークン
- レスポンスの MIME タイプ
- 温度
- トップ K
- トップ P
これらのモデル生成パラメータの詳細については、パラメータ値を試すをご覧ください。
[Enter system instructions] フィールドにシステム指示を入力します。
[Enter prompt] フィールドに入力プロンプトを入力します。
プログラムを実行します。[Response from LLM] 領域に生成された出力が表示されます。
SAP BTP エディション
次のサンプルコードを実行して、Gemini API の機能を確認できます。
Eclipse プラットフォームで、クラスを作成するパッケージを右クリックし、[Create] > [ABAP Class] をクリックします。
[Name] フィールドに「
ZCL_INVOKE_LLM
」と入力します。[Description] フィールドに「
Sample class for testing Gemini API
」と入力します。[Next] をクリックします。
トランスポート リクエストを選択するか、新しいリクエストを作成します。
[Finish] をクリックします。
エディタで、既存のコードを次のコードに置き換えます。
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.
クラスを有効にします。
ABAP コードを実行します。
ABAP を使用して AI ユースケースのプロトタイプを作成する
SDK に用意されている /GOOG/CL_GENERATIVELANGUAGE_V1
クラスと /GOOG/CL_GENERATIVELANG_V1BETA
クラスを使用して、プロトタイプの SAP アプリケーションをビルドできます。これらのクラスは、認証を設定するで作成したクライアント キーを使用して ABAP 環境から呼び出すことができます。
次のステップ
- Vertex AI SDK for ABAP をインストールして構成する方法を確認する。
- 組み込みの SAP 向け生成 AI デモプログラムを確認する。
- SAP 向け Vertex AI の生成 AI について学習する。
- Cloud フォーラムのコミュニティで Vertex AI SDK for ABAP について質問したり、ディスカッションに参加したりする。