1. Einführung
In diesem Codelab finden Sie eine Anleitung dazu, wie Sie das PaLM 2 Text (text-bison)-Basismodell von Google Cloud Vertex AI über das ABAP SDK for Google Cloud aus Ihrer ABAP-Umgebung aufrufen.
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.
- Übergeben Sie einen Prompt an das PaLM 2-Textmodell von Vertex AI und erhalten Sie 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 90‑Tage-Testkonto für die Google Cloud Platform.
- SAP GUI (Windows oder Java) ist auf Ihrem System installiert. Wenn SAP GUI bereits auf Ihrem Laptop installiert ist, stellen Sie eine Verbindung zu SAP her und verwenden Sie dabei die externe IP-Adresse der VM als IP-Adresse des Anwendungsservers. Wenn Sie einen Mac verwenden, können Sie auch die SAP GUI für 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 Google Cloud Platform installieren und ABAP SDK installieren) finden Sie Informationen zum Einrichten eines neuen Systems.
- 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 die 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 ist eine kurze Übersicht über einige der Vertex AI-Entitäten, mit denen Sie in diesem Codelab arbeiten werden:
- PaLM 2 for Text: Die PaLM 2 for Text-Foundation-Modelle (text-bison, text-unicorn) sind für eine Vielzahl von Natural Language-Aufgaben wie Sentimentanalyse, Entitätsextraktion und Inhaltserstellung optimiert.
- Text-bison: Text-bison ist ein von Google AI entwickeltes Large Language Model (LLM). Es ist ein Foundation Model 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 die erforderliche Rolle hinzu, um auf die API zuzugreifen.
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 oben genannten 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 ihm zugewiesenen Rolle aufgeführt sein.
7. SDK-Konfigurationen in SAP erstellen
Nachdem Sie die Voraussetzungen auf Google Cloud-Seite eingerichtet haben, können Sie mit der Konfiguration auf SAP-Seite fortfahren. Zur 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.
- Geben Sie die folgenden Werte für die Felder an:
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“ anhand des Clientschlüssels erstellen. Unter diesem Link finden Sie regionsspezifische Dienstendpunkte für Vertex AI.
Im Folgenden finden Sie die Schritte zum Erstellen eines RFC für das Codelab.
- Rufen Sie den Transaktionscode SM59 auf und erstellen Sie eine Verbindung vom Typ „G“.
- Geben Sie „ZGOOG_VERTEXAI_V1“ als Namen des Ziels an.
- Geben Sie die Beschreibungen wie erforderlich an und verwenden Sie Port 443.
- Geben Sie als „Host“-Adresse us-west4-aiplatform.googleapis.com an, da wir uns im Codelab auf den Standort „us-west4-b“ beziehen.
Unten sehen Sie 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.
- Geben Sie die folgenden Werte für die Felder an:
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, das sich öffnet, 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 hinzu:
- In diesem Snippet übergeben wir den E-Mail-Inhalt für eine dringende Bestellanfrage als Prompt zusammen mit der Anleitung, ihn zu parsen, um Bestellattribute wie Kundenname, Unternehmensname, Kundenbezeichnung, Artikelname, Bestellmenge, Lieferadresse und Lieferdatum zu extrahieren.
- Die ABAP-Typdeklarationen dienen dazu, die Anfrage für das Vertex AI PaLM 2-Textmodell vorzubereiten und die Antwort des Modells gemäß der Dokumentation 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).
Bei erfolgreicher Ausführung sollte die Berichtsausgabe wie unten dargestellt aussehen und die extrahierten Bestellattribute wie im Prompt angegeben enthalten.
9. Glückwunsch
Glückwunsch! Sie haben das Vertex AI PaLM 2-Textmodell erfolgreich aus Ihrem ABAP-Programm aufgerufen, um eine Bestellanfrage mit dem ABAP SDK for Google Cloud zu parsen.
Anstatt die E-Mail-Inhalte fest zu codieren, 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 dem Bereinigen fort.
Projekt löschen
- Google Cloud-Projekt löschen:
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