Llama al LLM de Vertex AI desde tu entorno de ABAP con el SDK de ABAP para Google Cloud

1. Introducción

En este codelab, enumeramos los pasos para llamar al modelo de base PaLM 2 Text (text-bison) de Google Cloud Vertex AI desde tu entorno de ABAP con el SDK de ABAP para Google Cloud.

En este codelab, se usan los siguientes servicios de Google Cloud:

  • Vertex AI
  • Cloud Shell

Qué compilarás

Crearás lo siguiente:

  • Habilitaste la API de Vertex AI en un proyecto de Google Cloud.
  • Pasa una instrucción al modelo de texto PaLM 2 de Vertex AI y recibe una respuesta con el SDK de ABAP para Google Cloud.

2. Requisitos

  • Un navegador, como Chrome o Firefox
  • Un proyecto de Google Cloud con la facturación habilitada o crea una cuenta de prueba gratuita de 90 días para Google Cloud Platform.
  • GUI de SAP (Windows o Java) instalada en tu sistema Si la GUI de SAP ya está instalada en tu laptop, conéctate a SAP con la dirección IP externa de la VM como la IP del servidor de aplicaciones. Si usas Mac, también puedes instalar la GUI de SAP para Java disponible en este vínculo.

3. Antes de comenzar

6757b2fb50ddcc2d.png

  • Ejecuta los siguientes comandos para autenticar tu cuenta y establecer el proyecto predeterminado en abap-sdk-poc. Se usa la zona us-west4-b como ejemplo. Si es necesario, cambia el proyecto y la zona en los siguientes comandos según tus preferencias.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Descripción general

Aquí tienes una breve descripción general de algunas de las entidades de Vertex AI con las que trabajarás en este codelab:

  • PaLM 2 para texto: Los modelos de base de PaLM 2 para texto (text-bison, text-unicorn) están optimizados para una variedad de tareas de lenguaje natural, como el análisis de opiniones, la extracción de entidades y la creación de contenido.
  • Text-bison: Text-bison es un modelo de lenguaje grande (LLM) desarrollado por Google AI. Es un modelo fundamental para la IA generativa que puede comprender y generar lenguaje.

5. Habilita Vertex AI en tu proyecto de Google Cloud

  1. Ve a tu proyecto de Google Cloud y haz clic en Activar Cloud Shell en la esquina superior derecha.

8d15f753321c53e6.png

  1. Una vez que se active la shell, ejecuta el siguiente comando para habilitar la API de Cloud Secret Manager en tu proyecto de Google Cloud.
gcloud services enable aiplatform.googleapis.com

Ahora deberías tener habilitada la API de Vertex AI en tu proyecto de Google Cloud.

6. Crea una cuenta de servicio con roles de usuario

Para crear una cuenta de servicio con los roles necesarios, sigue estos pasos:

  1. Ejecuta el siguiente comando en la terminal de Cloud Shell:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Ahora, agrega el rol requerido a la cuenta de servicio creada en el paso anterior para acceder a la 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'

Los comandos anteriores usan abap-sdk-poc como nombre de la plantilla para el proyecto de Google Cloud. Reemplázalo por el ID de tu proyecto.

  1. Para verificar que se haya agregado el rol, ve a la página IAM. La cuenta de servicio que creaste debería aparecer en la lista junto con el rol que se le asignó.

7. Crea configuraciones del SDK en SAP

Ahora que configuraste los requisitos previos en Google Cloud, podemos continuar con la configuración en SAP. En la configuración relacionada con la autenticación y la conectividad, el SDK de ABAP para Google Cloud usa las tablas /GOOG/CLIENT_KEY y /GOOG/SERVIC_MAP.

Para mantener la configuración en la tabla /GOOG/CLIENT_KEY, sigue estos pasos:

  1. En la GUI de SAP, ingresa el código de transacción SPRO.
  2. Haz clic en IMG de referencia de SAP.
  3. Haz clic en SDK de ABAP para Google Cloud > Configuración básica > Configurar clave de cliente.
  4. Mantén los siguientes valores en los campos:

Campo

Descripción

Nombre de la clave de Google Cloud

