Gemini AI と ABAP SDK を使用した感情分析

1. はじめに

この Codelab では、Gemini Pro モデルを使用して、ABAP SDK for Google Cloud で商品レビューの感情分析を行います。SAP システムが Compute Engine VM インスタンスでホストされている場合に、トークンを使用して Google Cloud Vertex AI API にアクセスするための認証を設定する手順を説明します。

使用されるサービスは次のとおりです。

  • Compute Engine
  • ネットワーク サービス
  • Cloud Shell
  • Vertex AI

作成するアプリの概要

次のことを行います。

  • Google API に接続するように、SAP システムにインストールされている ABAP SDK を構成します。
  • Gemini AI を呼び出して商品レビューの感情分析を行うサンプルのレポート プログラムを作成します。

2. 要件

  • ブラウザ(ChromeFirefox など)
  • 課金が有効になっている Google Cloud プロジェクト、または Google Cloud Platform の 90 日間無料トライアル アカウントを作成する
  • システムにインストール済みの SAP GUI(Windows または Java)。SAP GUI がすでにシステムにインストールされている場合は、アプリケーション サーバーの IP として VM の外部 IP アドレスを使用して SAP に接続します。Mac を使用している場合は、こちらのリンクから SAP GUI for Java をインストールすることもできます。

3. 始める前に

  • Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクト(例: abap-sdk-poc).)を選択または作成します。
  • Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。90 日間無料トライアル アカウントを使用している場合は、この手順をスキップしてください。
  • ここでは、Google Cloud で動作するコマンドライン環境である Cloud Shell を使用します。Cloud コンソールで、右上にある [Cloud Shell をアクティブにする] をクリックします。
  • 6757b2fb50ddcc2d.png
  • 必要なすべての API(AM Service Account Credentials API、Vertex AI API)が有効になっていることを確認します。
  • 次のコマンドを実行して、アカウントを認証し、デフォルト プロジェクトを abap-sdk-poc に設定します。ゾーン us-west4-b は例として使用されています。必要に応じて、次のコマンドでプロジェクトとゾーンを必要に応じて変更してください。
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
PROJECT_NAME=abap-sdk-poc
REGION=us-west4
ZONE=us-west4-b

4. サービス アカウントを作成して Vertex AI のユーザーロールを設定する

  1. 次のコマンドを実行して、サービス アカウントを作成します(まだ作成していない場合)。
gcloud iam service-accounts create abap-sdk-dev \
    --description="ABAP SDK Dev Account" \
    --display-name="ABAP SDK Dev Account"
  1. 次のコマンドを実行して、Vertex AI ユーザーのロールを設定します。
gcloud projects add-iam-policy-binding $PROJECT_NAME \
    --member=serviceAccount:abap-sdk-codelabs@$PROJECT_NAME.iam.gserviceaccount.com \
    --role=roles/aiplatform.user

5. クライアント キーを構成する

