Moteur de règles métier Gemini pour SAP

Ce document décrit une architecture de référence pour créer un moteur de règles métier basé sur de grands modèles de langage (LLM, Large Language Models), tels que Gemini, afin d'automatiser la prise de décision dans vos applications métier SAP. Il utilise les différentes fonctionnalités d'intégration du SDK ABAP pour Google Cloud.

Ce document s'adresse aux développeurs ABAP, aux architectes de solutions SAP et aux architectes cloud. Ce document suppose que vous avez une connaissance de base du SDK ABAP pour Google Cloud, du SDK Vertex AI pour ABAP et d'une introduction de base aux LLM.

Qu'est-ce qu'un moteur de règles métier ?

Un moteur de règles métier (BRE) est un système logiciel qui vous permet de définir, de déployer et d'exécuter des règles métier. Ces règles sont essentiellement des instructions logiques qui dictent le fonctionnement de votre entreprise. Au lieu de coder en dur les règles métier dans vos applications, un moteur de règles d'entreprise externalise les instructions logiques, ce qui permet de gérer et de modifier efficacement les règles.

Une ABR basée sur Gemini utilise les fonctionnalités avancées de traitement du langage et de raisonnement de Gemini, le modèle d'IA de nouvelle génération de Google, pour automatiser la prise de décision en fonction d'un dépôt d'invites conçues qui fonctionnent comme des règles métier. Ces invites, conçues avec des instructions spécifiques et des formats de sortie attendus, guident Gemini dans l'analyse des données, l'identification des tendances et la prise de décisions de manière cohérente avec la logique métier prédéfinie.

Architecture

Le schéma suivant illustre une architecture de référence pour la création d'une analyse des risques de l'entreprise basée sur Gemini pour les applications SAP:

Moteur de règles métier Gemini pour SAP

Cette architecture de référence comprend les composants suivants:

Composant Sous-système Détails
1 SAP ERP Un système ERP SAP tel que SAP S/4HANA, qui utilise une analyse des risques et des opportunités basée sur Gemini pour obtenir des insights permettant de prendre des décisions automatisées. En fonction de votre cas d'utilisation, vous fournissez au module BRE un ID de règle et les données d'entrée nécessaires.
2 Module BRE Le module BRE utilise le SDK ABAP pour Google Cloud pour récupérer les règles configurées à partir de Cloud Storage et appelle Gemini à l'aide du SDK Vertex AI pour ABAP pour traiter les règles.
3 Dépôt de règles Stocke les règles (invites conçues) dans Cloud Storage sous la forme de fichiers texte, tels que .txt ou .prompt, avec une convention d'attribution de noms cohérente. Par exemple, RiskShiftingClause.prompt. Pour une gestion structurée des requêtes conçues, vous pouvez également envisager d'utiliser une base de données telle que Cloud SQL.
4 Processeur de règles Le SDK Vertex AI pour ABAP envoie les données d'entrée (par exemple, les instructions de livraison) et la règle récupérée (invite) à Gemini. Gemini traite l'invite et les données d'entrée, effectue une analyse et renvoie les résultats au format spécifié.

Produits utilisés

Cette architecture de référence utilise les produits Google Cloud suivants :

  • SDK ABAP pour Google Cloud: vous aide à développer des applications ABAP qui connectent vos systèmes SAP aux services Google Cloud, tels que Cloud Storage.

  • SDK Vertex AI pour ABAP: vous permet d'utiliser Vertex AI de Google dans votre environnement SAP. Cela simplifie la création de fonctionnalités optimisées par l'IA dans vos applications SAP.

  • Cloud Storage: service cloud permettant de stocker et d'accéder à n'importe quelle quantité de données en ligne.

  • Vertex AI: vous permet de créer, de déployer et d'ajuster des modèles de machine learning pour diverses applications.

Cas d'utilisation

Imaginons que votre entreprise reçoive des bons de commande entrants au format PDF et utilise un processus automatisé pour générer des bons de commande dans SAP. Vous devez mettre à jour ce processus pour identifier et atténuer les clauses de transfert de risque figurant dans les commentaires de livraison des bons de commande entrants.

Les clauses de transfert de risque dans un contrat sont des conditions qui transfèrent le risque d'une partie à une autre. Ne pas identifier et traiter ces clauses peut entraîner des coûts inattendus, des batailles juridiques et des dommages à la réputation de votre entreprise.

Voici un exemple de clause de transfert de risque rédigée dans le commentaire de livraison d'un bon de commande.

"Le vendeur garantit que les produits sont exempts de défauts pendant une période de dix ans à compter de la date de livraison."

Vous devez écrire une règle pour les éléments suivants:

  • Identifiez et catégorisez les clauses de transfert de risque.
  • Expliquez pourquoi vous considérez cet élément comme un signal d'alerte potentiel.
  • Fournissez des recommandations pour atténuer le risque.

Vous pouvez créer une règle de réponse basée sur l'événement avec Gemini pour générer une réponse JSON intelligente, qui permet à votre application métier SAP de prendre des décisions automatisées, de déclencher un rejet de processus ou d'initier des validations humaines en aval.

Exemples de clauses de transfert de risque

Le tableau suivant présente des exemples de clauses de transfert de risque que vous pouvez trouver dans les bons de commande entrants:

