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 を有効にします。
- ABAP SDK for Google Cloud を使用して、Vertex AI の PaLM 2 テキストモデルにプロンプトを渡し、レスポンスを受け取ります。
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 Platform Trial 1909 をインストールして ABAP SDK をインストールするをご覧ください。
- Google Cloud 上で動作するコマンドライン環境の Cloud Shell を使用します。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: テキスト用 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'
上記のコマンドでは、Google Cloud プロジェクトのテンプレート名として abap-sdk-poc を使用しています。実際のプロジェクト 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] > [Basic Settings] > [Configure Client Key] をクリックします。
- フィールドに対して次の値を維持します。
フィールド | 説明 |
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 のリージョン固有のサービス エンドポイントについては、こちらのリンクを参照してください)。
Codelab の RFC を作成する手順は次のとおりです。
- トランザクション コード SM59 に移動し、タイプ「G」の接続を作成します。
- 宛先の名前を「ZGOOG_VERTEXAI_V1」とします。
- 必要に応じて説明を入力し、ポートを「443」にします。
- codelab でロケーション「us-west4-b」を参照しているため、「ホスト」アドレスを「us-west4-aiplatform.googleapis.com」とします。
参考として、RFC 宛先のスクリーンショットを以下に示します。
テーブル /GOOG/SERVIC_MAP で構成を維持するには、次の操作を行います。
- SAP GUI で、トランザクション コード SPRO を入力します。
- [SAP 参照 IMG] をクリックします。
- [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Service Mapping] をクリックします。
- フィールドに対して次の値を維持します。
フィールド | 説明 |
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 SDK for Google Cloud を使用して、ABAP プログラムから Vertex AI PaLM 2 テキスト モデルを呼び出し、注文リクエストを解析しました。
ハードコーディングする代わりに、ABAP SDK for Google Cloud を使用して Gmail の受信トレイからメールのコンテンツを取得し、この Codelab で説明されているようにコンテンツを Vertex AI に渡すこともできます。
10. クリーンアップ
ABAP SDK for Google Cloud に関連する追加の Codelabs を続行しない場合は、クリーンアップに進んでください。
プロジェクトを削除する
- Google Cloud プロジェクトを削除します。
gcloud projects delete abap-sdk-poc
リソースを個別に削除する
- コンピューティング インスタンスを削除します。
gcloud compute instances delete abap-trial-docker
- firewall-rules を削除します。
gcloud compute firewall-rules delete sapmachine
- サービス アカウントを削除します。
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com