Вызов Vertex AI LLM из среды ABAP с помощью ABAP SDK для Google Cloud

1. Введение

В этой кодовой лаборатории мы перечислили шаги по вызову базовой модели PaLM 2 Text (text-bison) Google Cloud Vertex AI из среды ABAP с помощью ABAP SDK для Google Cloud .

В этой лабораторной работе используются следующие сервисы Google Cloud:

  • Вершинный ИИ
  • Cloud Shell

Что вы построите

Вам предстоит создать следующее:

  • Включить API Vertex AI в проекте Google Cloud.
  • Передайте запрос в текстовую модель PaLM 2 Vertex AI и получите ответ с помощью ABAP SDK для Google Cloud.

2. Требования

  • Браузер, например Chrome или Firefox .
  • Проект Google Cloud с включенным биллингом или создание 90-дневной бесплатной пробной учетной записи для Google Cloud Platform.
  • SAP GUI (Windows или Java) установлен в вашей системе. Если SAP GUI уже установлен на вашем ноутбуке, подключитесь к SAP, используя внешний IP-адрес виртуальной машины в качестве IP-адреса сервера приложений. Если вы используете Mac, вы также можете установить SAP GUI для Java, доступный по этой ссылке.

3. Прежде чем начать

6757b2fb50ddcc2d.png

  • Выполните следующие команды для аутентификации вашей учётной записи и установите проект по умолчанию abap-sdk-poc . Зона us-west4-b используется в качестве примера. При необходимости измените проект и зону в следующих командах по своему усмотрению.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Обзор

Вот краткий обзор некоторых сущностей Vertex AI, с которыми вам предстоит работать в этой лабораторной работе:

  • PaLM 2 для текста: Базовые модели PaLM 2 для текста (text-bison, text-unicorn) оптимизированы для различных задач на естественном языке, таких как анализ настроений, извлечение сущностей и создание контента.
  • Text-bison: Text-bison — это большая языковая модель (LLM), разработанная Google AI. Это основополагающая модель для GenAI, которая может понимать и генерировать язык.

5. Включите Vertex AI в вашем проекте Google Cloud

  1. Перейдите в свой проект Google Cloud и нажмите «Активировать Cloud Shell» в правом верхнем углу.

8d15f753321c53e6.png

  1. После активации оболочки выполните следующую команду, чтобы включить API Cloud Secret Manager в вашем проекте Google Cloud.
gcloud services enable aiplatform.googleapis.com

Теперь в вашем проекте Google Cloud должен быть включен API Vertex AI.

6. Создайте учетную запись службы с ролями пользователей.

Чтобы создать учетную запись службы с необходимыми ролями, выполните следующие действия:

  1. Выполните следующую команду в терминале Cloud Shell:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Теперь добавьте требуемую роль к учетной записи службы, созданной на предыдущем шаге, для доступа к 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'

В приведенных выше командах используется шаблон abap-sdk-poc для проекта Google Cloud. Замените его на идентификатор вашего проекта.

  1. Чтобы убедиться, что роль добавлена, перейдите на страницу IAM . Созданная вами учётная запись службы должна быть указана вместе с назначенной ей ролью.

7. Создание конфигураций SDK в SAP

Теперь, когда вы настроили все необходимые компоненты на стороне Google Cloud, можно перейти к настройке SAP. Для настройки аутентификации и подключения ABAP SDK для Google Cloud использует таблицы /GOOG/CLIENT_KEY и /GOOG/SERVIC_MAP.

Для сохранения конфигурации в таблице /GOOG/CLIENT_KEY выполните следующие действия:

  1. В графическом интерфейсе SAP введите код транзакции SPRO .
  2. Нажмите ссылку SAP IMG .
  3. Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить ключ клиента.
  4. Поддерживайте следующие значения в полях:

Поле

Описание

Имя ключа Google Cloud

VERTEX_AI_DEMO

