1. 简介
在本 Codelab 中,我们列出了使用 ABAP SDK for Google Cloud 从 ABAP 环境调用 Google Cloud Vertex AI 的 PaLM 2 Text (text-bison) 基础模型的步骤。
此 Codelab 中使用了以下 Google Cloud 服务:
- Vertex AI
- Cloud Shell
构建内容
您将创建以下内容:
- 在 Google Cloud 项目中启用 Vertex AI API。
- 将提示传递给 Vertex AI 的 PaLM 2 Text 模型,并使用 Google Cloud 专用 ABAP SDK 接收回答。
2. 要求
- 一个浏览器,例如 Chrome 或 Firefox。
- 已启用结算功能的 Google Cloud 项目,或为 Google Cloud Platform 创建 90 天免费试用账号。
- 系统中安装了 SAP GUI(Windows 或 Java 版)。如果您的笔记本电脑上已安装 SAP GUI,请使用虚拟机外部 IP 地址作为应用服务器 IP 地址连接到 SAP。如果您使用的是 Mac,还可以安装 此链接中提供的 SAP GUI for Java。
3. 准备工作
- 您已在系统上安装 ABAP SDK for Google Cloud。您可以参阅 Codelab - 在 Google Cloud Platform 上安装 ABAP Platform Trial 1909 并安装 ABAP SDK,以设置新系统。
- 您将使用 Cloud Shell,它是在 Google Cloud 中运行的命令行环境。在 Cloud 控制台中,点击右上角的激活 Cloud Shell:
- 运行以下命令以对您的账号进行身份验证,并将默认项目设置为
abap-sdk-poc
。以区域us-west4-b
为例。如果需要,请根据您的偏好更改以下命令中的项目和可用区。
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
4. 概览
下面简要介绍了您在此 Codelab 中将要使用的 Vertex AI 中的部分实体:
- PaLM 2 for Text:PaLM 2 for Text(text-bison、text-unicorn)基础模型针对各种自然语言任务(例如情感分析、实体提取和内容创作)进行了优化。
- Text-bison:Text-bison 是由 Google AI 开发的大语言模型 (LLM)。它是生成式 AI 的基础模型,可以理解和生成语言。
5. 在 Google Cloud 项目中启用 Vertex AI
- 前往您的 Google Cloud 项目,然后点击右上角的“激活 Cloud Shell”。
- 激活 Shell 后,请执行以下命令,在您的 Google Cloud 项目中启用 Cloud Secret Manager API。
gcloud services enable aiplatform.googleapis.com
现在,您应该已在 Google Cloud 项目中启用 Vertex AI API。
6. 创建具有用户角色的服务账号
如需创建具有所需角色的服务账号,请执行以下步骤:
- 在 Cloud Shell 终端中运行以下命令:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
- 现在,向在上一步中创建的服务账号添加所需角色,以便访问该 API。
gcloud endpoints services add-iam-policy-binding aiplatform.googleapis.com \ --member='serviceAccount:abap-sdk-vertexai-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/aiplatform.endpoints.predict'
上述命令使用 abap-sdk-poc 作为 Google Cloud 项目的模板名称。将其替换为您的项目 ID。
- 如需验证是否已添加该角色,请前往 IAM 页面。您创建的服务账号应会显示在列表中,并且会注明为其分配的角色。
7. 在 SAP 中创建 SDK 配置
现在,您已在 Google Cloud 端设置好前提条件,接下来我们可以继续在 SAP 端进行配置。对于与身份验证和连接相关的配置,ABAP SDK for Google Cloud 使用表 /GOOG/CLIENT_KEY 和 /GOOG/SERVIC_MAP。
如需维护表 /GOOG/CLIENT_KEY 中的配置,请执行以下步骤:
- 在 SAP GUI 中,输入事务代码 SPRO。
- 点击 SAP 参考 IMG。
- 依次点击 ABAP SDK for Google Cloud > 基本设置 > 配置客户端密钥。
- 为以下字段保留以下值:
字段 | 说明 |
Google Cloud 密钥名称 | VERTEX_AI_DEMO |
Google Cloud 服务账号名称 | abap-sdk-vertexai-tester@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud 范围 | https://www.googleapis.com/auth/cloud-platform |
Google Cloud 项目标识符 | abap-sdk-poc |
授权类 | /GOOG/CL_AUTH_GOOGLE |
将其他字段留空
Vertex AI 具有特定于区域的端点,因此我们必须为该端点创建 RFC 目标,并在表 /GOOG/SERVIC_MAP 中针对客户端密钥构建 API 映射。(如需了解适用于 Vertex AI 的区域专用服务端点,请参阅此 链接)。
以下是创建此 Codelab 的 RFC 的步骤。
- 前往事务代码 SM59,然后创建类型为“G”的连接。
- 将目的地的名称设为“ZGOOG_VERTEXAI_V1”。
- 根据需要提供说明,并将端口设置为“443”。
- 将“主机”地址设为“us-west4-aiplatform.googleapis.com”,因为我们在本 Codelab 中引用的是位置“us-west4-b”。
下面是 RFC 目标的屏幕截图,供您参考。
如需维护 /GOOG/SERVIC_MAP 表中的配置,请执行以下步骤:
- 在 SAP GUI 中,输入事务代码 SPRO。
- 点击 SAP 参考 IMG。
- 依次点击 ABAP SDK for Google Cloud > 基本设置 > 配置服务映射。
- 为以下字段保留以下值:
字段 | 说明 |
Google Cloud 密钥名称 | VERTEX_AI_DEMO |
Google 服务名称 | AI Platform v2 |
RFC 目标 | ZGOOG_VERTEXAI_V1 |
8. 使用 SDK 调用 PaLM 2 Text
- 登录您的 SAP 系统。
- 前往事务代码 SE38,然后创建一个名为“ZDEMO_VERTEX_AI”的报告。
- 在随即打开的弹出式窗口中,提供详细信息(如下所示),然后点击保存。
在下一个弹出式窗口中,选择本地对象或根据需要提供软件包名称。
- 在 ABAP 编辑器中,添加以下代码段:
- 在此代码段中,我们将作为提示传递紧急订单请求的电子邮件内容,以及用于解析该内容以提取订单属性(例如客户姓名、公司名称、客户称谓、商品名称、订单数量、送货地址和送货日期)的说明。
- ABAP 类型声明用于准备请求并捕获 Vertex AI PaLM 2 文本模型的响应,具体请参阅此处的文档。
* Types declarations
TYPES:
BEGIN OF ty_instances,
content TYPE string,
END OF ty_instances.
TYPES:
tt_instances TYPE STANDARD TABLE OF ty_instances WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_parameters,
max_output_tokens TYPE i,
temperature TYPE f,
top_k TYPE i,
top_p TYPE f,
END OF ty_parameters.
TYPES ty_categories TYPE string .
TYPES:
BEGIN OF ty_scores,
scores TYPE string,
END OF ty_scores .
TYPES:
tt_categories TYPE STANDARD TABLE OF ty_categories WITH DEFAULT KEY .
TYPES:
tt_scores TYPE STANDARD TABLE OF ty_scores WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_safety_attributes,
blocked TYPE abap_bool,
categories TYPE tt_categories,
scores TYPE tt_scores,
END OF ty_safety_attributes .
TYPES:
BEGIN OF ty_predictions,
content TYPE string,
safety_attributes TYPE ty_safety_attributes,
END OF ty_predictions .
TYPES:
tt_predictions TYPE STANDARD TABLE OF ty_predictions WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_output,
deployed_model_id TYPE string,
metadata TYPE REF TO data,
model TYPE string,
model_display_name TYPE string,
model_version_id TYPE string,
predictions TYPE tt_predictions,
END OF ty_output.
* Data declarations
DATA:
lv_p_projects_id TYPE string,
lv_p_locations_id TYPE string,
lv_p_publishers_id TYPE string,
lv_p_models_id TYPE string,
ls_input TYPE /goog/cl_aiplatform_v1=>ty_001.
DATA:
lv_email_text TYPE string.
CONSTANTS: lc_ob TYPE c VALUE '{',
lc_cb TYPE c VALUE '}'.
* Email content having order request
lv_email_text = |'Hello, We are running low on Dark Chocolates, please ship 20 units of "Lindt 90% Dark Chocolates"'| &&
|' and 10 units of "Toblerone Dark Bar 100g" to "Google Cloud, 1 East 2'| &&
|'4th St, Kearney NE" by as early as possible. Thanks and Regards, John Doe, Procurement Manager, Google Cloud'|.
TRY.
DATA(lv_raw) = VALUE string( ).
* Open HTTP Connection
DATA(lo_client) = NEW /goog/cl_aiplatform_v1( iv_key_name = 'VERTEX_AI_DEMO' ).
* Populate relevant parameters
lv_p_projects_id = lo_client->gv_project_id.
lv_p_locations_id = 'us-west4-b'.
lv_p_publishers_id = 'google'.
lv_p_models_id = 'text-bison'.
* Call API method: aiplatform.projects.locations.publishers.models.predict
CALL METHOD lo_client->predict_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 = VALUE #(
parameters = NEW ty_parameters(
max_output_tokens = 256
temperature = '0.2'
top_k = '40'
top_p = '0.8' )
* Pass the prompt with email content and instructions to get order attributes
instances = NEW tt_instances( ( content =
|'Give me the Customer Name, Company Name, Customer Designation, Item Name, Order Quantity, Shipping address, Delivery Date'| &&
|'from an email context. Structure the response in JSON camelcase format with fields corresponding to each entities. Place the ordered items in a JSON nest'| &&
|'Default the delivery date to a future date in DD.MM.YYYY format. Here is the email content:'| && lv_email_text ) ) )
IMPORTING
es_raw = lv_raw
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp).
IF lo_client->is_success( lv_ret_code ).
DATA(ls_output_llm) = VALUE ty_output( ).
* Deserializing API response to get model response
/goog/cl_json_util=>deserialize_json( EXPORTING iv_json = lv_raw
iv_pretty_name = /ui2/cl_json=>pretty_mode-extended
IMPORTING es_data = ls_output_llm ).
cl_demo_output=>new(
)->begin_section( 'API Call Successful:'
)->write_text( 'Respose from model:'
)->write_text( ls_output_llm-predictions[ 1 ]-content
)->display( ).
ELSE.
cl_demo_output=>new(
)->begin_section( 'API Call Unsuccessful:'
)->write_text( 'Error Message:'
)->write_text( lv_err_text
)->display( ).
ENDIF.
* Close HTTP Connection
lo_client->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
DATA(lv_error) = lo_exception->get_text( ).
cl_demo_output=>new(
)->begin_section( 'Exception Occured:'
)->write_text( lv_error
)->display( ).
ENDTRY.
- 保存并启用报告程序。
- 执行报告 (F8)。
成功执行后,您应该会看到如下所示的报告输出,其中包含提示中说明的提取的订单属性。
9. 恭喜
恭喜!您已成功从 ABAP 程序调用 Vertex AI PaLM 2 文本模型,以使用 ABAP SDK for Google Cloud 解析订单请求。
您也可以考虑使用 ABAP SDK for Google Cloud 从 Gmail 收件箱中获取电子邮件内容,然后将内容传递给 Vertex AI,而不是使用硬编码。如本 Codelab 中所述。
10. 清理
如果您不想继续学习与 ABAP SDK for Google Cloud 相关的其他 Codelab,请继续进行清理。
删除项目
- 删除 Google Cloud 项目:
gcloud projects delete abap-sdk-poc
删除各个资源
- 删除计算实例:
gcloud compute instances delete abap-trial-docker
- 删除防火墙规则:
gcloud compute firewall-rules delete sapmachine
- 删除服务账号:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com