Wywoływanie modelu LLM Vertex AI z otoczenia ABAP za pomocą pakietu ABAP SDK for Google Cloud

1. Wprowadzenie

W tym module znajdziesz instrukcje wywoływania modelu podstawowego PaLM 2 Text (text-bison)Google Cloud Vertex AI w środowisku ABAP za pomocą ABAP SDK for Google Cloud.

W tym module używane są te usługi Google Cloud:

  • Vertex AI
  • Cloud Shell

Co utworzysz

Utworzysz:

  • włączyć Vertex AI API w projekcie Google Cloud;
  • Przekaż prompt do modelu tekstowego PaLM 2 w Vertex AI i otrzymaj odpowiedź za pomocą ABAP SDK for Google Cloud.

2. Wymagania

  • przeglądarka, np. Chrome lub Firefox;
  • Projekt Google Cloud z włączonym rozliczeniem lub utwórz 90-dniowe konto próbne w Google Cloud Platform.
  • SAP GUI (Windows lub Java) zainstalowany w systemie. Jeśli SAP GUI jest już zainstalowany na laptopie, połącz się z SAP, używając zewnętrznego adresu IP maszyny wirtualnej jako adresu IP serwera aplikacji. Jeśli korzystasz z komputera Mac, możesz też zainstalować interfejs SAP GUI dla Javy, który jest dostępny pod tym linkiem.

3. Zanim zaczniesz

6757b2fb50ddcc2d.png

  • Uruchom te polecenia, aby uwierzytelnić się na koncie i ustawić domyślny projekt na abap-sdk-poc. Jako przykładu używamy strefy us-west4-b. W razie potrzeby zmień projekt i strefę w tych poleceniach zgodnie ze swoimi preferencjami.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Przegląd

Oto krótkie omówienie niektórych elementów Vertex AI, z którymi będziesz pracować w tym module:

  • PaLM 2 for Text: modele podstawowe PaLM 2 for Text (text-bison, text-unicorn) są zoptymalizowane pod kątem różnych zadań związanych z językiem naturalnym, takich jak analiza nastawienia, ekstrakcja encji i tworzenie treści.
  • Text-bison: to duży model językowy (LLM) opracowany przez Google AI. Jest to model podstawowy generatywnej AI, który rozumie język i potrafi generować w nim wypowiedzi.

5. Włączanie Vertex AI w projekcie Google Cloud

  1. Otwórz projekt Google Cloud i w prawym górnym rogu kliknij Aktywuj Cloud Shell.

8d15f753321c53e6.png

  1. Po aktywowaniu powłoki wykonaj poniższe polecenie, aby włączyć interfejs API Cloud Secret Manager w projekcie Google Cloud.
gcloud services enable aiplatform.googleapis.com

Interfejs Vertex AI API powinien być teraz włączony w projekcie Google Cloud.

6. Tworzenie konta usługi z rolami użytkowników

Aby utworzyć konto usługi z wymaganymi rolami, wykonaj te czynności:

  1. Uruchom w terminalu Cloud Shell to polecenie:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Teraz dodaj do konta usługi utworzonego w poprzednim kroku wymaganą rolę, aby uzyskać dostęp do interfejsu 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'

W powyższych poleceniach nazwa szablonu projektu Google Cloud to abap-sdk-poc. Zastąp go identyfikatorem projektu.

  1. Aby sprawdzić, czy rola została dodana, otwórz stronę IAM. Utworzone konto usługi powinno być widoczne wraz z przypisaną do niego rolą.

7. Tworzenie konfiguracji pakietu SDK w SAP

Po skonfigurowaniu wymagań wstępnych po stronie Google Cloud możemy przejść do konfiguracji po stronie SAP. W przypadku konfiguracji związanej z uwierzytelnianiem i łącznością pakiet ABAP SDK for Google Cloud korzysta z tabel /GOOG/CLIENT_KEY i /GOOG/SERVIC_MAP.

Aby zachować konfigurację w tabeli /GOOG/CLIENT_KEY, wykonaj te czynności:

  1. W SAP GUI wpisz kod transakcji SPRO.
  2. Kliknij SAP Reference IMG (SAP Reference IMG).
  3. Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj klucz klienta.
  4. W polach zachowaj te wartości:

Pole

Opis

Nazwa klucza Google Cloud

VERTEX_AI_DEMO

