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

1. 简介

在此 Codelab 中,您将使用 Gemini Pro 模型通过 ABAP SDK for Google Cloud 对商品评价进行情感分析。我们将介绍设置身份验证的步骤,以便在 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,则还可以安装 链接中提供的 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 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 系统。如果您使用的是“在 Google Cloud Platform 上安装 ABAP 平台试用版并安装 ABAP SDK”这项 Codelab 预配的系统,请使用预配的默认用户名和密码登录。

  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 端点为目标。

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

e670c6a91acba40f.png

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

5c584aaed5c110f2.png

  • 对于 SSL Certificate(SSL 证书)字段,请确保为两个 RFC 目的地都选择了 DEFAULT SSL Client (Standard)(默认 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 企业采购模型 (EPM),这是 SAP 提供的用于演示和测试的端到端应用。用于情感分析的商品评价存储在表 SNWD_REV_ITEM 中。

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

2bae72d437ea639.png

您还可以通过以下方式查看数据:从 Fiori Launchpad 访问应用“Manager Products”(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. 在随即打开的弹出式窗口中,提供详细信息(如下所示),然后点击保存

a2158523ec8ef3c7.png

  1. 在下一个弹出式窗口中,选择本地对象或根据需要提供软件包名称。
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. 恭喜

恭喜!您已成功开发了一个示例程序,该程序可使用 ABAP SDK for Google Cloud 搭配 Gemini Pro AI 执行情感分析。

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