با ABAP SDK برای Google Cloud از محیط ABAP خود با Vertex AI LLM تماس بگیرید

1. مقدمه

در این لبه کد، ما مراحل نحوه فراخوانی مدل پایه متنی (Text-bison) Google Cloud Vertex AI را از محیط ABAP با استفاده از ABAP SDK برای Google Cloud فهرست کرده‌ایم.

خدمات Google Cloud زیر در این کد لبه استفاده می شود:

  • Vertex AI
  • پوسته ابری

چیزی که خواهی ساخت

شما موارد زیر را ایجاد خواهید کرد:

  • Vertex AI API را در پروژه Google Cloud فعال کنید.
  • یک درخواست را به مدل نوشتاری PalM 2 Vertex AI ارسال کنید و با استفاده از ABAP SDK برای Google Cloud پاسخ دریافت کنید.

2. الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس .
  • یک پروژه Google Cloud با فعال کردن صورت‌حساب یا ایجاد یک حساب آزمایشی رایگان 90 روزه برای Google Cloud Platform.
  • SAP GUI (ویندوز یا جاوا) در سیستم شما نصب شده است. اگر SAP GUI قبلاً روی لپ‌تاپ شما نصب شده است، با استفاده از آدرس IP خارجی VM به عنوان IP سرور برنامه، به SAP متصل شوید. اگر در مک هستید، می توانید SAP GUI برای جاوا را نیز در این لینک نصب کنید.

3. قبل از شروع

6757b2fb50ddcc2d.png

  • دستورات زیر را برای احراز هویت برای حساب خود اجرا کنید و پروژه پیش فرض را روی abap-sdk-poc تنظیم کنید. Zone 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 for Text: مدل های پایه PaLM 2 for Text (متن-گاومیش کوهان دار، متن-تک شاخ) برای انواع وظایف زبان طبیعی مانند تجزیه و تحلیل احساسات، استخراج موجودیت و ایجاد محتوا بهینه شده اند.
  • Text-bison: Text-bison یک مدل زبان بزرگ (LLM) است که توسط هوش مصنوعی گوگل توسعه یافته است. این یک مدل اساسی برای GenAI است که می تواند زبان را درک و تولید کند.

5. Vertex AI را در پروژه Google Cloud خود فعال کنید

  1. به پروژه Google Cloud خود بروید و روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید.

8d15f753321c53e6.png

  1. پس از فعال شدن پوسته، دستور زیر را برای فعال کردن 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 > 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 Scope

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" پورت کنید.
  • آدرس "Host" را به عنوان " 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 > Basic Settings > Configure Service Mapping کلیک کنید.
  4. مقادیر زیر را در برابر فیلدها حفظ کنید:

میدان

توضیحات

نام کلید Google Cloud

VERTEX_AI_DEMO

نام سرویس گوگل

aiplatform:v1

مقصد RFC

ZGOOG_VERTEXAI_V1

8. متن PalM 2 را با استفاده از 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 Text را از برنامه ABAP خود برای تجزیه درخواست سفارش با استفاده از ABAP SDK برای Google Cloud فراخوانی کردید.

به‌جای کدنویسی سخت، می‌توانید با استفاده از 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. قوانین فایروال را حذف کنید:
gcloud compute firewall-rules delete sapmachine
  1. حساب سرویس را حذف کنید:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com