Vertex AI LLM mit dem ABAP SDK for Google Cloud aus Ihrer ABAP-Umgebung aufrufen

1. Einführung

In diesem Codelab finden Sie eine Anleitung zum Aufrufen des PaLM 2 Text (text-bison)-Basismodells von Google Cloud Vertex AI über Ihre ABAP-Umgebung mit dem ABAP SDK for Google Cloud.

In diesem Codelab werden die folgenden Google Cloud-Dienste verwendet:

  • Vertex AI
  • Cloud Shell

Aufgaben

Sie erstellen Folgendes:

  • Aktivieren Sie die Vertex AI API in einem Google Cloud-Projekt.
  • Sie übergeben eine Prompt an das PaLM 2-Textmodell von Vertex AI und erhalten eine Antwort mit dem ABAP SDK for Google Cloud.

2. Voraussetzungen

3. Hinweis

6757b2fb50ddcc2d.png

  • Führen Sie die folgenden Befehle aus, um sich für Ihr Konto zu authentifizieren und das Standardprojekt auf abap-sdk-poc festzulegen. Als Beispiel wird Zone us-west4-b verwendet. Ändern Sie bei Bedarf das Projekt und die Zone in den folgenden Befehlen entsprechend Ihren Anforderungen.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Übersicht

Hier finden Sie eine kurze Übersicht über einige der Entitäten in Vertex AI, mit denen Sie in diesem Codelab arbeiten werden:

  • PaLM 2 for Text: Die PaLM 2 for Text-Foundation-Models (Text-Bison, Text-Einhorn) sind für eine Vielzahl von Natural-Language-Aufgaben wie Sentimentanalyse, Entitätsextraktion und Inhaltserstellung optimiert.
  • Text-Bison: Text-Bison ist ein Large Language Model (LLM), das von Google AI entwickelt wurde. Es ist ein grundlegendes Modell für generative KI, das Sprache verstehen und generieren kann.

5. Vertex AI in Ihrem Google Cloud-Projekt aktivieren

  1. Rufen Sie Ihr Google Cloud-Projekt auf und klicken Sie rechts oben auf „Cloud Shell aktivieren“.

8d15f753321c53e6.png

  1. Führen Sie nach der Aktivierung der Shell den folgenden Befehl aus, um die Cloud Secret Manager API in Ihrem Google Cloud-Projekt zu aktivieren.
gcloud services enable aiplatform.googleapis.com

Die Vertex AI API sollte jetzt in Ihrem Google Cloud-Projekt aktiviert sein.

6. Dienstkonto mit Nutzerrollen erstellen

So erstellen Sie ein Dienstkonto mit den erforderlichen Rollen:

  1. Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Fügen Sie dem im vorherigen Schritt erstellten Dienstkonto nun die erforderliche Rolle für den Zugriff auf die API hinzu.
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'

In den obigen Befehlen wird „abap-sdk-poc“ als Vorlagenname für das Google Cloud-Projekt verwendet. Ersetzen Sie sie durch Ihre Projekt-ID.

  1. Rufen Sie die Seite IAM auf, um zu prüfen, ob die Rolle hinzugefügt wurde. Das von Ihnen erstellte Dienstkonto sollte zusammen mit der zugewiesenen Rolle aufgeführt sein.

7. SDK-Konfigurationen in SAP erstellen

Nachdem Sie die Voraussetzungen auf Google Cloud-Seite eingerichtet haben, können wir mit der Konfiguration auf SAP-Seite fortfahren. Für die Authentifizierung und für die Konfiguration von Verbindungen verwendet das ABAP SDK for Google Cloud die Tabellen /GOOG/CLIENT_KEY und /GOOG/SERVIC_MAP.

So pflegen Sie die Konfiguration in der Tabelle /GOOG/CLIENT_KEY:

  1. Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
  2. Klicken Sie auf SAP-Referenz-IMG.
  3. Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren.
  4. Achten Sie auf die folgenden Werte in den Feldern:

Feld

Beschreibung

Google Cloud-Schlüsselname

VERTEX_AI_DEMO

