Chiama Vertex AI LLM dal tuo ambiente ABAP con l'SDK ABAP per Google Cloud

1. Introduzione

In questo codelab abbiamo elencato i passaggi per chiamare il modello di base PaLM 2 Text (text-bison) di Google Cloud Vertex AI dal tuo ambiente ABAP utilizzando l'SDK ABAP per Google Cloud.

In questo codelab vengono utilizzati i seguenti servizi Google Cloud:

  • Vertex AI
  • Cloud Shell

Cosa creerai

Dovrai creare quanto segue:

  • Abilita l'API Vertex AI in un progetto Google Cloud.
  • Passa un prompt al modello di testo PaLM 2 di Vertex AI e ricevi la risposta utilizzando l'SDK ABAP per Google Cloud.

2. Requisiti

  • Un browser, ad esempio Chrome o Firefox.
  • Un progetto Google Cloud con la fatturazione abilitata o crea un account di prova senza costi di 90 giorni per la piattaforma Google Cloud.
  • SAP GUI (Windows o Java) installato nel sistema. Se SAP GUI è già installato sul tuo laptop, connettiti a SAP utilizzando l'indirizzo IP esterno della VM come indirizzo IP del server di applicazioni. Se utilizzi un Mac, puoi anche installare SAP GUI per Java disponibile in questo link.

3. Prima di iniziare

6757b2fb50ddcc2d.png

  • Esegui i seguenti comandi per autenticarti per il tuo account e impostare il progetto predefinito su abap-sdk-poc. La zona us-west4-b viene utilizzata come esempio. Se necessario, modifica il progetto e la zona nei comandi seguenti in base alle tue preferenze.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Panoramica

Ecco una breve panoramica di alcune delle entità di Vertex AI con cui lavorerai in questo codelab:

  • PaLM 2 per testo: i modelli di base PaLM 2 per testo (text-bison, text-unicorn) sono ottimizzati per una serie di attività di linguaggio naturale come analisi del sentiment, estrazione di entità e creazione di contenuti.
  • Text-bison: Text-bison è un modello linguistico di grandi dimensioni (LLM) sviluppato dall'IA di Google. È un modello di base per l'IA generativa in grado di comprendere e generare un linguaggio.

5. Abilita Vertex AI nel tuo progetto Google Cloud

  1. Vai al tuo progetto Google Cloud e fai clic su Attiva Cloud Shell nell'angolo in alto a destra.

8d15f753321c53e6.png

  1. Una volta attivata la shell, esegui il comando seguente per abilitare l'API Cloud Secret Manager nel tuo progetto Google Cloud.
gcloud services enable aiplatform.googleapis.com

Ora l'API Vertex AI dovrebbe essere abilitata nel tuo progetto Google Cloud.

6. Creare un account di servizio con ruoli utente

Per creare un account di servizio con i ruoli richiesti, svolgi i seguenti passaggi:

  1. Esegui questo comando nel terminale Cloud Shell:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Ora aggiungi il ruolo richiesto all'account di servizio creato nel passaggio precedente per accedere all'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'

I comandi precedenti utilizzano abap-sdk-poc come nome del modello per il progetto Google Cloud. Sostituiscilo con l'ID del tuo progetto.

  1. Per verificare che il ruolo sia stato aggiunto, vai alla pagina IAM. L'account di servizio che hai creato dovrebbe essere elencato insieme al ruolo che gli è stato assegnato.

7. Creare configurazioni dell'SDK in SAP

Ora che hai configurato i prerequisiti lato Google Cloud, possiamo procedere con la configurazione lato SAP. Per la configurazione relativa all'autenticazione e alla connettività, l'SDK ABAP per Google Cloud utilizza le tabelle /GOOG/CLIENT_KEY e /GOOG/SERVIC_MAP.

Per mantenere la configurazione nella tabella /GOOG/CLIENT_KEY, svolgi i seguenti passaggi:

  1. In SAP GUI, inserisci il codice transazione SPRO.
  2. Fai clic su SAP Reference IMG (Immagine di riferimento SAP).
  3. Fai clic su ABAP SDK for Google Cloud > Impostazioni di base > Configura chiave client.
  4. Mantieni i seguenti valori per i campi:

Campo

Descrizione

Nome della chiave Google Cloud

