Chamar o LLM da Vertex AI no seu ambiente ABAP com o SDK ABAP for Google Cloud

1. Introdução

Neste codelab, listamos as etapas para chamar o modelo de fundação PaLM 2 Text (text-bison) da Vertex AI do Google Cloud no seu ambiente ABAP usando o SDK ABAP para Google Cloud.

Os seguintes serviços do Google Cloud são usados neste codelab:

  • Vertex AI
  • Cloud Shell

O que você vai criar

Você vai criar o seguinte:

  • Ative a API Vertex AI em um projeto do Google Cloud.
  • Transmita um comando para o modelo de texto PaLM 2 da Vertex AI e receba uma resposta usando o SDK do ABAP para Google Cloud.

2. Requisitos

  • Um navegador, como o Chrome ou o Firefox
  • Um projeto do Google Cloud com o faturamento ativado ou Crie uma conta de teste sem custo financeiro de 90 dias para o Google Cloud Platform.
  • GUI do SAP (Windows ou Java) instalado no sistema. Se o SAP GUI já estiver instalado no seu laptop, conecte-se ao SAP usando o endereço IP externo da VM como o IP do servidor de aplicativos. Se você estiver usando um Mac, também poderá instalar o SAP GUI para Java disponível neste link.

3. Antes de começar

6757b2fb50ddcc2d.png

  • Execute os comandos a seguir para fazer a autenticação da sua conta e definir o projeto padrão como abap-sdk-poc. A zona us-west4-b é usada como exemplo. Se necessário, mude o projeto e a zona nos comandos a seguir de acordo com sua preferência.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b

4. Visão geral

Confira uma visão geral rápida de algumas das entidades da Vertex AI com que você vai trabalhar neste codelab:

  • PaLM 2 para texto: os modelos de fundação do PaLM 2 para texto (text-bison, text-unicorn) são otimizados para várias tarefas de linguagem natural, como análise de sentimento, extração de entidades e criação de conteúdo.
  • Text-bison: um modelo de linguagem grande (LLM) desenvolvido pela equipe de IA do Google. É um modelo de base para a IA generativa que pode entender e gerar linguagem.

5. Ativar a Vertex AI no seu projeto do Google Cloud

  1. Acesse seu projeto do Google Cloud e clique em "Ativar o Cloud Shell" no canto superior direito.

8d15f753321c53e6.png

  1. Depois que o shell for ativado, execute o comando abaixo para ativar a API Cloud Secret Manager no seu projeto do Google Cloud.
gcloud services enable aiplatform.googleapis.com

A API Vertex AI deve estar ativada no seu projeto do Google Cloud.

6. Criar uma conta de serviço com funções de usuário

Para criar uma conta de serviço com os papéis necessários, siga estas etapas:

  1. Execute o seguinte comando no terminal do Cloud Shell:
gcloud iam service-accounts create abap-sdk-vertexai-tester \
--display-name="Service Account for Vertex AI"
  1. Agora, adicione o papel necessário à conta de serviço criada na etapa acima para acessar a 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'

Os comandos acima usam abap-sdk-poc como nome do modelo para o projeto do Google Cloud. Substitua-o pelo ID do seu projeto.

  1. Para verificar se o papel foi adicionado, acesse a página IAM. A conta de serviço que você criou vai aparecer com o papel atribuído a ela.

7. Criar configurações do SDK no SAP

Agora que você configurou os pré-requisitos no Google Cloud, podemos prosseguir com a configuração no SAP. Para a configuração relacionada à autenticação e conectividade, o ABAP SDK for Google Cloud usa as tabelas /GOOG/CLIENT_KEY e /GOOG/SERVIC_MAP.

Para manter a configuração na tabela /GOOG/CLIENT_KEY, siga estas etapas:

  1. Na GUI do SAP, insira o código da transação SPRO.
  2. Clique em IMG de referência SAP.
  3. Clique em ABAP SDK for Google Cloud > Configurações básicas > Configurar chave do cliente.
  4. Mantenha os seguintes valores nos campos:

Campo

Descrição