Имя учетной записи облачной службы Google

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

Область применения Google Cloud

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

Идентификатор проекта Google Cloud

abap-sdk-poc

Класс авторизации

/GOOG/CL_AUTH_GOOGLE

Оставьте остальные поля пустыми.

У Vertex AI есть конечные точки, специфичные для региона. Нам пришлось бы создать назначение RFC для конечной точки и построить сопоставление для API в таблице /GOOG/SERVIC_MAP с ключом клиента. (См. эту ссылку для получения конечных точек службы, специфичных для региона, для Vertex AI).

Ниже приведены шаги по созданию RFC для лабораторной работы.

  • Перейдите к коду транзакции SM59 и создайте соединение типа «G».
  • Укажите имя пункта назначения как «ZGOOG_VERTEXAI_V1».
  • При необходимости дайте описания и укажите порт «443».
  • Укажите адрес «Хоста» как « us-west4-aiplatform.googleapis.com », поскольку в кодовой лаборатории мы имеем в виду местоположение «us-west4-b».

Ниже для справки представлен снимок экрана назначения RFC.

54316c5de58624c7.png

Для сохранения конфигурации в таблице /GOOG/SERVIC_MAP выполните следующие действия:

  1. В графическом интерфейсе SAP введите код транзакции SPRO .
  2. Нажмите ссылку SAP IMG .
  3. Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить сопоставление служб.
  4. Поддерживайте следующие значения в полях:

Поле

Описание

Имя ключа Google Cloud

VERTEX_AI_DEMO

Имя службы Google

aiplatform:v1

RFC-назначение

ZGOOG_VERTEXAI_V1

8. Вызов PaLM 2 Text с помощью SDK

  1. Войдите в свою систему SAP.
  2. Перейдите к коду транзакции SE38 и создайте отчет с именем «ZDEMO_VERTEX_AI».
  3. В открывшемся всплывающем окне укажите данные, как показано ниже, и нажмите кнопку Сохранить .

b06fda1a879290f7.png

В следующем всплывающем окне выберите Локальный объект или укажите имя пакета, если необходимо.

  1. В редакторе ABAP добавьте следующий фрагмент кода:
  • В этом фрагменте в качестве подсказки мы передаем содержимое электронного письма для срочного запроса на заказ вместе с инструкциями по его анализу для извлечения атрибутов заказа, таких как имя клиента, название компании, назначение клиента, название товара, количество в заказе, адрес доставки и дата доставки.
  • Объявления типов ABAP предназначены для подготовки запроса и получения ответа от текстовой модели Vertex AI PaLM 2 в соответствии с представленной здесь документацией.
* 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. Сохраните и активируйте программу отчетов.
  2. Выполнить отчет (F8).

При успешном выполнении вы должны увидеть отчет, как показано ниже, с извлеченными атрибутами заказа, как указано в подсказке.

c40839b43b8ac44f.png

9. Поздравления

Поздравляем! Вы успешно вызвали текстовую модель Vertex AI PaLM 2 из вашей ABAP-программы для анализа запроса заказа с использованием ABAP SDK для Google Cloud.

Вместо жесткого кодирования вы также можете рассмотреть возможность получения содержимого электронной почты из почтового ящика Gmail с помощью ABAP SDK для Google Cloud, а затем передачи содержимого в Vertex AI, как описано в этой лабораторной работе.

10. Уборка

Если вы не хотите продолжать работу с дополнительными практическими занятиями, связанными с ABAP SDK для Google Cloud, пожалуйста, продолжите очистку.

Удалить проект

  • Удалить проект Google Cloud:
gcloud projects delete abap-sdk-poc

Удалить отдельные ресурсы

  1. Удалить вычислительный экземпляр:
gcloud compute instances delete abap-trial-docker
  1. Удалить правила брандмауэра:
gcloud compute firewall-rules delete sapmachine
  1. Удалить учетную запись службы:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com