Este documento descreve uma arquitetura de referência para criar um mecanismo de regras de negócios com modelos de linguagem grandes (LLMs, na sigla em inglês), como Gemini, para automatizar a tomada de decisões nos aplicativos de negócios SAP. Ele usa os vários recursos de integração do ABAP SDK for Google Cloud.
O público-alvo deste documento inclui desenvolvedores ABAP, arquitetos de soluções SAP e arquitetos de nuvem. O documento pressupõe um entendimento básico do SDK ABAP para Google Cloud, do SDK da Vertex AI para ABAP e uma introdução básica aos LLMs.
O que é um mecanismo de regras de negócios (BRE)?
Um motor de regras de negócios (BRE, na sigla em inglês) é um sistema de software que permite definir, implantar e executar regras de negócios. Essas regras são essencialmente declarações lógicas que determinam como sua empresa funciona. Em vez de codificar as regras de negócios nos seus aplicativos, um BRE expõe as declarações lógicas, tornando eficiente o gerenciamento e a modificação das regras.
Um BRE com tecnologia Gemini usa os recursos avançados de processamento e raciocínio de linguagem do Gemini, o modelo de IA de última geração do Google, para automatizar a tomada de decisões com base em um repositório de comandos programados que funcionam como regras de negócios. Essas instruções, criadas com instruções específicas e formatos de saída esperados, orientam o Gemini na análise de dados, identificação de padrões e tomada de decisões de maneira consistente com a lógica de negócios predefinida.
Arquitetura
O diagrama a seguir mostra uma arquitetura de referência para criar um BRE com tecnologia Gemini para aplicativos SAP:
Esta arquitetura de referência inclui os seguintes componentes:
Componente | Subsistema | Detalhes |
---|---|---|
1 | ERP da SAP | Um sistema ERP da SAP, como o SAP S/4HANA, que usa um BRE com tecnologia Gemini para gerar insights para a tomada de decisões automatizada. Com base no seu caso de uso, forneça ao módulo BRE um ID de regra e os dados de entrada necessários. |
2 | Módulo BRE | O módulo BRE usa o SDK ABAP para Google Cloud para extrair regras configuradas do Cloud Storage e chama o Gemini usando o SDK da Vertex AI para ABAP para processar as regras. |
3 | Repositório de regras | Armazena regras (comandos programados) no Cloud Storage
como arquivos de texto, como .txt ou .prompt ,
com uma convenção de nomenclatura consistente. Por exemplo, RiskShiftingClause.prompt .
Para um gerenciamento estruturado de comandos programados, você também pode usar um banco de dados, como o Cloud SQL. |
4 | Processador de regras | O SDK da Vertex AI para ABAP envia os dados de entrada (por exemplo, instruções de entrega) e a regra recuperada (prompt) para o Gemini. O Gemini processa o comando e os dados de entrada, realiza análises e retorna os resultados no formato especificado. |
Produtos usados
Esta arquitetura de referência usa os seguintes produtos do Google Cloud:
ABAP SDK for Google Cloud: ajuda a desenvolver aplicativos ABAP que conectam seus sistemas SAP aos serviços do Google Cloud, como o Cloud Storage.
SDK da Vertex AI para ABAP: permite usar a Vertex AI do Google no seu ambiente SAP. Isso simplifica a criação de recursos com tecnologia de IA nos seus aplicativos SAP.
Cloud Storage: um serviço de nuvem para armazenar e acessar qualquer quantidade de dados on-line.
Vertex AI: permite criar, implantar e escalonar modelos de machine learning para vários aplicativos.
Caso de uso
Considere um cenário em que sua empresa recebe pedidos de compra (PO) de entrada como PDFs e usa um processo automatizado para gerar pedidos de venda no SAP. É necessário atualizar esse processo para identificar e mitigar as cláusulas de transferência de risco encontradas nos comentários de entrega das ordens de compra recebidas.
As cláusulas de transferência de risco em um contrato são termos que transferem o risco de uma parte para outra. A falha em identificar e resolver essas cláusulas pode surpreender sua empresa com custos inesperados, batalhas legais e danos à reputação.
Confira a seguir um exemplo de cláusula de transferência de risco escrita no comentário de entrega de um documento de pedido.
"O vendedor garante que os produtos estarão livres de defeitos por um período de dez anos a partir da data de entrega."
Você precisa criar uma regra para o seguinte:
- Identifique e categorize as cláusulas de transferência de risco.
- Explique por que isso é considerado um possível alerta.
- Forneça recomendações sobre como reduzir o risco.
É possível criar um BRE com o Gemini para gerar uma resposta JSON inteligente, que permite que seu aplicativo de negócios SAP tome decisões automatizadas, acione qualquer rejeição de processo ou inicie validações humanas downstream.
Exemplos de cláusulas de transferência de risco
A tabela a seguir lista exemplos de cláusulas de transferência de risco que podem ser encontradas em ordens de compra de entrada:
Categoria do problema | Exemplo de cláusula (instruções de entrega) | Possíveis problemas |
---|---|---|
Excesso de indenização | O vendedor vai indenizar o comprador contra todas as ações judiciais, perdas, danos e despesas, incluindo, mas não se limitando a honorários advocatícios, decorrentes ou relacionados aos produtos. | Isso pode ser problemático se for muito amplo e responsabilizar o vendedor por eventos imprevisíveis ou uso indevido do cliente. |
Extensão da confidencialidade | Todas as informações divulgadas pelo comprador ao vendedor, incluindo, mas não se limitando a preços, especificações e planos de marketing, serão consideradas confidenciais e de propriedade do comprador. | Isso pode prejudicar a capacidade do vendedor de usar o conhecimento geral do setor ou trabalhar com outros clientes. |
Legislação aplicável ambígua | Este contrato será regido pela legislação do local, por exemplo, o Estado de Illinois. | Isso pode levar a conflitos legais se o comprador e o vendedor estiverem em jurisdições diferentes. |
Limitação por força maior | O Vendedor não será dispensado do cumprimento deste contrato devido a qualquer evento de força maior, incluindo caso fortuito, guerra ou terrorismo. | Isso pode responsabilizar o vendedor por eventos fora do controle dele. |
Ambiguidade de propriedade intelectual | Todos os direitos de propriedade intelectual dos produtos pertencem ao comprador. | Isso pode ser um indicador negativo se o vendedor for de um país sancionado ou tiver ligações com um. |
Exemplo de comando programado
Esta seção descreve um exemplo de comando criado usando o framework RTF. O framework RTF em engenharia de comando significa papel, tarefa e formato. É uma maneira eficaz de estruturar seus comandos para receber resultados melhores e mais consistentes de LLMs, como o Gemini.
- Função: persona que você quer que o LLM adote, como "especialista em vendas" ou "consultor jurídico".
- Tarefa: ação específica para o LLM, como "resumo deste texto" ou "analise algo".
- Formato: estrutura de saída desejada, como lista ou JSON.
Para saber mais sobre estratégias de comando comuns que podem ser usadas para afetar as respostas do modelo, consulte Visão geral das estratégias de comando.
A instrução a seguir funciona como uma regra definidora para ajudar o Gemini a identificar problemas, como a cláusula de transferência de risco:
Framework RTF |
---|
Role You are a legal advisor for my company. Task Analyze the below delivery instruction on a purchase order from my customer and let me know if it could cause any issues to my company. Format Respond to me in plain text JSON format with 4 fields. Field 1 should be "issue" with possible values Yes or No. Field 2 should be "issueCategory" with possible values Indemnification Overreach, Unilateral Termination Clause, Confidentiality Overextension, Unreasonable Warranty, Ambiguous Governing Law, Unclear Dispute Resolution, Force Majeure Limitation, Unbalanced Liability, Intellectual Property Ambiguity, Compliance with Sanctions, Others or None. Field 3 should be "explanation" - use this field to give a short explanation for your response on Field 1. Field 4 should be "recommendation" - use this field to give a short recommendation of how to mitigate such issues. Do not include backticks in the response. Delivery Instruction: "Seller warrants that the products will be free from defects for a period of ten years from the date of delivery." { "issue": "Yes", "issueCategory": "Unreasonable Warranty", "explanation": "A ten-year warranty is significantly longer than industry standard for most products. This could expose your company to substantial financial risk if issues arise with the products years down the line.", "recommendation": "Negotiate a shorter warranty period that aligns with industry standards and your product's expected lifespan. Offer extended warranty options at an additional cost if the customer requires longer coverage." } |
Você pode armazenar essa solicitação em um repositório, como o Cloud Storage. Os dados de entrada podem ser transmitidos pelas transações da SAP para o módulo BRE.
Em seguida, use o SDK do ABAP para Google Cloud para recuperar o comando do Cloud Storage e transmiti-lo ao Gemini para execução, usando o SDK da Vertex AI para ABAP.
O exemplo de resposta JSON é gerado pelo Gemini para este exemplo de cláusula de transferência de risco.
O exemplo de código abaixo mostra como recuperar as regras e usá-las no código.
Ele pressupõe que você está implementando um serviço de BRE como uma classe ABAP, como lcl_bre
.
DATA(lo_bre) = NEW lcl_bre( iv_key_name = 'CLIENT_KEY'
iv_model_key = 'MODEL_KEY' ).
" Sample delivery text
DATA(lv_delivery_text) = |Seller warrants that the products will be free from defects for| &&
|a period of ten years from the date of delivery.|.
" Execute the rule for identifying Risk-Shifting clauses.
DATA(lv_response) = lo_bre->execute_rule( iv_rule_id = 'RiskShiftingClause-Rule-001.prompt'
iv_data = lv_delivery_text ).
" JSON response
cl_demo_output=>display_json( lv_response ).
Substitua:
CLIENT_KEY
: a chave do cliente configurada para autenticação na Vertex AI e no Cloud Storage.MODEL_KEY
: o nome da chave do modelo para acessar o LLM, que é configurado nos parâmetros de geração de modelo.
O método execute_rule
faz o seguinte:
Lê o arquivo de regra do Cloud Storage usando a classe
/GOOG/CL_STORAGE_V1
.Envia as regras de processamento para o Gemini, que é definido como instrução para o modelo, usando a classe
/GOOG/CL_GENERATIVE_MODEL
. O modelo gera uma resposta JSON.
Confira a seguir o exemplo de código completo para sua referência:
REPORT zra_bre_example.
" Local class definition
CLASS lcl_bre DEFINITION FINAL.
PUBLIC SECTION.
METHODS constructor
IMPORTING iv_key_name TYPE /goog/keyname
iv_model_key TYPE /goog/model_key
RAISING /goog/cx_sdk.
METHODS convert_xstring_to_string
IMPORTING iv_xstring TYPE xstring
RETURNING VALUE(iv_string) TYPE string.
METHODS execute_rule
IMPORTING iv_rule_id TYPE string
iv_data TYPE string
RETURNING VALUE(rv_response_text) TYPE string
RAISING /goog/cx_sdk.
PRIVATE SECTION.
DATA mo_storage TYPE REF TO /goog/cl_storage_v1.
DATA mo_model TYPE REF TO /goog/cl_generative_model.
ENDCLASS.
" Local class implementation
CLASS lcl_bre IMPLEMENTATION.
METHOD constructor.
mo_storage = NEW /goog/cl_storage_v1( iv_key_name = iv_key_name ).
mo_model = NEW /goog/cl_generative_model( iv_model_key = iv_model_key ).
ENDMETHOD.
METHOD convert_xstring_to_string.
DATA lv_file_length TYPE i.
DATA lt_bin_data TYPE STANDARD TABLE OF char1024.
" Call function module to convert xstring to binary format
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING buffer = iv_xstring
IMPORTING output_length = lv_file_length
TABLES binary_tab = lt_bin_data.
IF sy-subrc <> 0.
" Handle error
ENDIF.
" Call function module to convert from binary to string format
CALL FUNCTION 'SCMS_BINARY_TO_STRING'
EXPORTING input_length = lv_file_length
IMPORTING text_buffer = iv_string
TABLES binary_tab = lt_bin_data.
IF sy-subrc <> 0.
" Handle error
ENDIF.
ENDMETHOD.
METHOD execute_rule.
DATA lv_xdata TYPE xstring.
DATA lv_instruction TYPE string.
" Get the rule file from rule repository(cloud storage)
mo_storage->add_common_qparam( iv_name = 'alt'
iv_value = 'media' ).
mo_storage->get_objects( EXPORTING iv_p_bucket = 'gemini-bre-repo'
iv_p_object = iv_rule_id
IMPORTING es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp)
es_raw = lv_xdata ).
IF mo_storage->is_success( lv_ret_code ) = abap_true.
" Set the instruction for Gemini as per the configured rule
lv_instruction = convert_xstring_to_string( iv_xstring = lv_xdata ).
ELSE.
" Handle error
ENDIF.
" Set the text to be analyzed
DATA(lv_prompt) = |Please analyze the Delivery Instruction:{ cl_abap_char_utilities=>newline }{ iv_data }|.
" Call Gemini to process the rule and identify Risk-Shifting clauses
rv_response_text = mo_model->set_system_instructions( iv_text = lv_instruction
)->add_safety_settings( iv_harm_category = 'HARM_CATEGORY_DANGEROUS_CONTENT'
iv_harm_block_threshold = 'BLOCK_NONE'
)->generate_content( iv_prompt_text = lv_prompt
)->get_text( ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
TRY.
DATA(lo_bre) = NEW lcl_bre( iv_key_name = 'DEMO_AIPLATFORM'
iv_model_key = 'gemini-flash' ).
" Sample delivery text
DATA(lv_delivery_text) = |Seller warrants that the products will be free from defects for| &&
|a period of ten years from the date of delivery.|.
" Execute the rule for identifying Risk-Shifting clauses.
DATA(lv_response) = lo_bre->execute_rule( iv_rule_id = 'RiskShiftingClause-Rule-001.prompt'
iv_data = lv_delivery_text ).
" JSON response
cl_demo_output=>display_json( lv_response ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
DATA(lv_msg) = lo_exception->get_text( ).
" Handle error
ENDTRY.
Considerações sobre o design
Esta seção fornece orientações para ajudar você a usar essa arquitetura de referência para desenvolver uma ou mais arquiteturas que atendam aos seus requisitos específicos de segurança, privacidade, compliance, custo e desempenho.
segurança, privacidade e conformidade
A segurança e a conformidade são responsabilidades compartilhadas. Para informações detalhadas, consulte Responsabilidade compartilhada da Vertex AI.
Para informações sobre como o Gemini usa seus dados, consulte Como o Gemini para o Google Cloud usa seus dados.
Custo
Para uma estimativa do custo dos recursos do Google Cloud, como o Cloud Storage, use a calculadora de preços do Google Cloud.
Para saber mais sobre os preços relacionados à API Vertex AI e Gemini, consulte Preços da Vertex AI.
Alternativa de design
Embora este documento se concentre na edição no local ou na edição na nuvem do ABAP SDK for Google Cloud, você pode conseguir resultados semelhantes usando a edição SAP BTP do ABAP SDK for Google Cloud. O SDK da Vertex AI para ABAP não está disponível para o ambiente SAP BTP, mas você pode usar o exemplo de código fornecido neste documento para a edição local do SDK, ajustá-lo e criar soluções semelhantes no seu ambiente SAP BTP.
A seguir
- Para saber mais sobre o SDK da Vertex AI para ABAP, consulte Visão geral do SDK da Vertex AI para ABAP.
- Para saber mais sobre o SDK do ABAP para Google Cloud, consulte Visão geral do SDK do ABAP para Google Cloud.
Se você precisar de ajuda para resolver problemas com o SDK ABAP para Google Cloud, faça o seguinte:
- Consulte o guia de solução de problemas do ABAP SDK for Google Cloud.
- Faça suas perguntas e discuta o SDK ABAP para Google Cloud com a comunidade nos Fóruns do Cloud.
- Colete todas as informações de diagnóstico disponíveis e entre em contato com o Cloud Customer Care. Para mais informações sobre como entrar em contato com o atendimento ao cliente, consulte Como receber suporte para o SAP no Google Cloud.
Colaboradores
Autores: Ameya Suvarna | Líder da equipe de engenheiros de aplicativos SAP
Outros colaboradores: Vikash Kumar | Redator técnico