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
- Ein Browser, z. B. Chrome oder Firefox.
- Ein Google Cloud-Projekt mit aktivierter Abrechnung oder ein kostenloses Testkonto für 90 Tage für die Google Cloud Platform erstellen
- SAP GUI (Windows oder Java) auf Ihrem System installiert Wenn die SAP GUI bereits auf Ihrem Laptop installiert ist, stellen Sie eine Verbindung zu SAP her, indem Sie die externe IP-Adresse der VM als IP-Adresse des Anwendungsservers verwenden. Wenn Sie einen Mac verwenden, können Sie auch die SAP GUI for Java installieren, die über diesen Link verfügbar ist.
3. Hinweis
- Sie haben das ABAP SDK for Google Cloud auf Ihrem System installiert. Im Codelab Install ABAP Platform Trial 1909 on Google Cloud Platform and Install ABAP SDK (ABAP Platform Trial 1909 auf der Google Cloud Platform installieren und ABAP SDK installieren) erfahren Sie, wie Sie ein neues System einrichten.
- Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird. Klicken Sie in der Cloud Console rechts oben auf Cloud Shell aktivieren:
- 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 Zoneus-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
- Rufen Sie Ihr Google Cloud-Projekt auf und klicken Sie rechts oben auf „Cloud Shell aktivieren“.
- 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:
- 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"
- 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.
- 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:
- Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
- Klicken Sie auf SAP-Referenz-IMG.
- Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Clientschlüssel konfigurieren.
- 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.
So pflegen Sie die Konfiguration in der Tabelle /GOOG/SERVIC_MAP:
- Geben Sie in der SAP-GUI den Transaktionscode SPRO ein.
- Klicken Sie auf SAP-Referenz-IMG.
- Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Dienstzuordnung konfigurieren.
- 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
- Melden Sie sich in Ihrem SAP-System an.
- Rufen Sie den Transaktionscode SE38 auf und erstellen Sie einen Bericht mit dem Namen „ZDEMO_VERTEX_AI“.
- Geben Sie im Pop-up-Fenster die Details wie unten gezeigt ein und klicken Sie auf Speichern.
Wählen Sie im nächsten Pop-up-Fenster entweder Lokales Objekt aus oder geben Sie einen Paketnamen an.
- 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.
- Speichern und aktivieren Sie das Berichtsprogramm.
- 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.
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
- Löschen Sie die Compute-Instanz:
gcloud compute instances delete abap-trial-docker
- Löschen Sie die Firewallregeln:
gcloud compute firewall-rules delete sapmachine
- Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com