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 に対する認証を行うには、次のいずれかの方法を使用します。
カスタム認証クラスを介して API キーを使用して認証する
カスタム認証クラスを作成して API キーを保持し、カスタム認証クラスでクライアント キーを構成できます。
SAP BTP、ABAP 環境で、ABAP SDK for Google Cloud に付属の
/GOOG/CL_AUTH_BASE
クラスを継承して、新しいクラスを作成します。- Eclipse プラットフォームで、クラスを作成するパッケージを右クリックし、[新規] > [ABAP クラス] をクリックします。
- [名前] フィールドに「
ZCL_TEST_GEMINI_API
」と入力します。 - [説明] フィールドに「
Authentication Class for testing Gemini API
」と入力します。 - [Superclass] フィールドに「
/GOOG/CL_AUTH_BASE
」と入力します。 - [次へ] をクリックします。
- トランスポート リクエストを選択するか、新しいリクエストを作成します。
- [完了] をクリックします。
エディタで、既存のコードを次のコードに置き換えます。
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 の状態] タブに移動して、契約状態
C1
で API をリリースします。API の状態の詳細については、開発オブジェクトのリリースをご覧ください。
ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
Google SDK: Main Configuration アプリにアクセスし、次の手順を実施します。
- [作成] をクリックします。
[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 の機能を確認できます。
Eclipse プラットフォームで、クラスを作成するパッケージを右クリックし、[新規] > [ABAP クラス] をクリックします。
[名前] フィールドに「
ZCL_INVOKE_LLM
」と入力します。[説明] フィールドに「
Sample class for testing Gemini API
」と入力します。[次へ] をクリックします。
トランスポート リクエストを選択するか、新しいリクエストを作成します。
[完了] をクリックします。
エディタで、既存のコードを次のコードに置き換えます。
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 向け Vertex AI の生成 AI について学習する。
- Cloud フォーラムのコミュニティで Vertex AI SDK for ABAP について質問したり、ディスカッションに参加したりする。