VERTEX_AI_DEMO

Nome dell'account di servizio Google Cloud

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

Ambito Google Cloud

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

Identificatore del progetto Google Cloud

abap-sdk-poc

Classe di autorizzazione

/GOOG/CL_AUTH_GOOGLE

Lascia vuoti gli altri campi

Vertex AI ha endpoint specifici per regione, quindi dobbiamo creare una destinazione RFC per l'endpoint e creare la mappatura per l'API nella tabella /GOOG/SERVIC_MAP in base alla chiave client. (fai riferimento a questo link per gli endpoint di servizio specifici per regione di Vertex AI).

Di seguito sono riportati i passaggi per creare una richiesta di feedback per il codelab.

  • Vai al codice transazione SM59 e crea una connessione di tipo "G".
  • Assegna il nome "ZGOOG_VERTEXAI_V1" alla destinazione.
  • Fornisci le descrizioni richieste e la porta "443".
  • Specifica l'indirizzo "Host" come "us-west4-aiplatform.googleapis.com" perché ci riferiamo alla località "us-west4-b" nel codelab.

Di seguito è riportato uno screenshot della destinazione RFC come riferimento.

54316c5de58624c7.png

Per mantenere la configurazione nella tabella /GOOG/SERVIC_MAP, svolgi i seguenti passaggi:

  1. In SAP GUI, inserisci il codice transazione SPRO.
  2. Fai clic su SAP Reference IMG (Immagine di riferimento SAP).
  3. Fai clic su ABAP SDK for Google Cloud > Impostazioni di base > Configura mappatura dei servizi.
  4. Mantieni i seguenti valori per i campi:

Campo

Descrizione

Nome della chiave Google Cloud

VERTEX_AI_DEMO

Nome del servizio Google

aiplatform:v1

Destinazione RFC

ZGOOG_VERTEXAI_V1

8. Richiamare PaLM 2 Text utilizzando l'SDK

  1. Accedi al sistema SAP.
  2. Vai al codice transazione SE38 e crea un report con il nome "ZDEMO_VERTEX_AI".
  3. Nella finestra popup visualizzata, fornisci i dettagli come mostrato di seguito e fai clic su Salva.

b06fda1a879290f7.png

Nel popup successivo, seleziona Oggetto locale o fornisci un nome del pacchetto, a seconda dei casi.

  1. Nell'editor ABAP, aggiungi il seguente snippet di codice:
  • In questo snippet, come prompt, stiamo passando i contenuti dell'email per una richiesta di ordine urgente insieme alle istruzioni per analizzarla al fine di estrarre gli attributi dell'ordine, come Nome cliente, Nome dell'azienda, Designazione cliente, Nome articolo, Quantità ordine, Indirizzo di spedizione e Data di consegna.
  • Le dichiarazioni dei tipi ABAP servono a preparare la richiesta e acquisire la risposta dal modello di testo PaLM 2 di Vertex AI, come indicato nella documentazione qui.
* 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. Salva e attiva il programma di report.
  2. Esegui il report (F8).

Al termine dell'esecuzione, dovresti visualizzare l'output del report come mostrato di seguito con gli attributi dell'ordine estratti come indicato nel prompt.

c40839b43b8ac44f.png

9. Complimenti

Complimenti! Hai chiamato correttamente il modello di testo Vertex AI PaLM 2 dal tuo programma ABAP per analizzare una richiesta di ordine utilizzando l'SDK ABAP per Google Cloud.

Anziché utilizzare la programmazione a livello di codice, puoi anche pensare di recuperare i contenuti delle email dalla Posta in arrivo di Gmail utilizzando l'SDK ABAP per Google Cloud e poi passare i contenuti a Vertex AI come descritto in questo codelab.

10. Esegui la pulizia

Se non vuoi continuare con i codelab aggiuntivi relativi all'SDK ABAP per Google Cloud, procedi con la pulizia.

Eliminare il progetto

  • Elimina il progetto Google Cloud:
gcloud projects delete abap-sdk-poc

Eliminare singole risorse

  1. Elimina l'istanza di calcolo:
gcloud compute instances delete abap-trial-docker
  1. Elimina le regole firewall:
gcloud compute firewall-rules delete sapmachine
  1. Elimina l'account di servizio:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com