1. Giriş
Bu kod laboratuvarında, Google Cloud için ABAP SDK'sını kullanarak Google Cloud Vertex AI'ın PaLM 2 Text (text-bison) temel modelini ABAP ortamınızdan çağırmayla ilgili adımları listeledik.
Bu kod laboratuvarında 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.
- Vertex AI'ın PaLM 2 metin modeline bir istem gönderin ve Google Cloud için ABAP SDK'sını kullanarak 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 SAP GUI (Windows veya Java) yüklü olmalıdır. SAP GUI dizüstü bilgisayarınızda zaten yüklüyse uygulama sunucusu IP'si olarak sanal makinenin harici IP adresini kullanarak SAP'e 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
- Sisteminize Google Cloud için ABAP SDK'yı yüklemiş olmanız gerekir. Yeni bir sistem oluşturmak için Google Cloud Platform'a ABAP Platform 1909 Deneme Sürümü'nü ve ABAP SDK'sını Yükleme kod laboratuvarına göz atabilirsiniz.
- Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Cloud Console'da sağ üst köşedeki Cloud Shell'i etkinleştir'i tıklayın:
- 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 olarakus-west4-b
bölgesi kullanılmıştır. Gerekirse lütfen aşağıdaki komutlardaki 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 kod laboratuvarında kullanacağınız Vertex AI varlıklarından bazılarına kısaca göz atın:
- 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ştirilmiş bir büyük dil modelidir (LLM). Üretken yapay zeka için dili anlayıp oluşturabilen temel bir modeldir.
5. Google Cloud projenizde Vertex AI'ı etkinleştirme
- Google Cloud projenize gidin ve sağ üst köşedeki Cloud Shell'i etkinleştir'i tıklayın.
- Kabuk etkinleştirildikten sonra, Google Cloud projenizde Cloud Secret Manager API'sini etkinleştirmek için aşağıdaki komutu yürütü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 rollere sahip bir hizmet hesabı oluşturmak için aşağıdaki adımları uygulayın:
- 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"
- Artık 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ılmaktadır. Bu değeri proje kimliğinizle değiştirin.
- Rolün eklendiğini doğrulamak için IAM sayfasına gidin. Oluşturduğunuz hizmet hesabı, kendisine atanan rolle birlikte listelenir.
7. SAP'te SDK yapılandırmaları oluşturma
Google Cloud tarafındaki ön koşulları ayarladığınıza göre SAP tarafında yapılandırma işlemine 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:
- SAP GUI'ye SPRO işlem kodunu girin.
- SAP Reference IMG'yi (SAP Referans IMG'si) tıklayın.
- Google Cloud için ABAP SDK'sı > Temel Ayarlar > İstemci Anahtarını Yapılandır'ı tıklayın.
- Alanlarda 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 özgü uç noktaları vardır. Uç nokta için bir RFC hedefi oluşturmamız ve /GOOG/SERVIC_MAP tablosunda istemci anahtarına göre API eşlemesini oluşturmamız gerekir. (Vertex AI'ın bölgeye özel hizmet uç noktaları için bu bağlantıya bakın).
Codelab için RFC oluşturma adımları aşağıda verilmiştir.
- SM59 işlem koduna gidin ve "G" türü bir bağlantı oluşturun.
- Hedefin adını "ZGOOG_VERTEXAI_V1" olarak girin.
- Açıklamaları gerektiği gibi, bağlantı noktasını ise "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.
/GOOG/SERVIC_MAP tablosundaki yapılandırmayı korumak için aşağıdaki adımları uygulayın:
- SAP GUI'ye SPRO işlem kodunu girin.
- SAP Reference IMG'yi (SAP Referans IMG'si) tıklayın.
- Google Cloud için ABAP SDK'sı > Temel Ayarlar > Hizmet Eşlemesini Yapılandır'ı tıklayın.
- Alanlarda aşağıdaki değerleri koruyun:
Alan | Açıklama |
Google Cloud Anahtar Adı | VERTEX_AI_DEMO |
Google Hizmeti Adı | aiplatform:v1 |
RFC Hedefi | ZGOOG_VERTEXAI_V1 |
8. SDK'yı kullanarak PaLM 2 metnini çağırma
- SAP sisteminize giriş yapın.
- SE38 işlem koduna gidin ve "ZDEMO_VERTEX_AI" adlı bir rapor oluşturun.
- Açılan pop-up'ta aşağıdaki gibi ayrıntıları sağlayın ve Kaydet'i tıklayın.
Sonraki pop-up'ta Yerel Nesne'yi seçin veya uygun bir paket adı girin.
- ABAP Düzenleyici'ye aşağıdaki kod snippet'ini ekleyin:
- Bu snippet'te, acil sipariş isteğiyle ilgili e-posta içeriğini istem olarak iletmekteyiz. Ayrıca, müşteri adı, şirket adı, müşteri unvanı, öğe adı, sipariş miktarı, gönderim adresi ve teslimat tarihi gibi sipariş özelliklerini ayıklamak için bu içeriği ayrıştırma talimatlarını da iletmekteyiz.
- ABAP tür beyanları, buradaki dokümanlara göre Vertex AI PaLM 2 metin modelinden istek hazırlamak ve yanıt almak içindir.
* 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.
- Rapor programını kaydedip etkinleştirin.
- Raporu çalıştırın (F8).
Başarılı bir yürütme işleminde, istemde belirtilen şekilde ayıklanan sipariş özellikleriyle birlikte aşağıdaki gibi rapor çıkışını görürsünüz.
9. Tebrikler
Tebrikler! Google Cloud için ABAP SDK'sını kullanarak bir sipariş isteğini ayrıştırmak için ABAP programınızdan Vertex AI PaLM 2 metin modelini başarıyla çağırdınız.
Sabit kodlama yerine, Google Cloud için ABAP SDK'sını kullanarak Gmail gelen kutunuzda e-posta içeriğini alıp bu kod laboratuvarının açıklandığı şekilde içeriği Vertex AI'a iletmeyi de düşünebilirsiniz.
10. Temizleme
Google Cloud için ABAP SDK'sıyla ilgili ek kod laboratuvarlarına devam etmek istemiyorsanız lütfen temizleme işlemine devam edin.
Projeyi silme
- Google Cloud projesini silin:
gcloud projects delete abap-sdk-poc
Kaynakları tek tek silme
- Hesaplama örneğini silin:
gcloud compute instances delete abap-trial-docker
- Güvenlik duvarı kurallarını silin:
gcloud compute firewall-rules delete sapmachine
- Hizmet hesabını silin:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com