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 Text של Vertex AI וקבלת תגובה באמצעות ABAP SDK for Google Cloud.
2. דרישות
- דפדפן, כמו Chrome או Firefox.
- פרויקט ב-Google Cloud עם חיוב מופעל או יצירת חשבון לניסיון חינם למשך 90 יום ב-Google Cloud Platform.
- SAP GUI (Windows או Java) מותקן במערכת. אם SAP GUI כבר מותקן במחשב הנייד, מתחברים ל-SAP באמצעות כתובת ה-IP החיצונית של המכונה הווירטואלית ככתובת ה-IP של שרת האפליקציות. אם אתם משתמשים ב-Mac, אתם יכולים גם להתקין את SAP GUI for Java שזמין בקישור הזה.
3. לפני שמתחילים
- התקנתם את ABAP SDK for Google Cloud במערכת שלכם. אפשר לעיין ב-codelab – Install ABAP Platform Trial 1909 on Google Cloud Platform and Install ABAP SDK כדי להגדיר מערכת חדשה.
- תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud. בפינה הימנית העליונה של Cloud Console, לוחצים על Activate 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 for Text: מודלי הבסיס PaLM 2 for Text (text-bison, text-unicorn) מותאמים למגוון משימות בשפה טבעית, כמו ניתוח סנטימנט, חילוץ ישויות ויצירת תוכן.
- Text-bison: מודל שפה גדול (LLM) שפותח על ידי Google AI. זהו מודל בסיס ל-AI גנרטיבי שיכול להבין וליצור שפה.
5. הפעלת Vertex AI בפרויקט ב-Google Cloud
- עוברים לפרויקט Google Cloud ולוחצים על Activate Cloud Shell (הפעלת Cloud Shell) בפינה הימנית העליונה.
- אחרי שמפעילים את Cloud Shell, מריצים את הפקודה הבאה כדי להפעיל את Cloud Secret Manager API בפרויקט ב-Google Cloud.
gcloud services enable aiplatform.googleapis.com
עכשיו Vertex AI API מופעל בפרויקט שלכם ב-Google Cloud.
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. מחליפים אותו במזהה הפרויקט.
- כדי לוודא שהתפקיד נוסף, עוברים לדף IAM. חשבון השירות שיצרתם אמור להופיע ברשימה יחד עם התפקיד שהוקצה לו.
7. יצירת הגדרות SDK ב-SAP
אחרי שהגדרתם את הדרישות המוקדמות בצד של Google Cloud, אפשר להמשיך להגדרה בצד של SAP. לצורך הגדרות שקשורות לאימות ולקישוריות, ה-ABAP SDK for Google Cloud משתמש בטבלאות /GOOG/CLIENT_KEY ו- /GOOG/SERVIC_MAP.
כדי לשמור על ההגדרה בטבלה /GOOG/CLIENT_KEY, מבצעים את השלבים הבאים:
- ב-SAP GUI, מזינים את קוד העסקה SPRO.
- לוחצים על SAP Reference IMG.
- לוחצים על ABAP SDK for Google Cloud > Basic Settings > Configure Client Key (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 | 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.
- כתובת ה-Host היא us-west4-aiplatform.googleapis.com, כי אנחנו מתייחסים למיקום us-west4-b ב-codelab.
למטה מופיע צילום מסך של יעד ה-RFC לעיונך.
כדי לשמור על ההגדרה בטבלה /GOOG/SERVIC_MAP, מבצעים את השלבים הבאים:
- ב-SAP GUI, מזינים את קוד העסקה SPRO.
- לוחצים על SAP Reference IMG.
- לוחצים על ABAP SDK for Google Cloud > Basic Settings > Configure Service Mapping (ערכת ה-SDK של ABAP ל-Google Cloud > הגדרות בסיסיות > הגדרת מיפוי שירותים).
- מזינים את הערכים הבאים בשדות:
שדה | תיאור |
שם המפתח ב-Google Cloud | VERTEX_AI_DEMO |
שם שירות Google | aiplatform:v1 |
יעד RFC | ZGOOG_VERTEXAI_V1 |
8. הפעלת PaLM 2 Text באמצעות ה-SDK
- מתחברים למערכת SAP.
- עוברים לקוד העסקה SE38 ויוצרים דוח בשם ZDEMO_VERTEX_AI.
- בחלון הקופץ שנפתח, מזינים את הפרטים כמו שמוצג למטה ולוחצים על שמירה.
בחלון הקופץ הבא, בוחרים באפשרות Local Object או מזינים שם חבילה לפי הצורך.
- בעורך ABAP, מוסיפים את קטע הקוד הבא:
- בקטע הקוד הזה, אנחנו מעבירים את תוכן האימייל של בקשה דחופה להזמנה כהנחיה, יחד עם הוראות לניתוח התוכן כדי לחלץ מאפייני הזמנה כמו שם הלקוח, שם החברה, תפקיד הלקוח, שם הפריט, כמות ההזמנה, כתובת למשלוח ותאריך אספקה.
- ההצהרות על סוגי 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.
- שומרים ומפעילים את תוכנית הדוחות.
- מריצים את הדוח (F8).
אם הביצוע יצליח, תראו את פלט הדוח כמו שמוצג למטה, עם מאפייני ההזמנה שחולצו לפי ההנחיות בהנחיה.
9. מזל טוב
מעולה! ביצעתם בהצלחה קריאה למודל הטקסט של Vertex AI PaLM 2 מתוכנית 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
מחיקת משאבים ספציפיים
- מוחקים את מכונת החישוב:
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