เรียกใช้ Vertex AI LLM จากสภาพแวดล้อม ABAP ด้วย ABAP SDK สําหรับ Google Cloud

1. บทนำ

ในโค้ดแล็บนี้ เราได้แสดงขั้นตอนเกี่ยวกับวิธีเรียกใช้โมเดลพื้นฐาน PaLM 2 Text (text-bison) ของ Vertex AI ใน Google Cloud จากสภาพแวดล้อม ABAP โดยใช้ ABAP SDK สำหรับ Google Cloud

ในโค้ดแล็บนี้จะใช้บริการ Google Cloud ต่อไปนี้

  • Vertex AI
  • Cloud Shell

สิ่งที่คุณจะสร้าง

คุณจะต้องสร้างสิ่งต่อไปนี้

  • เปิดใช้ Vertex AI API ในโปรเจ็กต์ Google Cloud
  • ส่งพรอมต์ไปยังโมเดลข้อความ PaLM 2 ของ Vertex AI และรับคำตอบโดยใช้ ABAP SDK สำหรับ Google Cloud

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน หรือสร้างบัญชีทดลองใช้ฟรี 90 วันสำหรับ Google Cloud Platform
  • SAP GUI (Windows หรือ Java) ที่ติดตั้งในระบบ หากติดตั้ง SAP GUI ในแล็ปท็อปแล้ว ให้เชื่อมต่อกับ SAP โดยใช้ที่อยู่ IP ภายนอกของ VM เป็น IP ของเซิร์ฟเวอร์แอปพลิเคชัน หากใช้ Mac คุณยังติดตั้ง SAP GUI สำหรับ Java ได้ด้วยโดยไปที่ลิงก์นี้

3. ก่อนเริ่มต้น

6757b2fb50ddcc2d.png

  • เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบสิทธิ์บัญชีและตั้งค่าโปรเจ็กต์เริ่มต้นเป็น 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 เป็นโมเดลภาษาขนาดใหญ่ (LLM) ที่พัฒนาโดย AI ของ Google เป็นโมเดลพื้นฐานสำหรับ GenAI ที่สามารถทำความเข้าใจและสร้างภาษาได้

5. เปิดใช้ Vertex AI ในโปรเจ็กต์ Google Cloud

  1. ไปที่โปรเจ็กต์ Google Cloud แล้วคลิกเปิดใช้งาน Cloud Shell ที่มุมขวาบน

8d15f753321c53e6.png

  1. เมื่อเปิดใช้งานเชลล์แล้ว ให้เรียกใช้คำสั่งด้านล่างเพื่อเปิดใช้ API ของ Cloud Secret Manager ในโปรเจ็กต์ Google Cloud
gcloud services enable aiplatform.googleapis.com

ตอนนี้คุณควรเปิดใช้ Vertex AI API ในโปรเจ็กต์ Google Cloud แล้ว

6. สร้างบัญชีบริการที่มีบทบาทของผู้ใช้

หากต้องการสร้างบัญชีบริการที่มีบทบาทที่จำเป็น ให้ทำตามขั้นตอนต่อไปนี้

  1. เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. ตอนนี้ให้เพิ่มบทบาทที่จำเป็นลงในบัญชีบริการที่สร้างในขั้นตอนข้างต้นเพื่อเข้าถึง 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 แทนที่ด้วยรหัสโปรเจ็กต์

  1. หากต้องการยืนยันว่าได้เพิ่มบทบาทแล้ว ให้ไปที่หน้า IAM บัญชีบริการที่คุณสร้างควรแสดงพร้อมกับบทบาทที่กำหนดให้กับบัญชี

7. สร้างการกำหนดค่า SDK ใน SAP

ตอนนี้คุณได้ตั้งค่าข้อกำหนดเบื้องต้นในฝั่ง Google Cloud แล้ว เราจึงสามารถดำเนินการกำหนดค่าในฝั่ง SAP ต่อไปได้ สำหรับการกำหนดค่าที่เกี่ยวข้องกับการตรวจสอบสิทธิ์และการเชื่อมต่อ ABAP SDK สำหรับ Google Cloud จะใช้ตาราง /GOOG/CLIENT_KEY และ /GOOG/SERVIC_MAP

หากต้องการรักษาการกำหนดค่าในตาราง /GOOG/CLIENT_KEY ให้ทำตามขั้นตอนต่อไปนี้

  1. ใน SAP GUI ให้ป้อนรหัสธุรกรรม SPRO
  2. คลิก SAP Reference IMG
  3. คลิก ABAP SDK สำหรับ Google Cloud > การตั้งค่าพื้นฐาน > กำหนดค่าคีย์ไคลเอ็นต์
  4. คงค่าต่อไปนี้ไว้ในช่อง

ช่อง

คำอธิบาย

ชื่อคีย์ 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 และสร้างการแมปสำหรับ API ในตาราง /GOOG/SERVIC_MAP กับคีย์ไคลเอ็นต์ (ดูลิงก์ นี้เพื่อดูปลายทางบริการเฉพาะภูมิภาคสำหรับ Vertex AI)

