搭配使用 Gemini AI 和 ABAP SDK 的情緒分析

1. 簡介

在本程式碼研究室中,您將使用 Gemini Pro 模型,透過適用於 Google Cloud 的 ABAP SDK 對產品評論執行情緒分析。當 SAP 系統託管於 Compute Engine VM 執行個體時,我們會逐步引導您設定驗證程序,以使用權杖存取 Google Cloud Vertex AI API。

目前使用的服務如下:

  • Compute Engine
  • 網路服務
  • Cloud Shell
  • Vertex AI

建構項目

您將會執行下列操作:

  • 設定 SAP 系統上安裝的 ABAP SDK,以便連結至 Google API。
  • 建立報表程式範例來呼叫 Gemini AI,並針對產品評論執行情緒分析。

2. 需求條件

  • 瀏覽器,例如 ChromeFirefox
  • 已啟用計費功能的 Google Cloud 專案,或是為 Google Cloud Platform 建立 90 天免費試用帳戶
  • 在您的系統中安裝 SAP GUI (Windows 或 Java)。如果您已在系統上安裝 SAP GUI,請使用 VM 外部 IP 位址做為應用程式伺服器 IP 連線至 SAP。如果您使用的是 Mac,也可以點選這個連結,安裝 Java 適用的 SAP GUI。

3. 事前準備

  • Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案 (例如:abap-sdk-poc).
  • 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用帳單功能。如果您使用 90 天免費試用帳戶,請略過這個步驟。
  • 您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境。在 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 系統。如果您使用程式碼研究室提供的系統在 Google Cloud Platform 上安裝 ABAP Platform Trial 並安裝 ABAP SDK」,然後使用預設佈建的使用者名稱和密碼登入。

  1. 在 SAP GUI 中,輸入交易代碼 SPRO
  2. 按一下「SAP 參考資料」
  3. 按一下 [ABAP SDK for Google Cloud]基本設定 >設定用戶端金鑰。
  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:ACTIVE

這個 RFC 目的地會指定 Vertex AI API us-central1 端點。

  • 在「Technical Settings」分頁下方,為 ZGOOG_IAMCREDENTIALS 目的地輸入下列詳細資料。

e670c6a91acba40f.png

  • 在「技術設定」分頁下方,為 ZGOOG_VERTEX_AI 目的地輸入下列詳細資料。

5c584aaed5c110f2.png

  • 確認已為 [SSL 憑證] 欄位同時為 RFC 目的地勾選 [DEFAULT SSL Client (標準)] 選項。

b6370d12bd332318.png

7. 設定服務對應

如要設定 IAM API 和 Vertex AI API 的服務對應資料表,請按照下列步驟操作:

  1. 在 SAP GUI 中,輸入交易代碼 SPRO
  2. 按一下「SAP 參考資料」
  3. 按一下 [ABAP SDK for Google Cloud]基本設定 >設定服務對應。
  4. 按一下 IAM 憑證和 Vertex AI API 的「New Entries」(新項目),然後更新 RFC 目的地,如下所示。

e7cc1429a4fe3a04.png

8. 驗證設定

如要驗證驗證設定,請執行下列步驟:

  1. 在 SAP GUI 中,輸入交易代碼 SPRO
  2. 按一下「SAP 參考資料」
  3. 按一下 [ABAP SDK for Google Cloud]實用工具 >驗證驗證設定。
  4. 將用戶端金鑰名稱設為 ABAP_SDK_DEMO
  5. 按一下「執行」,檢查整體流程是否設定成功。
  6. 如果「結果」欄中顯示綠色勾號,代表已成功完成所有設定步驟。

d7285e64e22c25b6.png

9. 研究產品評論資料

ABAP 平台試用方案已預先安裝 SAP Enterprise Procurement Model (EPM),這是由 SAP 提供,用於示範和測試的端對端應用程式。用於情緒分析的產品評論會儲存在 SNWD_REV_ITEM 表格中。

您可以使用 Tcode: SE16 檢視資料表資料。我們會使用「RATING_TEXT」欄位中的範例文字。

2bae72d437ea639.png

或者,您也可以透過存取「管理員產品」應用程式來查看資料。開啟 Fiori Launchpad (TCode: /UI2/FLP)。

f9792a91ef9f0736.png

以下螢幕截圖顯示產品清單。

f822f9ab71d37a9.png

按一下產品即可查看產品評分和評論範例。

69fe380d5ca7b276.png

在下一節中,我們會運用這些範例產品評論,透過 Google 大型語言模型分析情緒。

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. 在隨即出現的彈出式視窗中,提供下方所示的詳細資料,然後按一下「儲存」

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 搭配 Google Cloud 適用的 ABAP SDK 執行情緒分析。

13. 清除所用資源

如果不想繼續完成其他與 Google Cloud 適用的 ABAP SDK 相關的程式碼研究室,請繼續進行清除作業。

刪除專案

  • 刪除 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