Google Cloud için ABAP SDK'sını kullanarak ABAP ortamınızdan Vertex AI LLM'yi çağırma

1. Giriş

Bu codelab'de, Google Cloud için ABAP SDK'yı kullanarak ABAP ortamınızdan Google Cloud Vertex AI'ın PaLM 2 Text (text-bison) temel modelini çağırma adımları listelenmiştir.

Bu codelab'de aşağıdaki Google Cloud hizmetleri kullanılmaktadır:

  • Vertex AI
  • Cloud Shell

Ne oluşturacaksınız?

Aşağıdakileri oluşturursunuz:

  • Google Cloud projesinde Vertex AI API'yi etkinleştirin.
  • Google Cloud için ABAP SDK'yı kullanarak Vertex AI'ın PaLM 2 Text modeline bir istem iletin ve yanıt alın.

2. Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi veya Google Cloud Platform için 90 günlük ücretsiz deneme hesabı oluşturun.
  • Sisteminizde yüklü SAP GUI (Windows veya Java) SAP GUI dizüstü bilgisayarınıza zaten yüklüyse Uygulama Sunucusu IP'si olarak VM'nin harici IP adresini kullanarak SAP'ye bağlanın. Mac kullanıyorsanız bu bağlantıda bulunan Java için SAP GUI'yi de yükleyebilirsiniz.

3. Başlamadan önce

6757b2fb50ddcc2d.png

  • Hesabınızın kimliğini doğrulamak ve varsayılan projeyi abap-sdk-poc olarak ayarlamak için aşağıdaki komutları çalıştırın. Örnek olarak us-west4-b bölgesi kullanılmıştır. Gerekirse lütfen aşağıdaki komutlarda projeyi ve bölgeyi tercihinize göre değiştirin.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Genel Bakış

Bu codelab'de kullanacağınız Vertex AI'daki bazı varlıkların kısa bir özetini aşağıda bulabilirsiniz:

  • Metin için PaLM 2: Metin için PaLM 2 (text-bison, text-unicorn) temel modelleri; yaklaşım analizi, varlık ayıklama ve içerik oluşturma gibi çeşitli doğal dil görevleri için optimize edilmiştir.
  • Text-bison: Text-bison, Google AI tarafından geliştirilen büyük bir dil modelidir (LLM). Bu model, dili anlayıp oluşturabilen bir üretken yapay zeka temel modelidir.

5. Google Cloud projenizde Vertex AI'ı etkinleştirme

  1. Google Cloud projenize gidin ve sağ üst köşedeki Cloud Shell'i Etkinleştir'i tıklayın.

8d15f753321c53e6.png

  1. Kabuk etkinleştirildikten sonra, Google Cloud projenizde Cloud Secret Manager API'sini etkinleştirmek için aşağıdaki komutu çalıştırın.
gcloud services enable aiplatform.googleapis.com

Artık Google Cloud projenizde Vertex AI API'yi etkinleştirmiş olmanız gerekir.

6. Kullanıcı rolleri içeren bir hizmet hesabı oluşturma

Gerekli rollerle bir hizmet hesabı oluşturmak için aşağıdaki adımları uygulayın:

  1. Cloud Shell terminalinde aşağıdaki komutu çalıştırın:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Şimdi API'ye erişmek için yukarıdaki adımda oluşturulan hizmet hesabına gerekli rolü ekleyin.
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'

Yukarıdaki komutlarda, Google Cloud projesi için şablon adı olarak abap-sdk-poc kullanılır. Bu değeri proje kimliğinizle değiştirin.

  1. Rolün eklendiğini doğrulamak için IAM sayfasına gidin. Oluşturduğunuz hizmet hesabı, kendisine atanmış rolle birlikte listelenmelidir.

7. SAP'de SDK yapılandırmaları oluşturma

Google Cloud tarafında ön koşulları ayarladığınıza göre, SAP tarafındaki yapılandırmaya geçebiliriz. Google Cloud için ABAP SDK'sı, kimlik doğrulama ve bağlantıyla ilgili yapılandırma için /GOOG/CLIENT_KEY ve /GOOG/SERVIC_MAP tablolarını kullanır.

/GOOG/CLIENT_KEY tablosundaki yapılandırmayı korumak için aşağıdaki adımları uygulayın:

  1. SAP GUI'de SPRO işlem kodunu girin.
  2. SAP Reference IMG'yi (SAP Referans IMG) tıklayın.
  3. Google Cloud için ABAP SDK'sı > Temel Ayarlar > İstemci Anahtarını Yapılandır'ı tıklayın.
  4. Alanlara göre aşağıdaki değerleri koruyun:

Alan

Açıklama

Google Cloud Anahtar Adı

VERTEX_AI_DEMO

Google Cloud hizmet hesabı adı

