Gọi LLM Vertex AI từ môi trường ABAP bằng SDK ABAP cho Google Cloud

1. Giới thiệu

Trong lớp học lập trình này, chúng tôi đã liệt kê các bước về cách gọi mô hình nền tảng PaLM 2 Text (text-bison) của Google Cloud Vertex AI từ môi trường ABAP bằng SDK ABAP cho Google Cloud.

Các dịch vụ sau đây của Google Cloud được sử dụng trong lớp học lập trình này:

  • Vertex AI
  • Cloud Shell

Sản phẩm bạn sẽ tạo ra

Bạn sẽ tạo các thành phần sau:

  • Bật API Vertex AI trong một dự án Google Cloud.
  • Truyền một câu lệnh đến mô hình Văn bản PaLM 2 của Vertex AI và nhận phản hồi bằng SDK ABAP cho Google Cloud.

2. Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox.
  • Một dự án Google Cloud đã bật tính năng thanh toán hoặc Tạo tài khoản dùng thử miễn phí 90 ngày cho Google Cloud Platform.
  • SAP GUI (Windows hoặc Java) đã được cài đặt trong hệ thống của bạn. Nếu bạn đã cài đặt SAP GUI trên máy tính xách tay, hãy kết nối với SAP bằng địa chỉ IP bên ngoài của máy ảo làm địa chỉ IP của Máy chủ ứng dụng. Nếu đang dùng máy Mac, bạn cũng có thể cài đặt SAP GUI cho Java có trong đường liên kết này.

3. Trước khi bắt đầu

6757b2fb50ddcc2d.png

  • Chạy các lệnh sau để xác thực cho tài khoản của bạn và đặt dự án mặc định thành abap-sdk-poc. Ví dụ: vùng us-west4-b. Nếu cần, vui lòng thay đổi dự án và vùng trong các lệnh sau đây theo lựa chọn ưu tiên của bạn.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Tổng quan

Dưới đây là thông tin tổng quan nhanh về một số thực thể của Vertex AI mà bạn sẽ làm việc trong lớp học lập trình này:

  • PaLM 2 cho văn bản: Các mô hình nền tảng PaLM 2 cho văn bản (text-bison, text-unicorn) được tối ưu hoá cho nhiều tác vụ ngôn ngữ tự nhiên như phân tích cảm xúc, trích xuất thực thể và tạo nội dung.
  • Text-bison: Text-bison là một mô hình ngôn ngữ lớn (LLM) do Google AI phát triển. Đây là mô hình nền tảng cho AI tạo sinh, có thể hiểu và tạo ngôn ngữ.

5. Bật Vertex AI trong Dự án Google Cloud

  1. Chuyển đến Dự án Google Cloud rồi nhấp vào Kích hoạt Cloud Shell ở góc trên cùng bên phải.

8d15f753321c53e6.png

  1. Sau khi kích hoạt shell, hãy thực thi lệnh dưới đây để bật API Trình quản lý bí mật trên đám mây trong Dự án Google Cloud của bạn.
gcloud services enable aiplatform.googleapis.com

Bây giờ, bạn đã bật API Vertex AI trong Dự án Google Cloud.

6. Tạo Tài khoản dịch vụ có vai trò người dùng

Để tạo tài khoản dịch vụ có các vai trò bắt buộc, hãy thực hiện các bước sau:

  1. Chạy lệnh sau trong dòng lệnh Cloud Shell:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Bây giờ, hãy thêm vai trò bắt buộc vào tài khoản dịch vụ được tạo ở bước trên để truy cập vào 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'

Các lệnh trên sử dụng abap-sdk-poc làm tên mẫu cho Dự án Google Cloud. Thay thế mã này bằng mã dự án của bạn.

  1. Để xác minh vai trò đã được thêm, hãy chuyển đến trang IAM. Tài khoản dịch vụ mà bạn đã tạo sẽ xuất hiện cùng với vai trò đã được chỉ định cho tài khoản đó.

7. Tạo cấu hình SDK trong SAP

Giờ đây, khi bạn đã thiết lập các điều kiện tiên quyết ở phía Google Cloud, chúng ta có thể tiếp tục với cấu hình ở phía SAP. Đối với cấu hình liên quan đến xác thực và kết nối, SDK ABAP cho Google Cloud sử dụng các bảng /GOOG/CLIENT_KEY và /GOOG/SERVIC_MAP.

Để duy trì cấu hình trong bảng /GOOG/CLIENT_KEY, hãy thực hiện các bước sau:

  1. Trong SAP GUI, hãy nhập mã giao dịch SPRO.
  2. Nhấp vào SAP Reference IMG (Hình ảnh tham chiếu SAP).
  3. Nhấp vào ABAP SDK for Google Cloud (SDK ABAP cho Google Cloud) > Basic Settings (Cài đặt cơ bản) > Configure Client Key (Định cấu hình khoá ứng dụng).
  4. Duy trì các giá trị sau đây cho các trường:

Trường

Mô tả

Tên khoá Google Cloud

VERTEX_AI_DEMO

Tên tài khoản dịch vụ Google Cloud

