Progettare un sottosistema di pubblicazione in SAP per applicazioni di IA generativa compatibili con RAG

Questo documento descrive un'architettura di riferimento per la progettazione di un sottosistema di servizio in SAP da utilizzare con applicazioni di AI generativa compatibili con la retrieval-augmented generation (RAG). Per l'integrazione con i Google Cloud servizi necessari per creare applicazioni di IA generativa compatibili con RAG, questa architettura di riferimento utilizza l'edizione on-premise o qualsiasi versione cloud di ABAP SDK per Google Cloud.

Questo documento è rivolto a sviluppatori ABAP, architetti di soluzioni SAP e architetti cloud. Si presume che tu abbia familiarità con la terminologia di Vector Search e con i concetti di RAG.

Un sottosistema di pubblicazione è un componente importante di un'applicazione di AI generativa compatibile con RAG perché gestisce il flusso di richieste e risposte tra l'applicazione e i suoi utenti. Il sottosistema di pubblicazione descritto in questo documento consente alle tue applicazioni di accedere e utilizzare i dati aziendali SAP per fornire contesto ai modelli di linguaggio di grandi dimensioni (LLM), che possono contribuire a generare output più accurati e affidabili.

Combinando gli LLM di Gemini con i dati e i processi aziendali SAP, puoi usufruire di vantaggi come:

  • Maggiore precisione: l'accesso a una gamma più ampia di informazioni consente di prendere decisioni più accurate e consapevoli in base ai dati aziendali.
  • Esperienza utente migliorata: informazioni personalizzate e contestualmente pertinenti aumentano la soddisfazione degli utenti con una risposta del modello più affidabile.

Architettura

Il seguente diagramma mostra i componenti di un sottosistema di pubblicazione in SAP:

Sottosistema di servizio in SAP

Come mostrato nell'immagine precedente, l'architettura del sottosistema di pubblicazione include i seguenti componenti:

Numero Componente Dettagli
1 Sottosistema di pubblicazione Il sottosistema di pubblicazione è responsabile del recupero delle informazioni pertinenti dalle origini dati. Amplia le informazioni con un prompt, interagisce con i modelli di IA generativa e restituisce la risposta finale all'utente.
2 ABAP SDK for Google Cloud L'SDK gestisce la comunicazione tra il sottosistema di pubblicazione e vari Google Cloud servizi.
3 Modulo funzionale SAP Quando il set di dati è di piccole dimensioni e si trova all'interno dei tuoi sistemi SAP, puoi utilizzare i moduli di funzione SAP per creare la pipeline di recupero delle informazioni. Puoi recuperare i dati da un modulo di funzione SAP utilizzando query SELECT, chiamate BAPI o chiamate di funzioni SAP con Gemini.
4 Prodotti Vector Search Quando i dati aziendali sono di grandi dimensioni e vuoi un'applicazione RAG con una latenza minima, puoi creare la pipeline di recupero utilizzando Vector Search. Puoi eseguire ricerche semantiche sui tuoi dati aziendali archiviati sotto forma di embedding in un database vettoriale come Cloud Storage, Vertex AI Feature Store o BigQuery.
5 Modelli Vertex AI Gemini Modelli Gemini di Vertex AI che generano risposte basate sui dati aziendali.

Sottosistema di pubblicazione

Il sottosistema di pubblicazione di una soluzione di AI generativa è costituito dai seguenti componenti secondari:

Retrieval delle informazioni

Quando gli utenti inviano richieste all'applicazione di IA generativa tramite un frontend, il sottosistema di pubblicazione recupera le informazioni da un'origine dati. Per recuperare le informazioni da un'origine dati, puoi scegliere un metodo appropriato per il tuo caso d'uso:

  • Recuperare le informazioni utilizzando la ricerca vettoriale
  • Recuperare le informazioni senza la ricerca vettoriale

Quando i dati aziendali sono di grandi dimensioni (strutturati o non strutturati) e vuoi un'applicazione RAG con una latenza minima, ti consigliamo di creare la pipeline di recupero utilizzando la ricerca di vettori. La ricerca vettoriale può eseguire ricerche multimodali e di testo su miliardi di record in pochi millisecondi.