VERTEX_AI_DEMO

Nombre de la cuenta de servicio de Google Cloud

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

Permiso de Google Cloud

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

Identificador de proyecto de Google Cloud

abap-sdk-poc

Clase de autorización

/GOOG/CL_AUTH_GOOGLE

Deja los otros campos en blanco

Vertex AI tiene extremos específicos de la región, por lo que tendríamos que crear un destino de RFC para el extremo y compilar la asignación de la API en la tabla /GOOG/SERVIC_MAP en función de la clave de cliente. (consulta este vínculo para obtener los extremos de servicio específicos de la región para Vertex AI).

A continuación, se indican los pasos para crear una RFC para el codelab.

  • Ve al código de transacción SM59 y crea una conexión de tipo “G”.
  • Asigna el nombre del destino como "ZGOOG_VERTEXAI_V1".
  • Proporciona las descripciones según sea necesario y el puerto como “443”.
  • Ingresa la dirección "Host" como "us-west4-aiplatform.googleapis.com", ya que nos referimos a la ubicación "us-west4-b" en el codelab.

A continuación, se incluye una captura de pantalla del destino de RFC para tu referencia.

54316c5de58624c7.png

Para mantener la configuración en la tabla /GOOG/SERVIC_MAP, sigue estos pasos:

  1. En la GUI de SAP, ingresa el código de transacción SPRO.
  2. Haz clic en IMG de referencia de SAP.
  3. Haz clic en SDK de ABAP para Google Cloud > Configuración básica > Configurar asignación de servicios.
  4. Mantén los siguientes valores en los campos:

Campo

Descripción

Nombre de la clave de Google Cloud

VERTEX_AI_DEMO

Nombre del servicio de Google

AI Platform v2

Destino de RFC

ZGOOG_VERTEXAI_V1

8. Invoca PaLM 2 Text con el SDK

  1. Accede a tu sistema SAP.
  2. Ve al código de transacción SE38 y crea un informe con el nombre "ZDEMO_VERTEX_AI".
  3. En la ventana emergente que se abre, proporciona los detalles como se muestra a continuación y haz clic en Guardar.

b06fda1a879290f7.png

En la siguiente ventana emergente, selecciona Objeto local o proporciona un nombre de paquete según corresponda.

  1. En el editor de ABAP, agrega el siguiente fragmento de código:
  • En este fragmento, como instrucción, pasamos el contenido del correo electrónico de una solicitud de pedido urgente junto con instrucciones para analizarlo y extraer atributos del pedido, como el nombre del cliente, el nombre de la empresa, la designación del cliente, el nombre del artículo, la cantidad del pedido, la dirección de envío y la fecha de entrega.
  • Las declaraciones de tipos de ABAP son para preparar la solicitud y capturar la respuesta del modelo de texto PaLM 2 de Vertex AI según la documentación aquí.
* 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. Guarda y activa el programa de informes.
  2. Ejecuta el informe (F8).

Si la ejecución se realiza correctamente, deberías ver el resultado del informe como se muestra a continuación con los atributos de orden extraídos según se indica en la instrucción.

c40839b43b8ac44f.png

9. Felicitaciones

¡Felicitaciones! Llamaste correctamente al modelo de texto PaLM 2 de Vertex AI desde tu programa ABAP para analizar una solicitud de pedido con el SDK de ABAP para Google Cloud.

En lugar de usar codificación fija, también puedes obtener el contenido de los correos electrónicos de tu carpeta Recibidos de Gmail con el SDK de ABAP para Google Cloud y, luego, pasar el contenido a Vertex AI como se describe en este codelab.

10. Limpia

Si no deseas continuar con los codelabs adicionales relacionados con el SDK de ABAP para Google Cloud, continúa con la limpieza.

Borra el proyecto

  • Borra el proyecto de Google Cloud:
gcloud projects delete abap-sdk-poc

Cómo borrar recursos individuales

  1. Borra la instancia de procesamiento:
gcloud compute instances delete abap-trial-docker
  1. Borra las reglas de firewall:
gcloud compute firewall-rules delete sapmachine
  1. Borra la cuenta de servicio:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com