abap-sdk-vertexai-tester@abap-sdk-poc.iam.gserviceaccount.com

Phạm vi Google Cloud

https://www.googleapis.com/auth/cloud-platform

Giá trị nhận dạng dự án trên Google Cloud

abap-sdk-poc

Lớp uỷ quyền

/GOOG/CL_AUTH_GOOGLE

Để trống các trường khác

Vertex AI có các điểm cuối theo khu vực cụ thể, chúng ta sẽ phải tạo một đích đến RFC cho điểm cuối và tạo mối liên kết cho API trong bảng /GOOG/SERVIC_MAP so với khoá ứng dụng. (Tham khảo đường liên kết này để biết các điểm cuối dịch vụ theo khu vực cụ thể cho Vertex AI).

Dưới đây là các bước để tạo RFC cho lớp học lập trình.

  • Chuyển đến mã giao dịch SM59 và tạo kết nối loại "G".
  • Đặt tên cho đích đến là "ZGOOG_VERTEXAI_V1".
  • Cung cấp nội dung mô tả bắt buộc và cổng là "443".
  • Đặt địa chỉ "Máy chủ" là " us-west4-aiplatform.googleapis.com" vì chúng ta đang tham chiếu đến vị trí "us-west4-b" trong lớp học lập trình.

Dưới đây là ảnh chụp màn hình của đích đến RFC để bạn tham khảo.

54316c5de58624c7.png

Để duy trì cấu hình trong bảng /GOOG/SERVIC_MAP, hãy thực hiện các bước sau:

  1. Trong SAP GUI, hãy nhập mã giao dịch SPRO.
  2. Nhấp vào SAP Reference IMG (Hình ảnh tham chiếu SAP).
  3. Nhấp vào ABAP SDK for Google Cloud (SDK ABAP cho Google Cloud) > Basic Settings (Cài đặt cơ bản) > Configure Service Mapping (Định cấu hình liên kết dịch vụ).
  4. Duy trì các giá trị sau đây cho các trường:

Trường

Mô tả

Tên khoá Google Cloud

VERTEX_AI_DEMO

Tên dịch vụ của Google

aiplatform:v1

Đích đến RFC

ZGOOG_VERTEXAI_V1

8. Gọi văn bản PaLM 2 bằng SDK

  1. Đăng nhập vào hệ thống SAP.
  2. Chuyển đến mã giao dịch SE38 rồi tạo một báo cáo có tên "ZDEMO_VERTEX_AI".
  3. Trong cửa sổ bật lên, hãy cung cấp thông tin chi tiết như bên dưới rồi nhấp vào Lưu.

b06fda1a879290f7.png

Trong cửa sổ bật lên tiếp theo, hãy chọn Local Object (Đối tượng cục bộ) hoặc cung cấp tên gói phù hợp.

  1. Trong Trình chỉnh sửa ABAP, hãy thêm đoạn mã sau:
  • Trong đoạn mã này, dưới dạng lời nhắc, chúng ta sẽ truyền nội dung email cho yêu cầu đặt hàng khẩn cấp cùng với hướng dẫn để phân tích cú pháp nội dung đó nhằm trích xuất các thuộc tính đơn đặt hàng như Tên khách hàng, Tên công ty, Chức danh khách hàng, Tên mặt hàng, Số lượng đặt hàng, Địa chỉ giao hàng và Ngày giao hàng.
  • Nội dung khai báo loại ABAP là để chuẩn bị yêu cầu và ghi lại phản hồi từ mô hình Văn bản PaLM 2 của Vertex AI theo tài liệu tại đây.
* 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.
  1. Lưu và kích hoạt chương trình báo cáo.
  2. Thực thi báo cáo (F8).

Khi thực thi thành công, bạn sẽ thấy kết quả báo cáo như minh hoạ bên dưới, trong đó có các thuộc tính đơn đặt hàng được trích xuất theo hướng dẫn trong lời nhắc.

c40839b43b8ac44f.png

9. Xin chúc mừng

Xin chúc mừng! Bạn đã gọi thành công mô hình Văn bản PaLM 2 của Vertex AI từ chương trình ABAP để phân tích cú pháp yêu cầu đơn đặt hàng bằng SDK ABAP cho Google Cloud.

Thay vì mã hoá cứng, bạn cũng có thể cân nhắc việc lấy nội dung email từ hộp thư đến của Gmail bằng SDK ABAP cho Google Cloud, sau đó truyền nội dung đó đến Vertex AI như mô tả trong lớp học lập trình này.

10. Dọn dẹp

Nếu bạn không muốn tiếp tục các lớp học lập trình bổ sung liên quan đến SDK ABAP cho Google Cloud, vui lòng tiến hành dọn dẹp.

Xoá dự án

  • Xoá dự án trên Google Cloud:
gcloud projects delete abap-sdk-poc

Xoá từng tài nguyên

  1. Xoá thực thể máy tính:
gcloud compute instances delete abap-trial-docker
  1. Xoá firewall-rules:
gcloud compute firewall-rules delete sapmachine
  1. Xoá tài khoản dịch vụ:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com