结合使用 Gemini AI 和 ABAP SDK 进行情感分析

1. 简介

在此 Codelab 中,您将使用 Gemini Pro 模型,通过适用于 Google Cloud 的 ABAP SDK 对商品评价进行情感分析。我们将介绍设置身份验证的步骤,以便在您的 SAP 系统托管在 Compute Engine 虚拟机实例上时使用令牌访问 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,请使用虚拟机外部 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 User 角色。
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“在 Google Cloud Platform 上安装 ABAP 平台试用并安装 ABAP SDK”,然后使用默认配置的用户名和密码登录。

  1. 在 SAP GUI 中,输入事务代码 SPRO
  2. 点击 SAP 参考 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 项目标识符

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

  • 技术设置标签页下,为 ZGOOG_VERTEX_AI 目标输入以下详细信息。

5c584aaed5c110f2

  • 对于 SSL 证书字段,请确保为两个 RFC 目标都选择了默认 SSL 客户端(标准)选项。

b6370d12bd332318.png

7. 配置服务映射

如需为 IAM API 和 Vertex AI API 配置服务映射表,请执行以下步骤:

  1. 在 SAP GUI 中,输入事务代码 SPRO
  2. 点击 SAP 参考 IMG
  3. 点击 ABAP SDK for Google Cloud > 基本设置 > 配置服务映射
  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 Enterprise Procurement Model (EPM),这是一个由 SAP 提供的端到端应用,用于演示和测试。将用于情感分析的商品评价存储在表 SNWD_REV_ITEM 中。

您可以使用 Tcode: SE16 查看表数据。我们将使用“RATING_TEXT”字段中的示例文本。

2bae72d437ea639

您还可以选择访问应用“管理产品”来查看数据(TCode:/UI2/FLP)。

f9792a91ef9f0736.png

以下屏幕截图显示了产品列表。

f822f9ab71d37a9.png

点击商品,查看商品评分和评价示例。

69fe380d5ca7b276

在下一部分中,我们将使用这些示例商品评价,通过 Google LLM 分析情感。

10. 使用 Vertex AI Studio 分析情感

  1. 打开 Vertex AI 信息中心,选择 Vertex AI studio 下的语言
  2. 创建新的文本提示。

8ce4c928c75174d7

  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. 清理

如果您不想继续学习与 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