Concevoir un sous-système de mise en service dans SAP pour les applications d'IA générative compatibles avec le RAG

Ce document décrit une architecture de référence pour concevoir un sous-système de traitement dans SAP à utiliser avec des applications d'IA générative compatibles avec la génération augmentée de récupération (RAG). Pour s'intégrer aux services Google Cloud requis pour créer des applications d'IA générative compatibles avec RAG, cette architecture de référence utilise l'édition sur site ou toute édition cloud du SDK ABAP pour Google Cloud.

Ce document s'adresse aux développeurs ABAP, aux architectes de solutions SAP et aux architectes cloud. Nous partons du principe que vous connaissez la terminologie de Vector Search et les concepts de RAG.

Un sous-système de mise en service est un composant important d'une application d'IA générative compatible avec RAG, car il gère le flux de requêtes et de réponses entre l'application et ses utilisateurs. Le sous-système de diffusion décrit dans ce document permet à vos applications d'accéder aux données d'entreprise SAP et de les utiliser pour fournir du contexte aux grands modèles de langage (LLM), ce qui peut aider à générer des résultats plus précis et fiables.

En combinant les LLM Gemini aux données et processus d'entreprise SAP, vous pouvez bénéficier des avantages suivants:

  • Amélioration de la précision: l'accès à un plus grand nombre d'informations permet de prendre des décisions plus précises et éclairées, basées sur vos données d'entreprise.
  • Amélioration de l'expérience utilisateur: les informations personnalisées et contextuelles améliorent la satisfaction des utilisateurs grâce à une réponse du modèle plus fiable.

Architecture

Le schéma suivant montre les composants d'un sous-système de mise en service dans SAP:

Sous-système de mise en service dans SAP

Comme le montre l'image précédente, l'architecture du sous-système de mise en service comprend les composants suivants:

Nombre Composant Détails
1 Sous-système de mise en service Le sous-système de mise en service est chargé de récupérer les informations pertinentes à partir des sources de données. Il enrichit les informations à l'aide d'une requête, interagit avec les modèles d'IA générative et renvoie la réponse finale à l'utilisateur.
2 SDK ABAP pour Google Cloud Le SDK gère la communication entre le sous-système de mise en service et divers services Google Cloud .
3 Module de fonction SAP Lorsque votre ensemble de données est petit et se trouve dans vos systèmes SAP, vous pouvez utiliser les modules de fonction SAP pour créer votre pipeline de récupération d'informations. Vous pouvez récupérer des données à partir d'un module de fonction SAP à l'aide de requêtes SELECT, d'appels BAPI ou d'appels de fonction SAP avec Gemini.
4 Produits Vector Search Lorsque vos données d'entreprise sont volumineuses et que vous souhaitez une application RAG avec une latence minimale, vous pouvez créer votre pipeline de récupération à l'aide de la recherche vectorielle. Vous pouvez effectuer une recherche sémantique sur vos données d'entreprise stockées sous forme d'embeddings dans une base de données vectorielle telle que Cloud Storage, Vertex AI Feature Store ou BigQuery.
5 Modèles Vertex AI Gemini Modèles Gemini Vertex AI qui génèrent des réponses basées sur vos données d'entreprise.

Sous-système de mise en service

Le sous-système de mise en service d'une solution d'IA générative se compose des sous-composants suivants:

Récupération d'informations

Lorsque les utilisateurs envoient des requêtes à l'application d'IA générative via un frontend, le sous-système de mise en service récupère des informations à partir d'une source de données. Pour récupérer des informations à partir d'une source de données, vous pouvez choisir une méthode adaptée à votre cas d'utilisation:

  • Récupérer des informations à l'aide de Vector Search
  • Récupérer des informations sans Vector Search

Lorsque vos données d'entreprise sont volumineuses (données structurées ou non structurées) et que vous souhaitez une application RAG avec une latence minimale, nous vous recommandons de créer votre pipeline de récupération à l'aide de la recherche vectorielle. Vector Search peut exécuter des recherches textuelles et multimodales sur des milliards d'enregistrements en quelques millisecondes.