SAP システムにログインします。Codelab でプロビジョニングされたシステムを使用している場合、Install ABAP Platform Trial on Google Cloud Platform and Install ABAP SDK」と入力してから、プロビジョニングされたデフォルトのユーザー名とパスワードを使用してログインします。

  1. SAP GUI で、トランザクション コード SPRO を入力します。
  2. [SAP 参照 IMG] をクリックします。
  3. [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。
  4. [New Entries] をクリックします。
  5. 次のフィールドに値を入力します。

フィールド

説明

Google Cloud キー名

ABAP_SDK_DEMO

Google Cloud サービス アカウント名

abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud のスコープ

https://www.googleapis.com/auth/cloud-platform

Google Cloud プロジェクト ID

abap-sdk-poc

認可クラス

/GOOG/CL_AUTH_GOOGLE から取得できます。

その他のフィールドは空白のままにする

c72e71da6fd75b29.png

6. RFC 宛先を作成する

トランザクション コード SM59 を使用して、IAM 認証情報と Vertex AI API の RFC 宛先を作成します。必要に応じて、RFC 宛先を作成するための詳しい手順についてこちらをご覧ください。

RFC 宛先名

ターゲット ホスト(API エンドポイント)

メモ

ZGOOG_IAMCREDENTIALS

  • ホスト: iamcredentials.googleapis.com
  • パス: 接頭辞: /v1/
  • ポート: 443
  • SSL: 有効

この RFC 宛先は、IAM API をターゲットとしています。

ZGOOG_VERTEX_AI

  • ホスト: us-central1-aiplatform.googleapis.com
  • ポート: 443
  • SSL: 有効

この RFC 宛先は、Vertex AI API の us-central1 エンドポイントをターゲットとしています。

  • [Technical Settings] タブで、宛先 ZGOOG_IAMCREDENTIALS について次の詳細を入力します。

e670c6a91acba40f.png

  • [Technical Settings] タブで、デスティネーション ZGOOG_VERTEX_AI について次の情報を入力します。

5c584aaed5c110f2.png

  • [SSL Certificate] フィールドで、両方の RFC 宛先に対して [DEFAULT SSL Client (Standard)] オプションが選択されていることを確認します。

b6370d12bd332318.png

7. サービス マッピングを構成する

IAM API と Vertex AI API のサービス マッピング テーブルを構成するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード SPRO を入力します。
  2. [SAP 参照 IMG] をクリックします。
  3. [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Service Mapping] をクリックします。
  4. [IAM 認証情報] と [Vertex AI API] の [新規エントリ] をクリックし、以下のように RFC 宛先を更新します。

e7cc1429a4fe3a04.png

8. 構成を検証する

認証構成を検証するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード SPRO を入力します。
  2. [SAP 参照 IMG] をクリックします。
  3. [ABAP SDK for Google Cloud] > [Utilities] > [Validate Authentication Configuration] をクリックします。
  4. クライアント キー名として「ABAP_SDK_DEMO」と入力します。
  5. [Execute] をクリックして、フロー全体が正しく構成されているかどうかを確認します。
  6. [結果] 列の緑色のチェックマークは、すべての設定ステップが正常に完了したことを示します。

d7285e64e22c25b6.png

9. 商品レビューデータを調べる

ABAP プラットフォーム トライアルには、デモとテストを目的として SAP が提供するエンドツーエンドのアプリケーション、SAP Enterprise Procurement Model(EPM)がプリインストールされています。感情分析に使用される商品レビューは SNWD_REV_ITEM テーブルに格納されています。

テーブルデータは、Tcode: SE16 を使用して表示できます。ここでは「RATING_TEXT」フィールドのサンプル テキストを使用します。

2bae72d437ea639.png

アプリケーションの [マネージャー商品] にアクセスして、データを表示することもできます。Fiori Launchpad(TCode: /UI2/FLP)からダウンロードします。

f9792a91ef9f0736.png

次のスクリーンショットは、商品のリストを示しています。

f822f9ab71d37a9.png

商品をクリックすると、商品評価とレビュー例が表示されます。

69fe380d5ca7b276.png

次のセクションでは、これらの商品レビューのサンプルを使用して、Google LLM で感情を分析します。

10. Vertex AI Studio を使用して感情を分析する

  1. Vertex AI ダッシュボードを開き、Vertex AI Studio で [言語] を選択します。
  2. 新しいテキスト プロンプトを作成します。

8ce4c928c75174d7.png

  1. Gemini Pro モデルの選択を確認します。
  2. エディタに次のプロンプトを入力して、商品レビューで顧客の感情を分析するようにモデルに指示します。
  3. [送信] をクリックして、モデルからのレスポンスを生成します。

プロンプト:

What's the Customer sentiment in the below product review

Horrible! Unsatisfied in every way! The description is wrong. I sent it back. I want my money back! It is so horrible that I can't even believe it! Too expensive for what I received. I'd expect a little more durability. No instructions included for use or installation. I'm actually really surprised by the positive reviews, which I relied on when ordering. Called customer service..no answer. Looks better than it works. The Worst I have ever seen! Honestly I have no clue what you had in mind when choosing to offer this product. Not sure if I should even post one star.... It broke after 1 day. Poor Quality. Didn't work, that is why I cannot recommend this product.

fd245c204144484.png

テーブル「SNWD_REV_ITEM」のレビューデータ追加のプロンプトでモデルをテストするために使用できます。

11. Gemini Pro モデルを呼び出すレポート プログラムを作成する

このステップでは、ABAP から Gemini Pro モデルを呼び出して、商品レビューの感情分析を実行します。デモ目的では最大 10 件の商品レビューを選択し、ABAP SDK を使用して Gemini Pro モデルを呼び出し、レビューごとに感情を判定します。分析に基づいて、モデルは「ポジティブ」、「ネガティブ」、「ニュートラル」などの値を返すことができるまたは「混合」です。

  1. SAP システムにログインします。
  2. トランザクション コード SE38 に移動し、ZSENTIMENT_ANALYSIS という名前のレポート プログラムを作成します。
  3. 表示されたポップアップで、以下のように詳細を入力して [Save] をクリックします。

a2158523ec8ef3c7.png

  1. 次のポップアップで、[Local Object] を選択するか、必要に応じてパッケージ名を指定します。
REPORT zsentiment_analysis.

DATA lo_client          TYPE REF TO /goog/cl_aiplatform_v1.
DATA lv_p_projects_id   TYPE string.
DATA lv_p_locations_id  TYPE string.
DATA lv_p_publishers_id TYPE string.
DATA lv_p_models_id     TYPE string.
DATA ls_input           TYPE /goog/cl_aiplatform_v1=>ty_726.
DATA ls_output          TYPE /goog/cl_aiplatform_v1=>ty_727.
DATA lv_ret_code        TYPE i.
DATA lv_err_text        TYPE string.
DATA ls_err_resp        TYPE /goog/err_resp.
DATA lv_msg             TYPE string.
DATA lo_exception       TYPE REF TO /goog/cx_sdk.
DATA es_raw             TYPE string.


TYPES:
  BEGIN OF t_reviews,
    product_id  TYPE snwd_product_id,
    sentiment   TYPE string,
    rating_text TYPE snwd_rating_text,
  END OF t_reviews.

DATA lt_reviews TYPE STANDARD TABLE OF t_reviews WITH DEFAULT KEY.
FIELD-SYMBOLS <fs_review> TYPE t_reviews.

TRY.

    " Open HTTP Connection
    lo_client = NEW #( iv_key_name = 'ABAP_SDK_DEMO' ).

    " Populate relevant parameters
    lv_p_projects_id = lo_client->gv_project_id.
    lv_p_locations_id = 'us-central1'.
    lv_p_publishers_id = 'google'.
    lv_p_models_id = 'gemini-1.0-pro'.

    SELECT a~product_id AS product_id c~rating_text
      FROM ( ( snwd_pd AS a
      INNER JOIN snwd_rev_head AS b ON a~node_key = b~entity_key )
      INNER JOIN snwd_rev_item AS c ON b~node_key = c~parent_key )
      INTO CORRESPONDING FIELDS OF TABLE lt_reviews UP TO 10 ROWS.

    LOOP AT lt_reviews ASSIGNING <fs_review>.

      " Construct the prompt
      DATA(lv_prompt) = |DO NOT EXPLAIN and your response should not have more than one word.| &&
                        |Classify the overall sentiment of this product review as ONLY ONE of| &&
                        | the following: Positive, Negative, Neutral, or Mixed.| &&
                        cl_abap_char_utilities=>newline &&
                        <fs_review>-rating_text.

      " Set the Model Parameters and Prompt
      ls_input = VALUE #( generation_config = VALUE #( max_output_tokens = 10
                                                       temperature       = '0.2'
                                                       top_p             = '0.8'
                                                       top_k             = '40' )
                          contents          = VALUE #( ( role  = 'user'
                                                         parts = VALUE #( ( text = lv_prompt ) ) ) ) ).


      " Call Gemini Pro to identify sentiments.
      lo_client->generate_content_models( EXPORTING iv_p_projects_id   = lv_p_projects_id
                                                    iv_p_locations_id  = lv_p_locations_id
                                                    iv_p_publishers_id = lv_p_publishers_id
                                                    iv_p_models_id     = lv_p_models_id
                                                    is_input           = ls_input
                                          IMPORTING
                                                    es_output          = ls_output
                                                    ev_ret_code        = lv_ret_code
                                                    ev_err_text        = lv_err_text
                                                    es_err_resp        = ls_err_resp ).

      IF lo_client->is_success( lv_ret_code ) = abap_true.

        LOOP AT ls_output-candidates INTO DATA(ls_candidate).
          LOOP AT ls_candidate-content-parts INTO DATA(ls_part).
            <fs_review>-sentiment = ls_part-text.
            EXIT.
          ENDLOOP.
          EXIT.
        ENDLOOP.

      ELSE.
        MESSAGE lv_err_text TYPE 'E'.
      ENDIF.

    ENDLOOP.

    cl_demo_output=>display( lt_reviews ).

    " Close HTTP Connection
    lo_client->close( ).

  CATCH /goog/cx_sdk INTO lo_exception.
    lv_msg = lo_exception->get_text( ).
    MESSAGE lv_msg TYPE 'E'.
ENDTRY.

  1. プログラムを実行して、レビュー テキストの感情分析を確認します。

4d869f1b8436b9ca.png

12. 完了

これで、Gemini Pro AI と ABAP SDK for Google Cloud を使用して感情分析を行うためのサンプル プログラムを開発できました。

13. クリーンアップ

ABAP SDK for Google Cloud に関連する追加の Codelab の続行を希望されない場合は、クリーンアップに進んでください。

プロジェクトの削除

  • Google Cloud プロジェクトを削除します。
gcloud projects delete abap-sdk-poc

リソースを個別に削除する

  1. [IMG] > [Google Cloud >基本設定 >クライアント キーを構成するをご覧ください。
  2. [IMG] > [Google Cloud >基本設定 >クライアント キーを構成するをご覧ください。
  3. RFC 宛先 ZGOOG_IAMCREDENTIALSZGOOG_VERTEX_AI を削除します。
  4. 報告プログラムを削除する ZSENTIMENT_ANALYSIS.
  5. サービス アカウントを削除します。
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com