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

使用 ABAP SDK 搭配 Gemini AI 進行情緒分析

程式碼研究室簡介

subject上次更新時間:9月 4, 2024
account_circle作者:Ameya Suvarna

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,也可以安裝 SAP GUI for Java,請參閱這個連結。

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 平台試用版,並安裝 ABAP SDK」程式碼研究室提供的系統,請使用預先提供的預設使用者名稱和密碼登入。

  1. 在 SAP GUI 中輸入交易代碼 SPRO
  2. 按一下「SAP Reference IMG」
  3. 依序點選「ABAP SDK for Google Cloud」>「基本設定」>「設定用戶端金鑰」
  4. 按一下「新增項目」
  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 憑證」欄位,請確認為兩個 RFC 目的地選取「DEFAULT SSL Client (Standard)」選項。

b6370d12bd332318.png

7. 設定服務對應

如要設定 IAM API 和 Vertex AI API 的服務對應表,請執行下列步驟:

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

e7cc1429a4fe3a04.png

8. 驗證設定

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

  1. 在 SAP GUI 中輸入交易代碼 SPRO
  2. 按一下「SAP Reference IMG」
  3. 依序點選「ABAP SDK for Google Cloud」>「Utilities」>「Validate Authentication Configuration」
  4. 輸入用戶端金鑰名稱 ABAP_SDK_DEMO
  5. 按一下「執行」,檢查是否已成功設定整體流程。
  6. 「結果」欄中的綠色勾號表示已成功完成所有設定步驟。

d7285e64e22c25b6.png

9. 研究產品評論資料

ABAP 平台試用版會預先安裝 SAP 企業採購模型 (EPM),這是 SAP 提供的端對端應用程式,可用於示範和測試。用於情緒分析的產品評論會儲存在 SNWD_REV_ITEM 資料表中。

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

2bae72d437ea639.png

或者,您也可以從 Fiori Launchpad (TCode: /UI2/FLP) 存取「Manager Products」應用程式,查看資料。

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

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. 清除所用資源

如果您不想繼續進行與 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