ขั้นตอนในการสร้าง RFC สำหรับ Codelab มีดังนี้

  • ไปที่รหัสธุรกรรม SM59 แล้วสร้างการเชื่อมต่อประเภท "G"
  • ตั้งชื่อปลายทางเป็น "ZGOOG_VERTEXAI_V1"
  • ระบุคำอธิบายตามที่จำเป็นและระบุพอร์ตเป็น "443"
  • ระบุที่อยู่ "โฮสต์" เป็น "us-west4-aiplatform.googleapis.com" เนื่องจากเราอ้างอิงถึงสถานที่ตั้ง "us-west4-b" ในโค้ดแล็บ

ภาพหน้าจอด้านล่างแสดงปลายทาง RFC เพื่อให้คุณใช้อ้างอิง

54316c5de58624c7.png

หากต้องการรักษาการกำหนดค่าในตาราง /GOOG/SERVIC_MAP ให้ทำตามขั้นตอนต่อไปนี้

  1. ใน SAP GUI ให้ป้อนรหัสธุรกรรม SPRO
  2. คลิก SAP Reference IMG
  3. คลิก ABAP SDK สำหรับ Google Cloud > การตั้งค่าพื้นฐาน > กำหนดค่าการแมปบริการ
  4. คงค่าต่อไปนี้ไว้ในช่อง

ช่อง

คำอธิบาย

ชื่อคีย์ Google Cloud

VERTEX_AI_DEMO

ชื่อบริการของ Google

aiplatform:v1

ปลายทาง RFC

ZGOOG_VERTEXAI_V1

8. เรียกใช้ข้อความ PaLM 2 โดยใช้ SDK

  1. เข้าสู่ระบบ SAP
  2. ไปที่รหัสธุรกรรม SE38 แล้วสร้างรายงานชื่อ "ZDEMO_VERTEX_AI"
  3. ในป๊อปอัปที่เปิดขึ้น ให้ระบุรายละเอียดตามที่แสดงด้านล่าง แล้วคลิกบันทึก

b06fda1a879290f7.png

ในป๊อปอัปถัดไป ให้เลือกออบเจ็กต์ในเครื่องหรือระบุชื่อแพ็กเกจตามความเหมาะสม

  1. ใน ABAP Editor ให้เพิ่มข้อมูลโค้ดต่อไปนี้
  • ในข้อมูลโค้ดนี้ เราจะส่งเนื้อหาอีเมลสำหรับคำขอสั่งซื้อด่วนพร้อมกับวิธีการแยกวิเคราะห์เพื่อดึงแอตทริบิวต์ของคำสั่งซื้อ เช่น ชื่อลูกค้า ชื่อบริษัท การกำหนดลูกค้า ชื่อสินค้า จำนวนคำสั่งซื้อ ที่อยู่จัดส่ง และวันที่นำส่ง
  • การประกาศประเภท 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.
  1. บันทึกและเปิดใช้งานโปรแกรมรายงาน
  2. เรียกใช้รายงาน (F8)

เมื่อดำเนินการสำเร็จแล้ว คุณควรเห็นเอาต์พุตของรายงานดังที่แสดงด้านล่างพร้อมกับแอตทริบิวต์คำสั่งซื้อที่แยกออกมาตามที่ระบุไว้ในพรอมต์

c40839b43b8ac44f.png

9. ขอแสดงความยินดี

ยินดีด้วย คุณเรียกใช้โมเดลข้อความ PaLM 2 ของ Vertex AI จากโปรแกรม ABAP เพื่อแยกวิเคราะห์คำขอสั่งซื้อโดยใช้ ABAP SDK สำหรับ Google Cloud ได้สำเร็จแล้ว

คุณยังสามารถดึงเนื้อหาอีเมลจากกล่องจดหมาย Gmail โดยใช้ ABAP SDK สำหรับ Google Cloud แล้วส่งต่อเนื้อหาไปยัง Vertex AI ตามที่อธิบายไว้ใน Codelab นี้ได้ด้วย แทนที่จะเขียนโค้ดแบบฮาร์ดโค้ด

10. ล้างข้อมูล

หากไม่ต้องการทำ Codelab เพิ่มเติมที่เกี่ยวข้องกับ ABAP SDK สำหรับ Google Cloud ต่อ โปรดดำเนินการล้างข้อมูล

ลบโปรเจ็กต์

  • ลบโปรเจ็กต์ Google Cloud โดยทำดังนี้
gcloud projects delete abap-sdk-poc

ลบทรัพยากรแต่ละรายการ

  1. ลบอินสแตนซ์ Compute โดยทำดังนี้
gcloud compute instances delete abap-trial-docker
  1. ลบกฎไฟร์วอลล์โดยทำดังนี้
gcloud compute firewall-rules delete sapmachine
  1. ลบบัญชีบริการ
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com