1. 簡介
在這個程式碼研究室中,我們列出了如何使用 Google Cloud 適用的 ABAP SDK,從 ABAP 環境呼叫 Google Cloud Vertex AI 的 PaLM 2 Text (text-bison) 基礎模型的步驟。
本程式碼研究室會使用下列 Google Cloud 服務:
- Vertex AI
- Cloud Shell
建構項目
您將建立下列項目:
- 在 Google Cloud 專案中啟用 Vertex AI API。
- 將提示傳遞至 Vertex AI 的 PaLM 2 Text 模型,並使用 ABAP SDK for Google Cloud 接收回應。
2. 需求條件
- Chrome 或 Firefox 等瀏覽器。
- 已啟用計費功能的 Google Cloud 專案,或為 Google Cloud Platform 建立 90 天免費試用帳戶。
- 系統中安裝了 SAP GUI (Windows 或 Java)。如果筆電上已安裝 SAP GUI,請使用 VM 外部 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. 總覽
以下簡要介紹您在本程式碼研究室中會用到的部分 Vertex AI 實體:
- 文字專用的 PaLM 2:文字專用的 PaLM 2 (text-bison、text-unicorn) 基礎模型經過最佳化處理,可執行各種自然語言工作,例如情緒分析、實體擷取和內容建立。
- Text-bison:Text-bison 是 Google AI 開發的大型語言模型 (LLM)。這是生成式 AI 的基礎模型,可以理解並產生語言。
5. 在 Google Cloud 專案中啟用 Vertex AI
- 前往 Google Cloud 專案,然後按一下右上角的「啟用 Cloud 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 端的設定。針對驗證和連線相關設定,Google Cloud 適用的 ABAP SDK 會使用 /GOOG/CLIENT_KEY 和 /GOOG/SERVIC_MAP 資料表。
如要維護 /GOOG/CLIENT_KEY 表格中的設定,請執行下列步驟:
- 在 SAP GUI 中輸入交易代碼 SPRO。
- 按一下「SAP Reference 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 專案 ID | abap-sdk-poc |
授權類別 | /GOOG/CL_AUTH_GOOGLE |
將其他欄位留空
Vertex AI 有區域專屬的端點,因此我們必須為端點建立 RFC 目的地,並根據用戶端金鑰在 /GOOG/SERVIC_MAP 資料表中建立 API 對應項目。(如要查看 Vertex AI 的區域專屬服務端點,請參閱這個 連結)。
以下是為程式碼研究室建立 RFC 的步驟。
- 前往交易代碼 SM59,並建立類型為「G」的連線。
- 將目的地名稱設為「ZGOOG_VERTEXAI_V1」。
- 提供說明 (如有必要) 和「443」通訊埠。
- 請將「主機」位址設為「us-west4-aiplatform.googleapis.com」,因為我們在程式碼研究室中參照的是「us-west4-b」位置。
以下是 RFC 目的地的螢幕截圖,供您參考。
如要維護 /GOOG/SERVIC_MAP 資料表中的設定,請執行下列步驟:
- 在 SAP GUI 中輸入交易代碼 SPRO。
- 按一下「SAP Reference IMG」。
- 依序按一下「ABAP SDK for Google Cloud」>「基本設定」>「設定服務對應」。
- 請針對下列欄位保留以下值:
欄位 | 說明 |
Google Cloud 金鑰名稱 | VERTEX_AI_DEMO |
Google 服務名稱 | aiplatform:v1 |
RFC 目的地 | ZGOOG_VERTEXAI_V1 |
8. 使用 SDK 叫用 PaLM 2 Text
- 登入 SAP 系統。
- 前往交易代碼 SE38,然後建立名稱為「ZDEMO_VERTEX_AI」的報表。
- 在隨即開啟的彈出式視窗中,提供下方所示的詳細資料,然後按一下「儲存」。
在下一個彈出式視窗中,選取「Local Object」或提供適當的套件名稱。
- 在 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 模型,使用 Google Cloud 適用的 ABAP SDK 剖析訂單要求。
除了硬式編碼之外,您也可以考慮使用 Google Cloud 適用的 ABAP SDK 從 Gmail 收件匣取得電子郵件內容,然後將內容傳遞至 Vertex AI,如本程式碼研究室所述。
10. 清理
如果您不想繼續進行與 Google Cloud 適用的 ABAP SDK 相關的其他程式碼研究室,請繼續進行清理作業。
刪除專案
- 刪除 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