Catégorie du problème Exemple de clause (instructions de livraison) Problèmes potentiels
Indemnisation excessive Le Vendeur doit indemniser l'Acheteur contre toutes les réclamations, pertes, dommages et dépenses, y compris, mais sans s'y limiter, les honoraires d'avocat, découlant des produits ou en rapport avec eux. Cela peut poser problème si la clause est trop large et rend le vendeur responsable d'événements imprévus ou d'un usage abusif par le client.
Extension excessive de la confidentialité Toutes les informations divulguées par l'Acheteur au Vendeur, y compris, mais sans s'y limiter, les prix, les spécifications et les plans marketing, sont considérées comme confidentielles et appartiennent à l'Acheteur. Cela peut l'empêcher d'utiliser ses connaissances générales du secteur ou de travailler avec d'autres clients.
Loi applicable ambiguë Le présent contrat est régi par les lois de l'emplacement, par exemple l'État de l'Illinois. Cela peut entraîner des conflits de lois si l'acheteur et le vendeur se trouvent dans des juridictions différentes.
Limitation liée à la force majeure Le Vendeur ne sera pas exonéré de l'exécution de ses obligations au titre du présent Contrat en raison d'un événement de force majeure, y compris un cas de force majeure naturelle, une guerre ou un acte de terrorisme. Cela pourrait rendre le vendeur responsable d'événements hors de son contrôle.
Ambiguïté concernant la propriété intellectuelle Tous les droits de propriété intellectuelle sur les produits appartiennent à l'acheteur. Cela peut être un signal d'alerte si le vendeur est originaire d'un pays soumis à des sanctions ou s'il a des liens avec un tel pays.

Exemple de requête conçue

Cette section décrit un exemple de requête conçue à l'aide du framework RTF. Le framework RTF (Role, Task, Format) de l'ingénierie des requêtes signifie "Rôle, tâche et format". C'est un moyen efficace de structurer vos requêtes pour obtenir de meilleurs résultats et plus cohérents de la part des LLM tels que Gemini.

  • Rôle: persona que vous souhaitez que le LLM adopte, par exemple "expert commercial" ou "conseiller juridique".
  • Tâche: action spécifique pour le LLM, par exemple "résumer ce texte" ou "analyser quelque chose".
  • Format: structure de sortie souhaitée, telle qu'une liste ou un fichier JSON.

Pour en savoir plus sur les stratégies d'invite courantes que vous pouvez utiliser pour affecter les réponses du modèle, consultez la section Présentation des stratégies d'invite.

La requête suivante sert de règle de définition pour aider Gemini à identifier les problèmes tels que la clause de transfert de risque:

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."
}

Vous pouvez stocker cette invite dans un dépôt tel que Cloud Storage. Les données d'entrée peuvent être transmises par les transactions SAP au module BRE.

Vous utilisez ensuite le SDK ABAP pour Google Cloud pour récupérer l'invite à partir de Cloud Storage et la transmettre à Gemini pour l'exécution, à l'aide du SDK Vertex AI pour ABAP.

L'exemple de réponse JSON est généré par Gemini pour cet exemple de clause de transfert de risque.

L'exemple de code suivant montre comment récupérer les règles et les utiliser dans votre code. Il part du principe que vous implémentez un service BRE en tant que classe ABAP, telle que 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 ).

Remplacez les éléments suivants :

  • CLIENT_KEY: clé client configurée pour l'authentification auprès de Vertex AI et de Cloud Storage.
  • MODEL_KEY: nom de la clé du modèle pour accéder au LLM, qui est configuré dans les paramètres de génération du modèle.

La méthode execute_rule effectue les opérations suivantes:

  1. Lit le fichier de règles à partir de Cloud Storage à l'aide de la classe /GOOG/CL_STORAGE_V1.

  2. Envoie les règles de traitement à Gemini, qui est défini comme instruction pour le modèle, à l'aide de la classe /GOOG/CL_GENERATIVE_MODEL. Le modèle génère ensuite une réponse JSON.

Voici l'exemple de code complet à titre de référence:

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.

Considérations de conception

Cette section fournit des conseils pour vous aider à utiliser cette architecture de référence afin de développer une ou plusieurs architectures répondant à vos exigences spécifiques en termes de sécurité, de confidentialité, de conformité, de coût et de performances.

Sécurité, confidentialité et conformité

La sécurité et la conformité sont des responsabilités partagées. Pour en savoir plus, consultez la page Responsabilité partagée de Vertex AI.

Pour en savoir plus sur la manière dont Gemini utilise vos données, consultez Comment Gemini pour Google Cloud utilise vos données.

Coût

Pour obtenir une estimation du coût des ressources Google Cloud telles que Cloud Storage, utilisez le simulateur de coût Google Cloud.

Pour en savoir plus sur les tarifs de Vertex AI et de l'API Gemini, consultez la page Tarifs de Vertex AI.

Alternative de conception

Bien que ce document se concentre sur l'édition sur site ou toute édition cloud du SDK ABAP pour Google Cloud, vous pouvez obtenir des résultats similaires en utilisant l'édition SAP BTP du SDK ABAP pour Google Cloud. Le SDK Vertex AI pour ABAP n'est pas disponible pour l'environnement SAP BTP, mais vous pouvez utiliser l'exemple de code fourni dans ce document pour l'édition sur site du SDK, l'ajuster et créer des solutions similaires dans votre environnement SAP BTP.

Étape suivante

Contributeurs

Auteurs : Ameya Suvarna | Responsable d'équipe d'ingénieurs d'applications SAP

Autres contributeurs : Vikash Kumar | Rédacteur technique