استدعاء نموذج لغوي كبير في Vertex AI من بيئة ABAP باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud

1. مقدمة

في هذا الدرس التطبيقي، لقد أدرجنا الخطوات اللازمة لاستدعاء نموذج الأساس PaLM 2 Text (text-bison) في Google Cloud Vertex AI من بيئة ABAP باستخدام حزمة تطوير البرامج (SDK) ABAP لـ Google Cloud.

يتم استخدام خدمات Google Cloud التالية في هذا الدليل التعليمي:

  • Vertex AI
  • Cloud Shell

ما ستُنشئه

عليك إنشاء ما يلي:

  • فعِّل واجهة برمجة التطبيقات Vertex AI API في مشروع على Google Cloud.
  • يمكنك إرسال طلب إلى نموذج PaLM 2 Text في Vertex AI وتلقّي ردّ باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في 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- قبل البدء

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) طوّرته تكنولوجيات الذكاء الاصطناعي من Google. وهو نموذج أساسي للذكاء الاصطناعي التوليدي يمكنه فهم اللغة وإنشاؤها.

5- تفعيل Vertex AI في مشروعك على Google Cloud

  1. انتقِل إلى مشروعك على Google Cloud وانقر على "تفعيل Cloud Shell" في أعلى يسار الصفحة.

8d15f753321c53e6.png

  1. بعد تفعيل shell، نفِّذ الأمر أدناه لتفعيل واجهة برمجة التطبيقات 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. أضِف الآن الدور المطلوب إلى حساب الخدمة الذي تم إنشاؤه في الخطوة أعلاه للوصول إلى واجهة برمجة التطبيقات.
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. بالنسبة إلى الإعدادات ذات الصلة بالمصادقة والاتصال، يستخدم حِزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud جدولَي ‎ /GOOG/CLIENT_KEY و‎ /GOOG/SERVIC_MAP.

للحفاظ على الإعدادات في الجدول ‎ /GOOG/CLIENT_KEY، اتّبِع الخطوات التالية:

  1. في واجهة مستخدم SAP، أدخِل رمز المعاملة SPRO.
  2. انقر على SAP Reference IMG.
  3. انقر على حزمة تطوير برامج ABAP لـ 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 لنقطة النهاية وإنشاء التعيين لواجهة برمجة التطبيقات في الجدول ‎ /GOOG/SERVIC_MAP وفقًا لمفتاح العميل. (يُرجى الرجوع إلى هذا الرابط للاطّلاع على نقاط نهاية الخدمة الخاصة بمنطقة معيّنة في Vertex AI).

في ما يلي خطوات إنشاء طلب مراجعة للرمز البرمجي لجلسة التعلّم البرمجي.

  • انتقِل إلى رمز المعاملة SM59 وأنشئ اتصالاً من النوع "G".
  • أدخِل اسم الوجهة "ZGOOG_VERTEXAI_V1".
  • أدخِل الأوصاف المطلوبة والمنفذ على "443".
  • أدخِل عنوان "المضيف" على النحو التالي: " us-west4-aiplatform.googleapis.com" لأنّنا نشير إلى الموقع الجغرافي "us-west4-b" في ورشة رموز البرامج.

في ما يلي لقطة شاشة لوجهة RFC للرجوع إليها.

54316c5de58624c7.png

للحفاظ على الإعدادات في الجدول ‎ /GOOG/SERVIC_MAP، اتّبِع الخطوات التالية:

  1. في واجهة مستخدم SAP، أدخِل رمز المعاملة SPRO.
  2. انقر على SAP Reference IMG.
  3. انقر على حزمة تطوير البرامج ABAP لـ Google Cloud ‏ > الإعدادات الأساسية > ضبط تعيين الخدمات.
  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

في النافذة المنبثقة التالية، اختَر كائن محلي أو أدخِل اسم حزمة حسب الاقتضاء.

  1. في "محرر 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.
  1. احفظ برنامج التقارير وفعِّله.
  2. تنفيذ التقرير (F8).

عند تنفيذ الأمر بنجاح، من المفترض أن يظهر لك ناتج التقرير كما هو موضّح أدناه مع سمات الطلبات المستخرَجة كما هو موضّح في الطلب.

c40839b43b8ac44f.png

9. تهانينا

تهانينا! لقد استدعيت بنجاح نموذج Vertex AI PaLM 2 Text من برنامج ABAP لتحليل طلب طلب باستخدام حزمة تطوير البرامج (SDK) ABAP لـ Google Cloud.

بدلاً من الترميز الثابت، يمكنك أيضًا التفكير في الحصول على محتوى الرسالة الإلكترونية من بريدك الوارد في Gmail باستخدام حزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud، ثم تمرير المحتوى إلى Vertex AI كما هو موضّح في هذا الدليل التعليمي.

10. تَنظيم

إذا كنت لا تريد مواصلة استخدام مجموعات الاختبار البرمجي الإضافية المرتبطة بحزمة تطوير البرامج (SDK) لـ ABAP في Google Cloud، يُرجى المتابعة لتنظيف المساحة.

حذف المشروع

  • يُرجى اتّباع الخطوات التالية لحذف مشروع Google Cloud:
gcloud projects delete abap-sdk-poc

حذف موارد فردية

  1. حذف وحدة الحوسبة:
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