Motore di regole aziendali basato su Gemini per SAP

Questo documento descrive un'architettura di riferimento per la creazione di un motore di regole aziendali basato su modelli linguistici di grandi dimensioni (LLM), come Gemini, per automatizzare il processo decisionale all'interno delle applicazioni aziendali SAP. Utilizza le varie funzionalità di integrazione dell'ABAP SDK per Google Cloud.

Il pubblico di destinazione di questo documento include sviluppatori ABAP, architetti di soluzioni SAP e architetti cloud. Il documento presuppone che una conoscenza di base dell'SDK ABAP per Google Cloud, dell'SDK Vertex AI per ABAP, e un'introduzione di base agli LLM.

Che cos'è un motore di regole aziendali (BRE)?

Un motore delle regole aziendali (BRE) è un sistema software che ti consente di definire, ed eseguire regole aziendali. Queste regole sono essenzialmente istruzioni logiche che determinano il funzionamento della tua attività. Invece di impostare come hardcoded l'attività nelle applicazioni, un BRE esternalizza le istruzioni logiche, rendendo efficiente la gestione e la modifica delle regole.

Un BRE basato su Gemini utilizza le funzionalità avanzate di elaborazione del linguaggio e di ragionamento di Gemini, il modello di IA di nuova generazione di Google, per automatizzare il processo decisionale in base a un repository di prompt progettati che fungono da regole aziendali. Questi prompt, creati con istruzioni specifiche e formati di output previsti, guidano Gemini nell'analisi dei dati, nell'identificazione di pattern e nel prendere decisioni in modo coerente con la logica aziendale predefinita.

Architettura

Il seguente diagramma mostra un'architettura di riferimento per creando un BRE basato su Gemini per le applicazioni SAP:

Motore di regole di business basato su Gemini per SAP

Questa architettura di riferimento include i seguenti componenti:

Componente Sottosistema Dettagli
1 ERP SAP Un sistema SAP ERP come SAP S/4HANA, che utilizza un sistema BRE basato su Gemini per ricavarne insight per il processo decisionale automatizzato. In base al tuo caso d'uso, fornisci al modulo BRE un ID regola e i dati di input necessari.
2 Modulo BRE Il modulo BRE utilizza l'SDK ABAP per Google Cloud per recuperare le regole configurate da Cloud Storage e chiama Gemini utilizzando l'SDK Vertex AI per ABAP per elaborare le regole.
3 Repository di regole Memorizza le regole (prompt creati in base a dati) in Cloud Storage come file di testo, ad esempio .txt o .prompt, con una convenzione di denominazione coerente. Ad esempio: RiskShiftingClause.prompt. Per la gestione strutturata dei prompt progettati, puoi anche valuta di utilizzare un database come Cloud SQL.
4 Processore delle regole L'SDK Vertex AI per ABAP invia i dati di input (ad es. istruzioni per la consegna) e la regola recuperata (prompt) a Gemini. Gemini elabora il prompt e i dati di input, esegue l'analisi e restituisce i risultati nel formato specificato.

Prodotti utilizzati

Questa architettura di riferimento utilizza i seguenti prodotti Google Cloud:

  • SDK ABAP per Google Cloud: aiuta a sviluppare applicazioni ABAP che si connettono dai tuoi sistemi SAP ai servizi Google Cloud, di archiviazione ideale in Cloud Storage.

  • SDK Vertex AI per ABAP: consente di utilizzare Vertex AI di Google all'interno del tuo ambiente SAP. Ciò semplifica la creazione basata sull'AI delle tue applicazioni SAP.

  • Cloud Storage: un servizio cloud per l'archiviazione e accedendo a qualsiasi quantità di dati online.

  • Vertex AI: consente di creare, eseguire il deployment e scalare i modelli di machine learning per varie applicazioni.

Caso d'uso

Considera uno scenario in cui la tua azienda riceve ordini di acquisto in entrata PDF e utilizza un processo automatizzato per generare ordini di vendita in SAP. Devi aggiornare questo processo per identificare e mitigare le clausole di riskshift presente nei commenti relativi alla consegna degli ordini di acquisto in arrivo.

Le clausole di variazione del rischio in un contratto sono termini che trasferiscono il rischio da un tra una parte e un'altra. Il mancato riconoscimento e l'errata gestione di queste clausole può colpire la tua azienda con costi imprevisti, battaglie legali e danni alla reputazione.

Di seguito è riportato un esempio di clausola di spostamento del rischio scritta nella richiesta di un documento di ordine di acquisto.

"Il venditore garantisce che i prodotti saranno esenti da difetti per un periodo di dieci anni dalla data di consegna".

Devi scrivere una regola per quanto segue:

  • Identifica e classifica le clausole di trasferimento del rischio.
  • Fornisci una spiegazione sul motivo per cui viene considerato un potenziale segnale di allarme.
  • Fornire consigli su come mitigare il rischio.

Puoi creare un BRE con Gemini per generare un Risposta JSON, che consente alla tua applicazione aziendale SAP di prendere prendere le decisioni, attivare eventuali rifiuti dei processi o avviare convalide umane downstream.

Clausole di trasferimento del rischio di esempio

Nella tabella seguente sono elencati gli esempi di clausole di variazione del rischio che si trovano negli ordini di acquisto in entrata:

Categoria problema Clausola di esempio (Istruzioni per la consegna) Problemi potenziali
Indennizzo eccessivo Il Venditore è tenuto a indennizzare l'acquirente da qualsiasi rivendicazione, perdita, danno e spesa, incluse, a titolo esemplificativo, le spese legali, derivanti da o relative ai prodotti. Questo potrebbe rappresentare un problema se è troppo generico e ritiene il venditore responsabile per eventi imprevisti o uso improprio da parte del cliente.
Estensione eccessiva della riservatezza Tutte le informazioni divulgate dall'acquirente al venditore, inclusi, a titolo esemplificativo, prezzi, specifiche e piani di marketing, saranno considerate riservate e di proprietà dell'acquirente. Questo potrebbe compromettere la capacità del venditore di utilizzare le conoscenze generali del settore o di lavorare con altri clienti.
Legislazione vigente ambigua Il presente contratto sarà regolato dalle leggi della località, ad esempio lo stato dell'Illinois. Ciò potrebbe portare a conflitti di legge se l'acquirente e il venditore si trovano in giurisdizioni diverse.
Limitazione di forza maggiore Il Venditore non potrà essere esonerato dall'adempimento del presente Contratto a causa di eventi di forza maggiore, inclusi casi fortuiti, guerre o terrorismo. Ciò potrebbe rendere il venditore responsabile di eventi al di fuori del suo controllo.
Ambiguità in relazione alla proprietà intellettuale Tutti i diritti di proprietà intellettuale sui prodotti appartengono all'acquirente. Questo potrebbe essere un segnale di allarme se il venditore proviene da un paese soggetto a sanzioni o è legato a uno di questi.

Esempio di prompt progettato

La sezione descrive un prompt di esempio progettato utilizzando il framework RTF. Il framework RTF nella ingegneria del prompt è l'acronimo di Role, Task e Format. È un modo efficace per strutturare i tuoi prompt in modo da ottenere risultati migliori e con risultati coerenti da modelli LLM come Gemini.

  • Ruolo: utente tipo che vuoi venga adottato dall'LLM, ad esempio "esperto di vendita" o "consulente legale".
  • Attività: azione specifica per l'LLM, ad esempio "Riassumi questo testo" o "Esegui l'analisi di qualcosa".
  • Formato: la struttura di output desiderata, ad esempio elenco o JSON.

Per scoprire le strategie di prompting comuni che puoi utilizzare per influenzare le risposte del modello, consulta Panoramica delle strategie di prompt

Il seguente prompt funge da regola distintiva per aiutare Gemini Identificare problemi come la clausola di spostamento del rischio:

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

Puoi archiviare questo prompt in un repository come Cloud Storage. I dati di input possono essere passati dalle transazioni SAP al modulo BRE.

Quindi userai l'SDK ABAP per Google Cloud per recuperare il prompt da Cloud Storage e passarlo a Gemini per l'esecuzione, utilizzando l'SDK Vertex AI per ABAP.

La risposta JSON di esempio viene generata da Gemini per questo di clausola risk-shifting.

Il seguente codice di esempio mostra come recuperare le regole e utilizzarle nel codice. Si presuppone che tu stia implementando un servizio BRE come classe ABAP, ad esempio 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 ).

Sostituisci quanto segue:

  • CLIENT_KEY: la chiave client configurata per l'autenticazione in Vertex AI e Cloud Storage.
  • MODEL_KEY: il nome della chiave del modello per accedere all'LLM, configurato nei parametri di generazione del modello.

Il metodo execute_rule esegue quanto segue:

  1. Legge il file delle regole da Cloud Storage utilizzando /GOOG/CL_STORAGE_V1.

  2. Invia le regole di elaborazione a Gemini, che è impostato come istruzione al modello, usando la classe /GOOG/CL_GENERATIVE_MODEL. Il modello genera quindi una risposta JSON.

Di seguito è riportato il codice di esempio completo per riferimento futuro:

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.

Note sul layout

Questa sezione fornisce indicazioni per aiutarti a utilizzare questa architettura di riferimento per sviluppare una o più architetture che ti consentano di soddisfare i tuoi requisiti specifici in termini di sicurezza, privacy, conformità, costi e prestazioni.

Sicurezza, privacy e conformità

La sicurezza e la conformità sono responsabilità condivise. Per informazioni dettagliate, consulta la sezione Responsabilità condivisa di Vertex AI.

Per informazioni su come Gemini utilizza i tuoi dati: consulta In che modo Gemini per Google Cloud utilizza i dati.

Costo

Per una stima del costo delle risorse Google Cloud come Cloud Storage, utilizza il Calcolatore prezzi di Google Cloud.

Per i prezzi relativi a Vertex AI e all'API Gemini, consulta i prezzi di Vertex AI.

Design alternativo

Sebbene questo documento si concentri sull'edizione on-premise o su qualsiasi versione cloud di ABAP SDK for Google Cloud, puoi ottenere risultati simili utilizzando l'edizione SAP BTP di ABAP SDK for Google Cloud. L'SDK Vertex AI per ABAP non è disponibile per l'ambiente SAP BTP, ma puoi usare l'esempio di codice fornito in questo documento per la versione on-premise dell'SDK, modificala e creare soluzioni simili all'interno dell'ambiente SAP BTP.

Passaggi successivi

Collaboratori

Autori: Ameya Suvarna | Lead del team SAP Application Engineer

Altri collaboratori: Vikash Kumar | Technical Writer