Per utilizzare la ricerca vettoriale per il recupero delle informazioni, devi impostare un database vettoriale per archiviare i dati aziendali sotto forma di embedding vettoriali. Per informazioni su come importare i dati aziendali in un database di vettori, consulta Creare un sottosistema di importazione dei dati in SAP per applicazioni di AI generativa compatibili con RAG.

Se il tuo set di dati è di piccole dimensioni e si trova all'interno dei tuoi sistemi SAP, puoi recuperare le informazioni utilizzando query SELECT, chiamate SAP BAPI o chiamate di funzioni SAP con Gemini per aumentare il contesto del modello.

Aumento delle informazioni

Per fornire al modello il contesto aziendale essenziale, ti consigliamo di arricchire i prompt con informazioni pertinenti dei tuoi sistemi SAP.

Dopo aver ottenuto i dati aggiuntivi, aumentali nel contesto del modello. Questo incremento fornisce al modello il contesto necessario per elaborare una risposta utilizzando le informazioni aziendali aggiunte.

Per integrare i dati recuperati nel contesto del modello, accoda o concatena i dati al prompt di input del modello. Durante l'aggiunta dei dati, puoi anteporre o postporre un testo pertinente per indicare che si tratta di un contesto aggiuntivo insieme al prompt.

Generazione di risposte

Per richiamare un modello di IA Gemini con il prompt aumentato, utilizza il componente di richiamo del modello generativo dell'SDK Vertex AI per ABAP.

Questo approccio garantisce che la risposta generata non sia solo pertinente alla query dell'utente, ma si basi anche sui dati specifici della tua azienda, il che porta a risultati più accurati e significativi.

Caso d'uso

Un'applicazione di AI generativa compatibile con RAG può essere utilizzata per generare aggiornamenti rapidi sullo stock di materiale in un magazzino utilizzando query in linguaggio naturale.

Considera uno scenario in cui stai implementando un'applicazione di IA generativa per i dipendenti del magazzino di un'azienda che produce e spedisce mobili, decorazioni e accessori per la casa.

Per gestire in modo efficiente l'inventario del magazzino e la catena di approvvigionamento, l'applicazione di IA generativa fornisce informazioni rapide sullo stock di materiale utilizzando query basate sul linguaggio naturale tramite un'applicazione web SAP. Un esempio di questa query potrebbe essere determinare il conteggio dell'inventario corrente di un materiale specifico.

Queste informazioni vengono memorizzate nei dati di prodotto nelle tabelle del database SAP, che potrebbero essere un elenco enorme di articoli per una grande azienda di arredamento per la casa. I dipendenti del magazzino devono ricevere risposte dall'applicazione SAP basate sulle informazioni nei sistemi SAP (l'unica fonte attendibile). Queste informazioni consentono di prendere decisioni rapide ed efficienti, ad esempio:

  • Disponibilità in magazzino: un determinato materiale è disponibile?
  • Livelli di inventario: quante unità di un materiale sono disponibili?
  • Pianificazione della produzione: qual è il target di produzione per un materiale per soddisfare il prossimo ordine in entrata?

Deployment

Questa sezione illustra l'implementazione di un sottosistema di pubblicazione per il caso d'uso del magazzino. Descrive in dettaglio come utilizzare l'SDK Vertex AI per ABAP, integrato nella versione più recente dell'SDK ABAP per Google Cloud, per recuperare informazioni e interagire con i modelli Gemini.

Per il caso d'uso del magazzino, tieni presente che le informazioni sulle scorte in SAP sono collegate a un ID materiale univoco per ogni prodotto. Ogni prodotto ha anche attributi descrittivi memorizzati in SAP, come il nome, una descrizione dettagliata, la categoria e altre proprietà pertinenti. Queste descrizioni testuali vengono convertite in rappresentazioni numeriche chiamate "incorporamenti" e archiviate in un database vettoriale. Ogni incorporamento è collegato al relativo ID materiale, consentendo una ricerca e un'analisi efficienti delle informazioni sul prodotto.