Pour utiliser Vector Search pour la récupération d'informations, vous devez configurer une base de données vectorielle afin de stocker les données d'entreprise sous forme d'embeddings vectoriels. Pour savoir comment insérer des données d'entreprise dans une base de données vectorielle, consultez Créer un sous-système d'ingestion de données dans SAP pour les applications d'IA générative compatibles avec le RAG.

Si votre ensemble de données est petit et se trouve dans vos systèmes SAP, vous pouvez récupérer des informations à l'aide de requêtes SELECT, d'appels SAP BAPI ou d'appels de fonction SAP avec Gemini pour enrichir le contexte du modèle.

Augmentation des informations

Pour fournir au modèle un contexte spécifique à l'entreprise, nous vous recommandons d'enrichir vos requêtes avec des informations pertinentes provenant de vos systèmes SAP.

Après avoir obtenu les données supplémentaires, ajoutez-les au contexte du modèle. Cette augmentation fournit au modèle le contexte nécessaire pour formuler une réponse à l'aide des informations d'entreprise ajoutées.

Pour enrichir les données récupérées dans le contexte du modèle, ajoutez-les ou concatenatez-les à la requête d'entrée du modèle. Lorsque vous ajoutez les données, vous pouvez leur ajouter un préfixe ou un suffixe avec du texte pertinent pour indiquer qu'il s'agit d'un contexte supplémentaire avec l'invite.

Génération de réponses

Pour appeler un modèle d'IA Gemini avec l'invite avancée, utilisez le composant d'appelant de modèle génératif du SDK Vertex AI pour ABAP.

Cette approche garantit que la réponse générée est non seulement pertinente pour la requête de l'utilisateur, mais qu'elle est également basée sur vos données propres à l'entreprise, ce qui permet d'obtenir des résultats plus précis et plus pertinents.

Cas d'utilisation

Une application d'IA générative compatible avec RAG peut être utilisée pour générer des mises à jour rapides sur le stock de matériaux dans un entrepôt à l'aide de requêtes en langage naturel.

Imaginons que vous implémentiez une application d'IA générative pour les employés d'un entrepôt d'une entreprise qui fabrique et expédie des meubles, des articles de décoration et des accessoires pour la maison.

Pour gérer efficacement l'inventaire de l'entrepôt et la chaîne d'approvisionnement, l'application d'IA générative fournit des insights rapides sur le stock de matières à l'aide de requêtes en langage naturel, via une application Web SAP. Un exemple de requête de ce type peut être la détermination du nombre d'articles actuellement en stock pour un matériau spécifique.

Ces informations sont stockées dans les données produit des tables de base de données SAP, qui peuvent représenter une liste énorme d'articles pour une grande entreprise d'ameublement. Les employés de l'entrepôt doivent obtenir des réponses de l'application SAP qui sont basées sur les informations des systèmes SAP (source unique de référence). Ces informations leur permettent de prendre des décisions rapides et efficaces, par exemple:

  • Disponibilité des stocks: un matériau particulier est-il en stock ?
  • Niveaux d'inventaire: combien d'unités d'un matériau sont disponibles ?
  • Planification de la production: quelle doit être la cible de fabrication d'un matériau pour répondre à la prochaine commande entrante ?

Déploiement

Cette section décrit l'implémentation d'un sous-système de traitement pour le cas d'utilisation d'entrepôt. Il explique comment utiliser le SDK Vertex AI pour ABAP, intégré à la dernière version du SDK ABAP pour Google Cloud, pour récupérer des informations et interagir avec des modèles Gemini.

Pour le cas d'utilisation d'un entrepôt, notez que les informations sur les stocks dans SAP sont associées à un ID de matière unique pour chaque produit. Chaque produit dispose également d'attributs descriptifs stockés dans SAP, tels que son nom, une description détaillée, sa catégorie et d'autres propriétés pertinentes. Ces descriptions textuelles sont converties en représentations numériques appelées "embeddings" et stockées dans une base de données vectorielle. Chaque intégration est associée à son ID de matériau correspondant, ce qui permet de rechercher et d'analyser efficacement les informations produit.

