Вызов 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:

  • Вертексный ИИ
  • Облачная оболочка

Что ты построишь

Вы создадите следующее:

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

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

  • Браузер, например Chrome или Firefox .
  • Проект Google Cloud с включенной оплатой или создайте 90-дневную бесплатную пробную учетную запись для Google Cloud Platform.
  • SAP GUI (Windows или Java), установленный в вашей системе. Если графический интерфейс SAP уже установлен на вашем ноутбуке, подключитесь к SAP, используя внешний IP-адрес виртуальной машины в качестве IP-адреса сервера приложений. Если вы используете Mac, вы также можете установить графический интерфейс SAP для 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 должен быть включен Vertex AI API.

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. Щелкните Справочное IMG SAP .
  3. Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить ключ клиента.
  4. Поддерживайте следующие значения для полей:

Поле

Описание

Имя облачного ключа Google

VERTEX_AI_DEMO

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

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

Облачная область Google

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. Щелкните Справочное IMG SAP .
  3. Нажмите ABAP SDK для Google Cloud > Основные настройки > Настроить сопоставление сервисов.
  4. Поддерживайте следующие значения для полей:

Поле

Описание

Имя облачного ключа Google

VERTEX_AI_DEMO

Название службы Google

айплатформа: v1

Назначение RFC

ZGOOG_VERTEXAI_V1

8. Вызовите текст PaLM 2 с помощью 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