Nazwa konta usługi Google Cloud

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

Zakres Google Cloud

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

Identyfikator projektu Google Cloud

abap-sdk-poc

Klasa autoryzacji

/GOOG/CL_AUTH_GOOGLE

Pozostaw pozostałe pola puste.

Vertex AI ma punkty końcowe specyficzne dla regionu, więc musimy utworzyć miejsce docelowe RFC dla punktu końcowego i zbudować mapowanie interfejsu API w tabeli /GOOG/SERVIC_MAP względem klucza klienta. (Punkty końcowe usług Vertex AI w poszczególnych regionach znajdziesz pod tym linkiem).

Poniżej znajdziesz instrukcje tworzenia RFC na potrzeby codelabu.

  • Otwórz kod transakcji SM59 i utwórz połączenie typu „G”.
  • Podaj nazwę miejsca docelowego jako „ZGOOG_VERTEXAI_V1”.
  • Podaj wymagane opisy i port „443”.
  • W przypadku adresu „Host” podaj „us-west4-aiplatform.googleapis.com”, ponieważ w tym module używamy lokalizacji „us-west4-b”.

Poniżej znajdziesz zrzut ekranu miejsca docelowego RFC.

54316c5de58624c7.png

Aby zachować konfigurację w tabeli /GOOG/SERVIC_MAP, wykonaj te czynności:

  1. W SAP GUI wpisz kod transakcji SPRO.
  2. Kliknij SAP Reference IMG (SAP Reference IMG).
  3. Kliknij ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj mapowanie usług.
  4. W polach zachowaj te wartości:

Pole

Opis

Nazwa klucza Google Cloud

VERTEX_AI_DEMO

Nazwa usługi Google

aiplatform:v1

Miejsce docelowe RFC

ZGOOG_VERTEXAI_V1

8. Wywoływanie PaLM 2 Text za pomocą pakietu SDK

  1. Zaloguj się w systemie SAP.
  2. Otwórz kod transakcji SE38 i utwórz raport o nazwie „ZDEMO_VERTEX_AI”.
  3. W wyświetlonym okienku podaj szczegóły jak poniżej i kliknij Zapisz.

b06fda1a879290f7.png

W następnym wyskakującym okienku wybierz Local Object (Obiekt lokalny) lub podaj nazwę pakietu.

  1. W edytorze ABAP dodaj ten fragment kodu:
  • W tym fragmencie jako prompt przekazujemy treść e-maila z pilną prośbą o zamówienie wraz z instrukcjami dotyczącymi analizy, aby wyodrębnić atrybuty zamówienia, takie jak imię i nazwisko klienta, nazwa firmy, stanowisko klienta, nazwa produktu, ilość zamówienia, adres dostawy i data dostawy.
  • Deklaracje typów ABAP służą do przygotowania żądania i przechwycenia odpowiedzi z modelu tekstowego Vertex AI PaLM 2 zgodnie z dokumentacją dostępną tutaj.
* 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. Zapisz i aktywuj program raportowania.
  2. Wykonaj raport (F8).

Po udanym wykonaniu zobaczysz dane wyjściowe raportu, jak pokazano poniżej, z wyodrębnionymi atrybutami zamówienia zgodnie z instrukcjami w prompcie.

c40839b43b8ac44f.png

9. Gratulacje

Gratulacje! Udało Ci się wywołać model tekstowy Vertex AI PaLM 2 z programu ABAP, aby przeanalizować prośbę o zamówienie za pomocą ABAP SDK for Google Cloud.

Zamiast kodowania na stałe możesz też pobrać treść e-maila ze skrzynki odbiorczej Gmaila za pomocą pakietu ABAP SDK for Google Cloud, a następnie przekazać ją do Vertex AI zgodnie z opisem w tym samouczku.

10. Czyszczenie danych

Jeśli nie chcesz kontynuować pracy z dodatkowymi ćwiczeniami dotyczącymi pakietu ABAP SDK do Google Cloud, przejdź do sekcji czyszczenia.

Usuwanie projektu

  • Usuń projekt Google Cloud:
gcloud projects delete abap-sdk-poc

Usuwanie poszczególnych zasobów

  1. Usuń instancję obliczeniową:
gcloud compute instances delete abap-trial-docker
  1. Usuń reguły zapory sieciowej:
gcloud compute firewall-rules delete sapmachine
  1. Usuń konto usługi:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com