Motor de reglas de negocio potenciado por Gemini para SAP

En este documento, se describe una arquitectura de referencia para compilar un motor de reglas de negocio potenciado por modelos grandes de lenguaje (LLM), como Gemini, para automatizar la toma de decisiones en tus aplicaciones empresariales de SAP. Usa las diversas capacidades de integración del SDK de ABAP para Google Cloud.

El público objetivo de este documento incluye a desarrolladores de ABAP, arquitectos de soluciones de SAP y arquitectos de nube. En el documento, se da por sentado que tienes un conocimiento básico del SDK de ABAP para Google Cloud, del SDK de Vertex AI para ABAP y una introducción básica a los LLM.

¿Qué es un motor de reglas de negocio (BRE)?

Un motor de reglas de negocio (BRE) es un sistema de software que te permite definir, implementar y ejecutar reglas de negocio. Estas reglas son, en esencia, sentencias lógicas que determinan cómo funciona tu empresa. En lugar de codificar las reglas empresariales en tus aplicaciones, un BRE externaliza las sentencias lógicas, lo que hace que sea eficiente administrar y modificar las reglas.

Un BRE potenciado por Gemini usa las capacidades avanzadas de procesamiento y razonamiento de lenguaje de Gemini, el modelo de IA de nueva generación de Google, para automatizar la toma de decisiones en función de un repositorio de instrucciones diseñadas que funcionan como reglas empresariales. Estas instrucciones, creadas con instrucciones específicas y formatos de salida esperados, guían a Gemini en el análisis de datos, la identificación de patrones y la toma de decisiones de manera coherente con la lógica empresarial predefinida.

Arquitectura

En el siguiente diagrama, se muestra una arquitectura de referencia para crear una BRE potenciada por Gemini para aplicaciones de SAP:

Motor de reglas de negocio potenciado por Gemini para SAP

Esta arquitectura de referencia incluye los siguientes componentes:

Componente Subsistema Detalles
1 SAP ERP Un sistema de ERP de SAP, como SAP S/4HANA, que usa un BRE potenciado por Gemini para obtener estadísticas para la toma de decisiones automatizada Según tu caso de uso, le proporcionas al módulo BRE un ID de regla y los datos de entrada necesarios.
2 Módulo BRE El módulo BRE usa el SDK de ABAP para Google Cloud para recuperar las reglas configuradas de Cloud Storage y llama a Gemini con el SDK de Vertex AI para ABAP para procesar las reglas.
3 Repositorio de reglas Almacena reglas (indicaciones de ingeniería) en Cloud Storage como archivos de texto, como .txt o .prompt, con una convención de nombres coherente. Por ejemplo, RiskShiftingClause.prompt. Para la administración estructurada de instrucciones diseñadas, también puedes considerar usar una base de datos como Cloud SQL.
4 Procesador de reglas El SDK de Vertex AI para ABAP envía los datos de entrada (por ejemplo, las instrucciones de publicación) y la regla recuperada (sugerencia) a Gemini. Gemini procesa la instrucción y los datos de entrada, realiza un análisis y muestra los resultados en el formato especificado.

Productos usados

En esta arquitectura de referencia, se usan los siguientes productos de Google Cloud:

  • SDK de ABAP para Google Cloud: Te ayuda a desarrollar aplicaciones de ABAP que conectan tus sistemas SAP a los servicios de Google Cloud, como Cloud Storage.

  • SDK de Vertex AI para ABAP: Te permite usar Vertex AI de Google en tu entorno de SAP. Esto simplifica la compilación de funciones potenciadas por IA en tus aplicaciones de SAP.

  • Cloud Storage: Es un servicio en la nube para almacenar y acceder a cualquier cantidad de datos en línea.

  • Vertex AI: Te permite compilar, implementar y escalar modelos de aprendizaje automático para varias aplicaciones.

Caso de uso

Imagina una situación en la que tu empresa recibe órdenes de compra entrantes (OC) como archivos PDF y usa un proceso automatizado para generar pedidos de venta en SAP. Debes actualizar este proceso para identificar y mitigar las cláusulas de transferencia de riesgos que se encuentran en los comentarios de entrega de las órdenes de compra entrantes.

Las cláusulas de transferencia de riesgos en un contrato son condiciones que transfieren el riesgo de una parte a otra. Si no identificas y abordas estas cláusulas, tu empresa puede verse sorprendida por costos inesperados, batallas legales y daños a la reputación.

El siguiente es un ejemplo de una cláusula de transferencia de riesgos escrita en el comentario de entrega de un documento de orden de compra.

“El vendedor garantiza que los productos no tendrán defectos durante un período de diez años a partir de la fecha de entrega”.

Debes escribir una regla para lo siguiente:

  • Identifica y categoriza las cláusulas de transferencia de riesgos.
  • Explica por qué se considera un posible indicador de alerta.
  • Proporcionar recomendaciones para mitigar el riesgo

Puedes compilar un BRE con Gemini para generar una respuesta JSON inteligente, lo que permite que tu aplicación empresarial de SAP tome decisiones automatizadas, active cualquier rechazo de proceso o inicie validaciones humanas descendentes.

Ejemplos de cláusulas de transferencia de riesgos

En la siguiente tabla, se enumeran las cláusulas de transferencia de riesgos de muestra que se pueden encontrar en las órdenes de compra entrantes:

