1. Introduction
Dans cet atelier de programmation, nous avons listé les étapes à suivre pour appeler le modèle de fondation PaLM 2 Text (text-bison) de Google Cloud Vertex AI à partir de votre environnement ABAP à l'aide du SDK ABAP pour Google Cloud.
Les services Google Cloud suivants sont utilisés dans cet atelier de programmation:
- Vertex AI
- Cloud Shell
Ce que vous allez faire
Vous allez créer les éléments suivants:
- activer l'API Vertex AI dans un projet Google Cloud ;
- Transmettez une requête au modèle de texte PaLM 2 de Vertex AI et recevez une réponse à l'aide du SDK ABAP pour Google Cloud.
2. Conditions requises
- Un navigateur (Chrome ou Firefox, par exemple)
- Un projet Google Cloud pour lequel la facturation est activée ou créez un compte d'essai sans frais de 90 jours pour Google Cloud Platform.
- Interface utilisateur graphique SAP (Windows ou Java) installée sur votre système. Si l'interface utilisateur SAP est déjà installée sur votre ordinateur portable, connectez-vous à SAP à l'aide de l'adresse IP externe de la VM comme adresse du serveur d'applications. Si vous utilisez un Mac, vous pouvez également installer la GUI SAP pour Java disponible sur ce lien.
3. Avant de commencer
- Vous avez installé le SDK ABAP pour Google Cloud sur votre système. Pour configurer un nouveau système, consultez l'atelier de programmation Installer la version d'essai de la plate-forme ABAP 1909 sur Google Cloud Platform et installer le SDK ABAP.
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud. Dans la console Cloud, cliquez sur Activer Cloud Shell en haut à droite:
- Exécutez les commandes suivantes pour vous authentifier pour votre compte et définir le projet par défaut sur
abap-sdk-poc
. La zoneus-west4-b
est utilisée comme exemple. Si nécessaire, veuillez modifier le projet et la zone dans les commandes suivantes en fonction de vos préférences.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
4. Présentation
Voici un bref aperçu de certaines des entités de Vertex AI avec lesquelles vous allez travailler dans cet atelier de programmation:
- PaLM 2 pour le texte: les modèles de fondation PaLM 2 pour le texte (text-bison, text-unicorn) sont optimisés pour diverses tâches de langage naturel, telles que l'analyse des sentiments, l'extraction d'entités et la création de contenus.
- Text-bison: Text-bison est un grand modèle de langage (LLM) développé par Google AI. Il s'agit d'un modèle de base de l'IA générative capable de comprendre et de générer du langage.
5. Activer Vertex AI dans votre projet Google Cloud
- Accédez à votre projet Google Cloud, puis cliquez sur "Activer Cloud Shell" en haut à droite.
- Une fois le shell activé, exécutez la commande ci-dessous pour activer l'API Cloud Secret Manager dans votre projet Google Cloud.
gcloud services enable aiplatform.googleapis.com
L'API Vertex AI devrait maintenant être activée dans votre projet Google Cloud.
6. Créer un compte de service avec des rôles utilisateur
Pour créer un compte de service avec les rôles requis, procédez comme suit:
- Exécutez la commande suivante dans le terminal Cloud Shell :
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
- Ajoutez maintenant le rôle requis au compte de service créé à l'étape précédente pour accéder à l'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'
Les commandes ci-dessus utilisent abap-sdk-poc comme nom de modèle pour le projet Google Cloud. Remplacez-le par l'ID de votre projet.
- Pour vérifier que le rôle a bien été ajouté, accédez à la page IAM. Le compte de service que vous avez créé doit être listé avec le rôle qui lui a été attribué.
7. Créer des configurations de SDK dans SAP
Maintenant que vous avez configuré les conditions préalables côté Google Cloud, nous pouvons passer à la configuration côté SAP. Pour la configuration de l'authentification et de la connectivité associée, le SDK ABAP pour Google Cloud utilise les tables /GOOG/CLIENT_KEY et /GOOG/SERVIC_MAP.
Pour gérer la configuration dans la table /GOOG/CLIENT_KEY, procédez comme suit:
- Dans l'IUG de SAP, saisissez le code de transaction SPRO.
- Cliquez sur SAP Reference IMG.
- Cliquez sur SDK ABAP pour Google Cloud > Paramètres de base > Configurer la clé client.
- Maintenez les valeurs suivantes pour les champs:
Champ | Description |
Nom de la clé Google Cloud | VERTEX_AI_DEMO |
Nom du compte de service Google Cloud | abap-sdk-vertexai-tester@abap-sdk-poc.iam.gserviceaccount.com |
Champ d'application Google Cloud | https://www.googleapis.com/auth/cloud-platform |
Identifiant de projet Google Cloud | abap-sdk-poc |
Classe d'autorisation | /GOOG/CL_AUTH_GOOGLE |
Laissez les autres champs vides.
Vertex AI dispose de points de terminaison spécifiques à la région. Nous devons créer une destination RFC pour le point de terminaison et créer le mappage de l'API dans la table /GOOG/SERVIC_MAP en fonction de la clé client. (consultez ce lien pour connaître les points de terminaison de service spécifiques à la région pour Vertex AI).
Pour créer une demande de changement de spécification pour l'atelier de programmation, procédez comme suit :
- Accédez au code de transaction SM59, puis créez une connexion de type G.
- Nommez la destination "ZGOOG_VERTEXAI_V1".
- Indiquez les descriptions requises et le port "443".
- Indiquez l'adresse "Host" comme us-west4-aiplatform.googleapis.com, car nous faisons référence à l'emplacement "us-west4-b" dans l'atelier de programmation.
Vous trouverez ci-dessous une capture d'écran de la destination RFC à titre de référence.
Pour maintenir la configuration dans la table /GOOG/SERVIC_MAP, procédez comme suit:
- Dans l'IUG de SAP, saisissez le code de transaction SPRO.
- Cliquez sur SAP Reference IMG.
- Cliquez sur SDK ABAP pour Google Cloud > Paramètres de base > Configurer le mappage des services.
- Maintenez les valeurs suivantes pour les champs:
Champ | Description |
Nom de la clé Google Cloud | VERTEX_AI_DEMO |
Nom du service Google | AI Platform v2 |
Destination RFC | ZGOOG_VERTEXAI_V1 |
8. Appeler PaLM 2 Text à l'aide du SDK
- Connectez-vous à votre système SAP.
- Accédez au code de transaction SE38, puis créez un rapport intitulé "ZDEMO_VERTEX_AI".
- Dans la fenêtre pop-up qui s'affiche, renseignez les informations comme indiqué ci-dessous, puis cliquez sur Enregistrer.
Dans la fenêtre pop-up suivante, sélectionnez Objet local ou indiquez un nom de package, le cas échéant.
- Dans l'éditeur ABAP, ajoutez l'extrait de code suivant:
- Dans cet extrait, nous transmettons le contenu de l'e-mail pour une demande de commande urgente, ainsi que des instructions pour l'analyser afin d'extraire les attributs de la commande, tels que le nom du client, le nom de l'entreprise, la désignation du client, le nom de l'article, la quantité de commande, l'adresse de livraison et la date de livraison.
- Les déclarations de types ABAP permettent de préparer la requête et de capturer la réponse du modèle de texte PaLM 2 de Vertex AI, comme indiqué dans la documentation ici.
* 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.
- Enregistrez et activez le programme de création de rapports.
- Exécutez le rapport (F8).
Si l'exécution aboutit, le résultat du rapport doit s'afficher, comme indiqué ci-dessous, avec les attributs de commande extraits comme indiqué dans l'invite.
9. Félicitations
Félicitations ! Vous avez appelé le modèle de texte Vertex AI PaLM 2 à partir de votre programme ABAP pour analyser une requête de commande à l'aide du SDK ABAP pour Google Cloud.
Au lieu de coder en dur, vous pouvez également récupérer le contenu de l'e-mail dans votre boîte de réception Gmail à l'aide du SDK ABAP pour Google Cloud, puis transmettre le contenu à Vertex AI comme décrit dans cet atelier de programmation.
10. Effectuer un nettoyage
Si vous ne souhaitez pas poursuivre les ateliers de programmation supplémentaires liés au SDK ABAP pour Google Cloud, veuillez procéder au nettoyage.
Supprimer le projet
- Supprimez le projet Google Cloud:
gcloud projects delete abap-sdk-poc
Supprimer des ressources individuelles
- Supprimez l'instance de calcul:
gcloud compute instances delete abap-trial-docker
- Supprimez les règles de pare-feu:
gcloud compute firewall-rules delete sapmachine
- Supprimez le compte de service :
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com