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。
- 使用适用于 Google Cloud 的 ABAP SDK 将提示传递给 Vertex AI 的 PaLM 2 Text 模型,并接收响应。
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 平台试用版 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 Text 模型的响应,如此处的文档中所述。
* 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 Text 模型,以使用 ABAP SDK for Google Cloud 解析订单请求。
除了硬编码之外,您还可以考虑使用 ABAP SDK for Google Cloud 从 Gmail 收件箱中获取电子邮件内容,然后按照此 Codelab 中的说明将内容传递给 Vertex AI。
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