Une fois votre base de données de vecteurs mise à jour, vous pouvez procéder comme suit pour exécuter la requête de recherche "Quel est le nombre actuel d'articles en stock pour un produit ?" :

  • Effectuez une recherche vectorielle dans la base de données vectorielle à l'aide de la requête pour récupérer l'ID du matériau.

  • Interrogez les tables SAP et appelez SAP BAPI pour obtenir la quantité en stock de l'ID de matière.

  • Augmentez la quantité de stock dans le contexte du modèle.

Si vous choisissez un indice vectoriel comme base de données vectorielle, vous pouvez utiliser le SDK Vertex AI pour ABAP pour appeler une recherche vectorielle directement depuis ABAP. Pour en savoir plus, consultez l'architecture de référence Vertex AI Vector Search pour les applications SAP intelligentes.

Voici les étapes d'implémentation d'un sous-système de mise en service:

  1. Pour récupérer l'ID de matière du cas d'utilisation d'entrepôt, vous pouvez utiliser la recherche vectorielle.

    L'exemple de code suivant montre comment récupérer l'ID de matériau à l'aide de la recherche vectorielle:

    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.
    

    Si votre ensemble de données est petit et se trouve dans vos systèmes SAP, pour trouver l'ID de matière du cas d'utilisation d'entrepôt, vous pouvez utiliser des requêtes SELECT avec la description de la matière, puis interroger la table SAP pour obtenir la quantité en stock.

    L'exemple de code suivant montre comment récupérer les informations sur le stock de matières à l'aide de requêtes 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. Pour ajouter les données récupérées à la requête d'entrée, concatenatez le stock disponible pour le matériel à la requête avec le préfixe "Stock disponible".

    L'exemple de code suivant montre comment ajouter les données récupérées à la requête d'entrée:

    * Augment retrieved data to the input prompt
    lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory.
    
    
  3. Pour appeler un modèle d'IA Gemini avec l'invite avancée, utilisez le composant d'appel du modèle génératif du SDK Vertex AI pour ABAP.

    L'exemple de code suivant montre comment appeler le modèle avec une invite avancée:

    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.
    
    

Considérations de conception

Cette section fournit des conseils pour vous aider à utiliser cette architecture de référence afin de développer des architectures qui vous aident à répondre à 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 l'engagement de Google Cloudconcernant la confidentialité des données, consultez le Centre de ressources sur la confidentialité.

Optimisation des coûts

Si vous utilisez Vector Search pour récupérer des informations pour RAG, pour réduire vos coûts, envisagez de choisir des tailles de fragments et des embeddings de dimension inférieure pour vos index, ce qui vous permet d'utiliser une machine de calcul plus petite pour déployer les index.

Vertex AI est une offre facturable de Google Cloud. Pour en savoir plus sur les tarifs, consultez les pages Tarifs de Vertex AI et Tarifs de Vector Search. Pour générer une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.

Optimisation des performances

Si vous utilisez la recherche vectorielle pour récupérer des informations pour le RAG, choisissez des tailles de fragments plus élevées lors de la création de votre index et des machines de calcul hautes performances lors du déploiement de votre index afin d'améliorer la latence de recherche des grands ensembles de données. Pour en savoir plus sur les tailles de fragments pour un index, consultez la section Taille de l'index.

Pour améliorer la pertinence des réponses de recherche, générez des embeddings de vos données d'entreprise dans des dimensions plus élevées. Les machines de calcul et les dimensions d'encapsulation plus élevées sont coûteuses. Pour générer une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.

Étape suivante

Contributeurs

Auteur : Devesh Singh | Ingénieur des applications SAP

Autre contributeur : Vikash Kumar | Rédacteur technique