abap-sdk-vertexai-tester@abap-sdk-poc.iam.gserviceaccount.com

Google Cloud Kapsamı

https://www.googleapis.com/auth/cloud-platform

Google Cloud Proje Tanımlayıcısı

abap-sdk-poc

Yetkilendirme sınıfı

/GOOG/CL_AUTH_GOOGLE

Diğer alanları boş bırakın

Vertex AI'ın bölgeye özel uç noktaları vardır. Uç nokta için bir RFC hedefi oluşturmamız ve istemci anahtarına karşı /GOOG/SERVIC_MAP tablosunda API için eşlemeyi oluşturmamız gerekir. (Vertex AI için bölgeye özel hizmet uç noktaları hakkında bilgi edinmek üzere bu bağlantıyı inceleyin.)

Codelab için RFC oluşturma adımları aşağıda verilmiştir.

  • SM59 işlem koduna gidin ve "G" türünde bir bağlantı oluşturun.
  • Hedefin adını "ZGOOG_VERTEXAI_V1" olarak girin.
  • Gerekli açıklamaları ve bağlantı noktasını "443" olarak girin.
  • Codelab'de "us-west4-b" konumundan bahsettiğimiz için "Ana Makine" adresini "us-west4-aiplatform.googleapis.com" olarak girin.

Referans olarak kullanabileceğiniz RFC hedefinin ekran görüntüsünü aşağıda bulabilirsiniz.

54316c5de58624c7.png

/GOOG/SERVIC_MAP tablosundaki yapılandırmayı korumak için aşağıdaki adımları uygulayın:

  1. SAP GUI'de SPRO işlem kodunu girin.
  2. SAP Reference IMG'yi (SAP Referans IMG) tıklayın.
  3. Google Cloud için ABAP SDK > Temel Ayarlar > Hizmet Eşlemeyi Yapılandır'ı tıklayın.
  4. Alanlara göre aşağıdaki değerleri koruyun:

Alan

Açıklama

Google Cloud Anahtar Adı

VERTEX_AI_DEMO

Google Hizmetinin Adı

aiplatform:v1

RFC Destination

ZGOOG_VERTEXAI_V1

8. SDK'yı kullanarak PaLM 2 Text'i çağırma

  1. SAP sisteminize giriş yapın.
  2. SE38 işlem koduna gidin ve "ZDEMO_VERTEX_AI" adlı bir rapor oluşturun.
  3. Açılan pop-up'ta aşağıdaki gibi ayrıntıları girin ve Kaydet'i tıklayın.

b06fda1a879290f7.png

Sonraki pop-up pencerede Yerel Nesne'yi seçin veya uygun bir paket adı girin.

  1. ABAP Düzenleyici'ye aşağıdaki kod snippet'ini ekleyin:
  • Bu snippet'te istem olarak, acil bir sipariş isteğiyle ilgili e-posta içeriği, ayrıştırılarak Müşteri Adı, Şirket Adı, Müşteri Unvanı, Ürün Adı, Sipariş Miktarı, Kargo Adresi ve Teslimat Tarihi gibi sipariş özelliklerinin çıkarılması talimatlarıyla birlikte iletiliyor.
  • ABAP türü bildirimleri, buradaki belgelere göre Vertex AI PaLM 2 Text modelinden gelen yanıtı yakalamak ve istek için hazırlamak üzere kullanılır.
* 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. Rapor programını kaydedip etkinleştirin.
  2. Raporu çalıştırın (F8).

Başarılı bir yürütme işleminden sonra, istemde belirtildiği şekilde çıkarılan sipariş özellikleriyle birlikte rapor çıktısını aşağıdaki gibi görmeniz gerekir.

c40839b43b8ac44f.png

9. Tebrikler

Tebrikler! Google Cloud için ABAP SDK'yı kullanarak bir sipariş isteğini ayrıştırmak üzere ABAP programınızdan Vertex AI PaLM 2 Text modelini başarıyla çağırdınız.

Sabit kodlama yerine, Google Cloud için ABAP SDK'yı kullanarak e-posta içeriğini Gmail gelen kutunuzdan almayı ve ardından bu codelab'de açıklandığı gibi içeriği Vertex AI'a iletmeyi de düşünebilirsiniz.

10. Temizleme

Google Cloud için ABAP SDK ile ilgili ek codelab'lere devam etmek istemiyorsanız lütfen temizleme işlemine geçin.

Projeyi silme

  • Google Cloud projesini silin:
gcloud projects delete abap-sdk-poc

Belirli kaynakları silme

  1. Compute örneğini silin:
gcloud compute instances delete abap-trial-docker
  1. Güvenlik duvarı kurallarını silin:
gcloud compute firewall-rules delete sapmachine
  1. Hizmet hesabını silin:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com