Name des Google Cloud-Dienstkontos

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

Google Cloud-Bereich

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

Google Cloud-Projekt-ID

abap-sdk-poc

Autorisierungsklasse

/GOOG/CL_AUTH_GOOGLE

Lassen Sie die anderen Felder leer.

Vertex AI hat regionsspezifische Endpunkte. Wir müssten ein RFC-Ziel für den Endpunkt erstellen und die Zuordnung für die API in der Tabelle /GOOG/SERVIC_MAP mit dem Clientschlüssel erstellen. Dieser Link enthält regionsspezifische Dienstendpunkte für Vertex AI.

Im Folgenden wird beschrieben, wie Sie eine RFC für das Codelab erstellen.

  • Rufen Sie den Transaktionscode SM59 auf und erstellen Sie eine Verbindung vom Typ „G“.
  • Geben Sie als Namen des Ziels „ZGOOG_VERTEXAI_V1“ an.
  • Geben Sie die Beschreibungen wie erforderlich und den Port als „443“ an.
  • Geben Sie als „Host“-Adresse us-west4-aiplatform.googleapis.com an, da wir im Codelab auf den Standort „us-west4-b“ verweisen.

Unten findest du einen Screenshot des RFC-Ziels.

54316c5de58624c7.png

So pflegen Sie die Konfiguration in der Tabelle /GOOG/SERVIC_MAP:

  1. Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
  2. Klicken Sie auf SAP-Referenz-IMG.
  3. Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Dienstzuordnung konfigurieren.
  4. Achten Sie auf die folgenden Werte in den Feldern:

Feld

Beschreibung

Google Cloud-Schlüsselname

VERTEX_AI_DEMO

Google-Dienstname

AI Platform Version 2

RFC-Ziel

ZGOOG_VERTEXAI_V1

8. PaLM 2 Text mit dem SDK aufrufen

  1. Melden Sie sich in Ihrem SAP-System an.
  2. Rufen Sie den Transaktionscode SE38 auf und erstellen Sie einen Bericht mit dem Namen „ZDEMO_VERTEX_AI“.
  3. Geben Sie im Pop-up-Fenster die Details wie unten gezeigt ein und klicken Sie auf Speichern.

b06fda1a879290f7.png

Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.

  1. Fügen Sie im ABAP-Editor das folgende Code-Snippet ein:
  • In diesem Snippet übergeben wir als Prompt den E-Mail-Inhalt einer dringenden Bestellanfrage zusammen mit einer Anleitung zum Parsen, um Bestellattribute wie Kundenname, Firmenname, Kundenbezeichnung, Artikelname, Bestellmenge, Lieferadresse und Lieferdatum zu extrahieren.
  • Die ABAP-Typdeklarationen dienen dazu, die Anfrage für das Vertex AI PaLM 2-Textmodell gemäß der hier verfügbaren Dokumentation vorzubereiten und die Antwort zu erfassen.
* 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. Speichern und aktivieren Sie das Berichtsprogramm.
  2. Führen Sie den Bericht aus (F8).

Nach erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt mit den extrahierten Bestellattributen angezeigt werden, wie in der Aufforderung beschrieben.

c40839b43b8ac44f.png

9. Glückwunsch

Glückwunsch! Sie haben das Vertex AI PaLM 2-Textmodell aus Ihrem ABAP-Programm aufgerufen, um eine Bestellanfrage mit dem ABAP SDK for Google Cloud zu parsen.

Anstatt die E-Mail-Inhalte hartzucodieren, können Sie sie auch mit dem ABAP SDK for Google Cloud aus Ihrem Gmail-Posteingang abrufen und dann wie in diesem Codelab beschrieben an Vertex AI übergeben.

10. Bereinigen

Wenn Sie nicht mit den zusätzlichen Codelabs zum ABAP SDK for Google Cloud fortfahren möchten, fahren Sie mit der Bereinigung fort.

Projekt löschen

  • So löschen Sie das Google Cloud-Projekt:
gcloud projects delete abap-sdk-poc

Einzelne Ressourcen löschen

  1. Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
  1. Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
  1. Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com