Categoría del problema Ejemplo de cláusula (Instrucciones de entrega) Posibles problemas
Exceso de indemnización El Vendedor indemnizará al Comprador contra todas las reclamaciones, pérdidas, daños y gastos, incluidos, sin limitaciones, los honorarios de abogados, que surjan de los productos o estén relacionados con ellos. Esto podría ser problemático si es demasiado amplio y hace que el vendedor sea responsable de eventos imprevistos o de un uso inadecuado por parte del cliente.
Exceso de confidencialidad Toda la información que el comprador divulgue al vendedor, incluidos, sin limitaciones, los precios, las especificaciones y los planes de marketing, se considerará confidencial y de propiedad del comprador. Esto podría dificultar la capacidad del vendedor para usar el conocimiento general de la industria o trabajar con otros clientes.
Ley aplicable ambigua Este Acuerdo se regirá por las leyes de la ubicación, por ejemplo, el estado de Illinois. Esto podría generar conflictos de leyes si el comprador y el vendedor se encuentran en jurisdicciones diferentes.
Limitación de fuerza mayor El Vendedor no estará exento de cumplir con este Acuerdo debido a ningún evento de fuerza mayor, incluidos casos fortuitos naturales, guerra o terrorismo. Esto podría hacer que el vendedor sea responsable de eventos fuera de su control.
Ambigüedad de la propiedad intelectual Todos los derechos de propiedad intelectual de los productos pertenecen al comprador. Esto podría ser un tema importante si el vendedor es de un país sancionado o tiene vínculos con uno.

Ejemplo de instrucción de ingeniería

En la sección, se describe una instrucción de muestra diseñada con el framework de RTF. El framework RTF en la ingeniería de instrucciones significa rol, tarea y formato. Es una forma eficaz de estructurar tus instrucciones para obtener resultados mejores y más coherentes de los LLM, como Gemini.

  • Rol: Es el arquetipo que deseas que adopte el LLM, como “experto en ventas” o “asesor legal”.
  • Tarea: Acción específica para el LLM, como "resumir este texto" o "analizar algo".
  • Formato: Es la estructura de salida deseada, como una lista o un JSON.

Para obtener información sobre las estrategias de instrucción comunes que puedes usar para afectar las respuestas del modelo, consulta Descripción general de las estrategias de instrucción.

La siguiente instrucción actúa como una regla definitoria para ayudar a Gemini a identificar problemas, como la cláusula de transferencia de riesgos:

Marco de trabajo de 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."
}

Puedes almacenar esta instrucción en un repositorio, como Cloud Storage. Las transacciones de SAP pueden pasar los datos de entrada al módulo BRE.

Luego, usa el SDK de ABAP para Google Cloud para recuperar la instrucción de Cloud Storage y pasarla a Gemini para su ejecución con el SDK de Vertex AI para ABAP.

Gemini genera la respuesta JSON de muestra para este ejemplo de cláusula de transferencia de riesgos.

En el siguiente código de muestra, se muestra cómo recuperar las reglas y usarlas en tu código. Se supone que implementas un servicio de BRE como una clase 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 ).

Reemplaza lo siguiente:

  • CLIENT_KEY: La clave de cliente configurada para la autenticación en Vertex AI y Cloud Storage.
  • MODEL_KEY: Es el nombre de la clave de modelo para acceder al LLM, que se configura en los parámetros de generación del modelo.

El método execute_rule realiza lo siguiente:

  1. Lee el archivo de reglas de Cloud Storage con la clase /GOOG/CL_STORAGE_V1.

  2. Envía las reglas de procesamiento a Gemini, que se establece como instrucción para el modelo, con la clase /GOOG/CL_GENERATIVE_MODEL. Luego, el modelo genera una respuesta JSON.

El siguiente es el código de muestra completo para tu referencia:

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.

Consideraciones del diseño

En esta sección, se proporciona orientación para ayudarte a usar esta arquitectura de referencia para desarrollar una o más arquitecturas que te ayuden a cumplir con tus requisitos específicos de seguridad, privacidad, cumplimiento, costo y rendimiento.

Security, privacy, and compliance

La seguridad y el cumplimiento son responsabilidades compartidas. Para obtener información detallada, consulta Responsabilidad compartida de Vertex AI.

Para obtener información sobre cómo Gemini usa tus datos, consulta Cómo Gemini para Google Cloud usa tus datos.

Costo

Para obtener una estimación del costo de los recursos de Google Cloud, como Cloud Storage, usa la calculadora de precios de Google Cloud.

Para obtener información sobre los precios relacionados con Vertex AI y la API de Gemini, consulta los precios de Vertex AI.

Alternativa de diseño

Si bien este documento se enfoca en las ediciones locales o en la nube del SDK de ABAP para Google Cloud, puedes obtener resultados similares con la edición SAP BTP del SDK de ABAP para Google Cloud. El SDK de Vertex AI para ABAP no está disponible para el entorno de SAP BTP, pero puedes usar la muestra de código proporcionada en este documento para la edición local del SDK, ajustarla y compilar soluciones similares en tu entorno de SAP BTP.

¿Qué sigue?

Colaboradores

Autores: Ameya Suvarna | líder de equipo de ingenieros de aplicaciones de SAP

Otros colaboradores: Vikash Kumar | Escritor técnico