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

1. Wprowadzenie

W tym laboratorium programistycznym znajdziesz instrukcje wywoływania modelu podstawowego PaLM 2 Text (text-bison) Google Cloud Vertex AI z otoczenia ABAP za pomocą pakietu ABAP SDK dla Google Cloud.

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

  • Vertex AI
  • Cloud Shell

Co utworzysz

Utwórz:

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

2. Wymagania

  • przeglądarkę, np. Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami lub utwórz konto na 90-dniowy okres próbny w Google Cloud Platform.
  • interfejs graficzny SAP (wersja na system Windows lub Java) zainstalowany w systemie; Jeśli interfejs 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 używasz komputera Mac, możesz też zainstalować interfejs SAP dla Javy, który jest dostępny pod tym linkiem.

3. Zanim zaczniesz

6757b2fb50ddcc2d.png

  • Uruchom te polecenia, aby uwierzytelnić swoje konto i ustawić projekt domyślny jako abap-sdk-poc. W tym przykładzie użyto strefy us-west4-b. W razie potrzeby zmień projekt i strefę w poniższych poleceniach zgodnie ze swoimi preferencjami.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Omówienie

Oto krótki opis niektórych typów obiektów Vertex AI, z którymi będziesz pracować w tym ćwiczeniu:

  • 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: Text-bison to duży model językowy (LLM) opracowany przez Google AI. Jest to model podstawowy generatywnej AI, który rozumie i potrafi generować język.

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 uruchom podane niżej polecenie, aby włączyć interfejs Cloud Secret Manager API 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 wymaganą rolę do konta usługi utworzonego w powyższym kroku, 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 jako nazwa szablonu projektu Google Cloud jest używana nazwa abap-sdk-poc. Zastąp go identyfikatorem projektu.

  1. Aby sprawdzić, czy dodano rolę, otwórz stronę IAM. Utworzone konto usługi powinno być wymienione wraz z przypisaną do niego rolą.

7. Tworzenie konfiguracji pakietu SDK w SAP

Ponieważ masz już skonfigurowane wymagania wstępne 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 używa tabel /GOOG/CLIENT_KEY i /GOOG/SERVIC_MAP.

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

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

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

Pozostałe pola pozostaw puste

Vertex AI ma punkty końcowe w konkretnych regionach, więc musimy utworzyć dla nich miejsce docelowe RFC i mapowanie interfejsu API w tabeli /GOOG/SERVIC_MAP względem klucza klienta. (Punkty końcowe usług Vertex AI w poszczególnych regionach znajdziesz tutaj ).

Poniżej znajdziesz instrukcje tworzenia zgłoszenia RFC dotyczącego tego problemu.

  • Otwórz kod transakcji SM59 i utwórz połączenie typu „G”.
  • Nazwij miejsce docelowe „ZGOOG_VERTEXAI_V1”.
  • Wpisz wymagane opisy i port „443”.
  • W polu „Host” wpisz „us-west4-aiplatform.googleapis.com”, ponieważ w tym przypadku odnosimy się do lokalizacji „us-west4-b” w codelab.

Poniżej znajdziesz zrzut ekranu miejsca docelowego RFC.

54316c5de58624c7.png

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

  1. W interfejsie graficznym SAP wpisz kod transakcji SPRO.
  2. Kliknij SAP Reference IMG (Referencyjny obraz SAP).
  3. Kliknij ABAP SDK for Google Cloud > Basic Settings > Configure Service Mapping (ABAP SDK for Google Cloud > Ustawienia podstawowe > Skonfiguruj mapowanie usługi).
  4. Zachowaj te wartości w polach:

Pole

Opis

Nazwa klucza Google Cloud

VERTEX_AI_DEMO

Nazwa usługi Google

aiplatform:v1

Miejsce docelowe RFC

ZGOOG_VERTEXAI_V1

8. Wywoływanie usługi 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 informacje, jak pokazano poniżej, i kliknij Zapisz.

b06fda1a879290f7.png

W wyskakującym okienku wybierz Obiekt lokalny lub podaj nazwę pakietu.

  1. W edytorze ABAP dodaj ten fragment kodu:
  • W tym fragmencie przekazujemy treść e-maila z prośbą o pilne zamówienie wraz z instrukcjami analizowania, aby wyodrębnić atrybuty zamówienia, takie jak imię i nazwisko klienta, nazwa firmy, nazwa produktu, ilość zamówienia, adres dostawy i data dostawy.
  • Deklaracje typów ABAP służą do przygotowywania żądań i przechwytywania odpowiedzi z modelu tekstowego PaLM 2 Vertex AI zgodnie z dokumentacją 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 pomyślnym wykonaniu polecenia powinieneś zobaczyć dane wyjściowe raportu, jak pokazano poniżej, z wyodrębnionymi atrybutami zamówienia zgodnie z instrukcjami wyświetlonymi w promptzie.

c40839b43b8ac44f.png

9. Gratulacje

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

Zamiast twardego kodowania możesz też pobrać treść e-maila ze skrzynki odbiorczej Gmaila za pomocą pakietu ABAP SDK dla Google Cloud, a następnie przekazać go do Vertex AI w sposób opisany w tym CodeLab.

10. Czyszczenie danych

Jeśli nie chcesz kontynuować dodatkowych samouczków związanych z pakietem ABAP SDK dla Google Cloud, przejdź do 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