Nome da chave do Google Cloud

VERTEX_AI_DEMO

Nome da conta de serviço do Google Cloud

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

Escopo do Google Cloud

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

Identificador de projeto do Google Cloud

abap-sdk-poc

Classe de autorização

/GOOG/CL_AUTH_GOOGLE

Deixe os outros campos em branco

A Vertex AI tem endpoints específicos da região. Teríamos que criar um destino RFC para o endpoint e criar o mapeamento para a API na tabela /GOOG/SERVIC_MAP em relação à chave do cliente. Consulte este link para ver os endpoints de serviço específicos da região para a Vertex AI.

Confira abaixo as etapas para criar um RFC para o codelab.

  • Acesse o código da transação SM59 e crie uma conexão do tipo "G".
  • Dê o nome "ZGOOG_VERTEXAI_V1" ao destino.
  • Dê as descrições conforme necessário e a porta como "443".
  • Insira o endereço "Host" como us-west4-aiplatform.googleapis.com, porque estamos nos referindo ao local "us-west4-b" no codelab.

Confira abaixo uma captura de tela do destino do RFC para sua referência.

54316c5de58624c7.png

Para manter a configuração na tabela /GOOG/SERVIC_MAP, siga estas etapas:

  1. Na GUI do SAP, insira o código da transação SPRO.
  2. Clique em IMG de referência SAP.
  3. Clique em ABAP SDK for Google Cloud > Configurações básicas > Configurar mapeamento de serviços.
  4. Mantenha os seguintes valores nos campos:

Campo

Descrição

Nome da chave do Google Cloud

VERTEX_AI_DEMO

Nome do serviço do Google

aiplatform:v1

Destino do RFC

ZGOOG_VERTEXAI_V1

8. Invocar o PaLM 2 Text usando o SDK

  1. Faça login no sistema SAP.
  2. Acesse o código da transação SE38 e crie um relatório com o nome "ZDEMO_VERTEX_AI".
  3. No pop-up que abrir, forneça os detalhes conforme mostrado abaixo e clique em Salvar.

b06fda1a879290f7.png

No próximo pop-up, selecione Objeto local ou informe um nome de pacote, conforme apropriado.

  1. No Editor ABAP, adicione o seguinte snippet de código:
  • Neste snippet, como uma instrução, estamos transmitindo o conteúdo de e-mail de uma solicitação de pedido urgente com instruções para analisá-lo e extrair atributos do pedido, como nome do cliente, nome da empresa, designação do cliente, nome do item, quantidade do pedido, endereço de entrega e data de entrega.
  • As declarações de tipos ABAP são para preparar a solicitação e capturar a resposta do modelo de texto PaLM 2 da Vertex AI, conforme a documentação neste link.
* 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. Salve e ative o programa de denúncia.
  2. Execute o relatório (F8).

Se a execução for bem-sucedida, você vai encontrar a saída do relatório, conforme mostrado abaixo, com os atributos de pedidos extraídos, conforme instruído no comando.

c40839b43b8ac44f.png

9. Parabéns

Parabéns! Você chamou o modelo de texto do PaLM 2 da Vertex AI no seu programa ABAP para analisar uma solicitação de pedido usando o SDK do ABAP para Google Cloud.

Em vez de codificar manualmente, você também pode extrair o conteúdo de e-mail da sua caixa de entrada do Gmail usando o SDK ABAP para Google Cloud e, em seguida, transmitir o conteúdo para a Vertex AI, conforme descrito neste codelab.

10. Limpar

Se você não quiser continuar com os outros codelabs relacionados ao SDK ABAP para Google Cloud, prossiga com a limpeza.

Excluir o projeto

  • Exclua o projeto do Google Cloud:
gcloud projects delete abap-sdk-poc

Excluir recursos individuais

  1. Exclua a instância de computação:
gcloud compute instances delete abap-trial-docker
  1. Exclua as regras de firewall:
gcloud compute firewall-rules delete sapmachine
  1. Exclua a conta de serviço:
gcloud iam service-accounts delete \
    abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com