Una volta aggiornato il database di vettori, per eseguire la query di ricerca "Qual è il conteggio corrente dell'inventario per un prodotto", puoi procedere nel seguente modo:

  • Esegui una ricerca vettoriale nel database vettoriale con la query per recuperare l'ID materiale.

  • Esegui query sulle tabelle SAP e chiama SAP BAPI per ottenere la quantità di magazzino per l'ID materiale.

  • Aumenta la quantità di magazzino nel contesto del modello.

Se il database vettoriale scelto è un indice vettoriale, puoi utilizzare l'SDK Vertex AI per ABAP per richiamare una ricerca vettoriale direttamente da ABAP. Per ulteriori informazioni, consulta l'architettura di riferimento Vertex AI Vector Search per applicazioni SAP intelligenti.

Di seguito sono riportati i passaggi per l'implementazione di un sottosistema di pubblicazione:

  1. Per recuperare l'ID materiale per il caso d'uso del magazzino, puoi utilizzare la ricerca di vettori.

    Il seguente esempio di codice illustra come recuperare l'ID materiale utilizzando la ricerca di vettori:

    DATA:
    lv_prompt              TYPE string,
    lv_available_quantity  TYPE mng01,
    ls_return              TYPE bapireturn,
    lv_available_inventory TYPE string,
    lt_wmdvsx              TYPE STANDARD TABLE OF bapiwmdvs,
    lt_wmdvex              TYPE STANDARD TABLE OF bapiwmdve.
    
    lv_prompt = 'What is the current inventory count for Cymbal Emerald Flower Vase'.
    
    * Get material id based on the prompt through vector search
    TRY.
      DATA(lo_vector_index) = NEW /goog/cl_vector_search( iv_search_key = 'SEARCH_KEY' ).
      DATA(ls_material) = lo_vector_index->find_neighbors_by_string(
                                              iv_search_string        = lv_prompt
                                              iv_embeddings_model_key = 'EMBEDDINGS_MODEL_KEY'
                                          )->get_nearest_neighbor( ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
      cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ).
      EXIT.
    
    ENDTRY.
    
    DATA(lv_material_id) = ls_material-datapoint_id.
    
    * Get base unit of measure for the material
    SELECT SINGLE meinh
    FROM marm
    INTO @DATA(lv_meinh)
    WHERE matnr = @lv_material_id.
    IF sy-subrc = 0.
    * Get available stock for the material
    CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
      EXPORTING
        plant      = <SAP_PLANT_ID>
        material   = CONV matnr18( lv_material_id )
        unit       = lv_meinh
      IMPORTING
        av_qty_plt = lv_available_quantity
        return     = ls_return
      TABLES
        wmdvsx     = lt_wmdvsx
        wmdvex     = lt_wmdvex.
    IF ls_return-type = 'S' OR
        ls_return-type IS INITIAL.
    * Prepare available stock value in base unit of measure
      lv_available_inventory = |{ 'Avaiblable Stock = ' } | &&
                                  lv_available_quantity && | { lv_meinh }|.
    ELSE.
      cl_demo_output=>display( 'Material availability lookup not successful:' && ls_return-message ).
    
    ENDIF.
    
    ENDIF.
    

    Se il set di dati è di piccole dimensioni e si trova all'interno dei tuoi sistemi SAP, per trovare l'ID materiale per il caso d'uso del magazzino, puoi utilizzare le query SELECT con la descrizione del materiale e poi eseguire una query sulla tabella SAP per ottenere la quantità di magazzino.

    Il seguente esempio di codice illustra come recuperare le informazioni sullo stock di materiale utilizzando le query SELECT:

    DATA:
    lv_prompt              TYPE string,
    lv_available_quantity  TYPE mng01,
    ls_return              TYPE bapireturn,
    lv_available_inventory TYPE string,
    lt_wmdvsx              TYPE STANDARD TABLE OF  bapiwmdvs,
    lt_wmdvex              TYPE STANDARD TABLE OF  bapiwmdve,
    lr_maktx               TYPE RANGE OF maktx,
    ls_maktx               LIKE LINE OF lr_maktx.
    
    lv_prompt = 'What is the current inventory count for Cymbal Emerald Flower Vase'.
    
    ls_maktx-sign   = 'I'.
    ls_maktx-option = 'CP'.
    ls_maktx-low    = 'Cymbal Emerald Flower Vase'.
    
    APPEND ls_maktx TO lr_maktx.
    
    * Get material id through select statement
    SELECT SINGLE matnr
    FROM makt
    INTO @DATA(lv_material_id)
    WHERE maktx IN @lr_maktx.
    IF sy-subrc <> 0.
    cl_demo_output=>display( 'Material with given description not found' ).
    EXIT.
    
    ENDIF.
    
    * Get base unit of measure for the material
    SELECT SINGLE meinh
    FROM marm
    INTO @DATA(lv_meinh)
    WHERE matnr = @lv_material_id.
    IF sy-subrc = 0.
    * Get available stock for the material
    CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
      EXPORTING
         plant      = <SAP_PLANT_ID>
         material   = CONV matnr18( lv_material_id )
        unit       = lv_meinh
      IMPORTING
         av_qty_plt = lv_available_quantity
        return     = ls_return
       TABLES
        wmdvsx     = lt_wmdvsx
        wmdvex     = lt_wmdvex.
     IF ls_return-type = 'S' OR
        ls_return-type IS INITIAL.
    * Prepare available stock value in base unit of measure
       lv_available_inventory = |{ 'Avaiblable Stock = ' } | &&
                                  lv_available_quantity && | { lv_meinh }|.
    ELSE.
       cl_demo_output=>display( 'Material availability lookup not successful:' && ls_return-message ).
    
    ENDIF.
    
    ENDIF.
    
  2. Per integrare i dati recuperati al prompt di input, concatena lo stock disponibile per il materiale al prompt con il prefisso "Stock disponibile".

    Il seguente esempio di codice illustra come integrare i dati recuperati con la richiesta di input:

    * Augment retrieved data to the input prompt
    lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory.
    
    
  3. Per richiamare un modello di IA Gemini con il prompt aumentato, utilizza il componente di richiamo del modello generativo dell'SDK Vertex AI per ABAP.

    Il seguente esempio di codice illustra come richiamare il modello con il prompt aumentato:

    TRY.
      lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory.
      DATA(lo_model_key) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
       DATA(lv_model_response) = lo_model_key->generate_content( lv_prompt
                                              )->get_text( ).
      IF lv_model_response IS NOT INITIAL.
          cl_demo_output=>display( lv_model_response ).
    
      ENDIF.
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
      cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    
    

