קריאה ל-Vertex AI LLM מסביבת ABAP באמצעות ABAP SDK ל-Google Cloud

1. מבוא

ב-codelab הזה מפורטים השלבים לקריאה למודל הבסיס PaLM 2 Text‏ (text-bison) של Google Cloud Vertex AI מסביבת ABAP באמצעות ABAP SDK for 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 for 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 שיעזרו לכם לעבוד ב-codelab הזה:

  • PaLM 2 for Text: המודלים הבסיסיים של PaLM 2 for Text (text-bison, ‏ text-unicorn) מותאמים לביצוע מגוון משימות של שפה טבעית, כמו ניתוח של רגש, חילוץ ישויות ויצירת תוכן.
  • Text-bison: ‏ Text-bison הוא מודל שפה גדול (LLM) שפותח על ידי Google AI. זהו מודל בסיס ל-AI גנרטיבי שיכול להבין וליצור שפה.

5. הפעלת Vertex AI בפרויקט ב-Google Cloud

  1. עוברים לפרויקט ב-Google Cloud ולוחצים על Activate Cloud Shell (הפעלת 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'

בפקודות שלמעלה, השם של התבנית לפרויקט ב-Google Cloud הוא abap-sdk-poc. מחליפים אותו במזהה הפרויקט.

  1. כדי לוודא שהתפקיד נוסף, עוברים לדף IAM. חשבון השירות שיצרתם אמור להופיע יחד עם התפקיד שהוקצה לו.

7. יצירת הגדרות SDK ב-SAP

עכשיו, אחרי שהגדרת את הדרישות המוקדמות בצד של Google Cloud, נוכל להמשיך בהגדרה בצד של SAP. כדי להגדיר את האימות ואת הקישוריות, ה-ABAP SDK ל-Google Cloud משתמש בטבלאות ‎ /GOOG/CLIENT_KEY ו-‎ /GOOG/SERVIC_MAP.

כדי לשמור על ההגדרות בטבלה /GOOG/CLIENT_KEY:

  1. בממשק המשתמש של SAP, מזינים את קוד העסקה SPRO.
  2. לוחצים על SAP Reference IMG.
  3. לוחצים על ABAP SDK for Google Cloud > Basic Settings > Configure Client Key.
  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

Authorization Class

/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 ב-codelab.

לפניכם צילום מסך של יעד ה-RFC לעיונך.

54316c5de58624c7.png

כדי לשמור על ההגדרה בטבלה /GOOG/SERVIC_MAP, מבצעים את הפעולות הבאות:

  1. בממשק המשתמש של SAP, מזינים את קוד העסקה SPRO.
  2. לוחצים על SAP Reference IMG.
  3. לוחצים על ABAP SDK for Google Cloud > Basic Settings > Configure Service Mapping.
  4. שומרים את הערכים הבאים בשדות:

שדה

תיאור

שם המפתח ב-Google Cloud

VERTEX_AI_DEMO

שם השירות של Google

aiplatform:v1

יעד RFC

ZGOOG_VERTEXAI_V1

8. הפעלת PaLM 2 Text באמצעות ה-SDK

  1. מתחברים למערכת SAP.
  2. עוברים לקוד העסקה SE38 ויוצרים דוח בשם ZDEMO_VERTEX_AI.
  3. בחלון הקופץ שנפתח, מזינים את הפרטים כפי שמתואר בהמשך ולוחצים על שמירה.

b06fda1a879290f7.png

בחלון הקופץ הבא, בוחרים באפשרות Local Object (אובייקט מקומי) או מספקים שם לחבילה בהתאם.

  1. בעורך 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.
  1. שומרים ומפעילים את תוכנית הדוחות.
  2. מפעילים את הדוח (F8).

אם הפקודה תושלם בהצלחה, פלט הדוח אמור להופיע כפי שמוצג בהמשך, עם מאפייני ההזמנה שחולצו לפי ההוראות בהנחיה.

c40839b43b8ac44f.png

9. מזל טוב

מעולה! ביצעתם קריאה מוצלחת למודל טקסט של Vertex AI PaLM 2 מתוכנית ABAP כדי לנתח בקשת הזמנה באמצעות ABAP SDK ל-Google Cloud.

במקום להטמיע את הקוד באופן קבוע, אפשר גם לקבל את תוכן האימייל מתיבת הדואר הנכנס ב-Gmail באמצעות ABAP SDK ל-Google Cloud, ולאחר מכן להעביר את התוכן אל Vertex AI כפי שמתואר בסדנת הקוד הזו.

10. הסרת המשאבים

אם אתם לא רוצים להמשיך בקודלאבים הנוספים שקשורים ל-ABAP SDK ל-Google Cloud, תוכלו להמשיך לניקוי.

מחיקת הפרויקט

  • מוחקים את הפרויקט ב-Google Cloud:
gcloud projects delete abap-sdk-poc

מחיקת משאבים ספציפיים

  1. מוחקים את מכונה לעיבוד נתונים:
gcloud compute instances delete abap-trial-docker
  1. מוחקים את firewall-rules:
gcloud compute firewall-rules delete sapmachine
  1. מוחקים את חשבון השירות:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com