Note sul layout

Questa sezione fornisce indicazioni per aiutarti a utilizzare questa architettura di riferimento per sviluppare architetture che ti consentano di soddisfare i tuoi requisiti specifici per 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 sull'impegno di Google Cloudin materia di privacy dei dati, consulta il Centro risorse per la privacy.

Ottimizzazione dei costi

Se utilizzi la ricerca vettoriale per recuperare informazioni per RAG, per ridurre i costi, ti consigliamo di scegliere dimensioni degli shard e embedding di dimensioni inferiori per gli indici, in modo da utilizzare una macchina di calcolo più piccola per il loro dispiegamento.

Vertex AI è un'offerta fatturabile di Google Cloud. Per informazioni sui prezzi, consulta la pagina Prezzi di Vertex AI e Prezzi di Vector Search. Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.

Ottimizzazione delle prestazioni

Se utilizzi la ricerca vettoriale per recuperare informazioni per RAG, per migliorare la latenza per la ricerca di set di dati di grandi dimensioni, ti consigliamo di scegliere dimensioni degli shard più grandi durante la creazione dell'indice e macchine di calcolo ad alte prestazioni durante il deployment dell'indice. Per scoprire di più sulle dimensioni degli shard per un indice, consulta Dimensioni dell'indice.

Per aumentare la pertinenza delle risposte di ricerca, genera embedding dei dati della tua azienda in dimensioni superiori. Le macchine Compute e le dimensioni di incorporamento più elevate sono molto costose. Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.

Passaggi successivi

Collaboratori

Autore: Devesh Singh | SAP Application Engineer

Altro collaboratore: Vikash Kumar | Technical Writer