Sous-système d'ingestion de données dans SAP pour les applications d'IA générative

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

Une application d'IA générative compatible avec la génération augmentée par récupération (RAG) comporte plusieurs composants, parmi lesquels le sous-système d'ingestion de données est chargé de préparer et de traiter les données d'entreprise. Ce sous-système vous aide à préparer et à stocker vos données d'entreprise en tant qu'embeddings dans une base de données vectorielle, pour des interactions d'IA précises et pertinentes.

Comme de nombreuses entreprises utilisent des systèmes ERP SAP pour stocker leurs données d'entreprise, ce document fournit des conseils sur l'intégration des solutions de stockage de données et des bases de données de recherche vectorielle de Google Cloud dans le cadre de votre sous-système d'ingestion de données. Vous pouvez ainsi faire des choix éclairés et utiliser efficacement les services de Google Cloud pour créer un pipeline robuste et efficace pour vos applications d'IA générative compatibles avec la fonction RAG.

Ce document s'adresse aux développeurs ABAP, aux architectes de solutions SAP et aux architectes cloud. Dans ce document, nous partons du principe que vous connaissez bien la terminologie de la recherche vectorielle et les concepts de RAG.

Architecture

Le schéma suivant illustre une architecture de référence des composants d'un sous-système d'ingestion de données dans SAP:

Sous-système d'ingestion de données dans SAP

Cette architecture de sous-système d'ingestion de données comprend les composants suivants:

# Composant Détails
1 Sous-système d'ingestion de données Prépare et traite les données d'entreprise pour générer des représentations vectorielles continues. Ces embeddings sont ensuite stockés dans une base de données vectorielle appropriée sur Google Cloud. Vous pouvez également stocker vos données d'entreprise sur Google Cloud.
2 SDK ABAP pour Google Cloud Le SDK gère la communication entre le sous-système d'ingestion de données et divers services Google Cloud.
3 Stockage de données Facultatif. Solution de stockage de données Google Cloud, telle que BigQuery ou Cloud Storage, utilisée pour stocker des données d'entreprise, à la fois structurées et non structurées. Pour en savoir plus, consultez Stocker des données d'entreprise dans Google Cloud.
4 Modèle d'embeddings (Vertex AI) Modèles d'IA qui génèrent des représentations vectorielles continues à partir de diverses sources de données d'entreprise.
5 Produits Vector Search Stocke les représentations vectorielles continues dans une base de données vectorielle telle que Cloud Storage ou BigQuery, où vous pouvez effectuer une recherche sémantique.

Sous-système d'ingestion de données

Cette section explique le sous-système d'ingestion de données qui transforme vos données d'entreprise en représentations vectorielles continues et les stocke dans une base de données vectorielle à utiliser avec des applications d'IA générative compatibles avec la fonction RAG. Ce sous-système peut traiter un large éventail de données SAP, y compris des documents, des images, des règles métier et des invites, pour générer des représentations vectorielles continues.

Préparer les données d'entreprise

Avant de déployer votre application d'IA générative compatible avec RAG pour la première fois, vous devez charger des représentations vectorielles continues pour les données d'entreprise existantes à partir de votre système SAP. Pour ce faire, vous pouvez créer de nouveaux programmes par lot ou réutiliser des programmes existants qui peuvent lire vos données d'entreprise par blocs gérables.

Une fois que vous avez effectué le chargement initial des données et des représentations vectorielles continues, votre sous-système d'ingestion de données doit suivre les modifications apportées à vos données SAP. Qu'il s'agisse de nouveaux enregistrements, de mises à jour d'enregistrements existants ou de suppressions, l'index de recherche vectorielle doit refléter ces modifications. Pour ce faire, vous pouvez utiliser des emplacements appropriés dans le framework de développement d'applications SAP, tels que les modules complémentaires Business Add-In (BAdI) et les gestionnaires d'événements RAP. Vos représentations vectorielles continues restent ainsi à jour et vos applications d'IA disposent toujours des informations les plus récentes.

Stocker des données d'entreprise dans Google Cloud (facultatif)

Les systèmes SAP peuvent contenir à la fois des données structurées et non structurées d'entreprise. Vous pouvez également stocker ces données d'entreprise dans Google Cloud pour les récupérer à partir du sous-système de traitement.

Pour stocker vos données d'entreprise, vous pouvez utiliser les services Google Cloud suivants:

  • Pour diffuser des données structurées de SAP vers BigQuery, vous pouvez utiliser BigQuery Connector pour SAP ou la méthode INSERT_ALL_TABLEDATA de la classe /GOOG/CL_BIGQUERY_V2 du SDK ABAP pour Google Cloud.
  • Pour stocker des données non structurées telles que des images et des documents PDF dans Cloud Storage, vous pouvez utiliser la classe /GOOG/CL_STORAGE_V1 du SDK ABAP pour Google Cloud. Pour obtenir un exemple de code illustrant comment importer un objet dans un bucket Cloud Storage, consultez Importer un fichier dans un bucket.
  • Pour configurer Cloud Storage en tant que dépôt de contenu pour SAP, vous pouvez implémenter et personnaliser l'exemple de solution disponible sur GitHub, Google Cloud Storage: serveur de contenu pour SAP.

Générer des embeddings à partir de données d'entreprise

Pour générer des embeddings textuels et multimodaux à partir de vos données d'entreprise, vous pouvez utiliser des modèles d'embedding avec le SDK Vertex AI pour ABAP.

Les embeddings sont essentiellement des codes numériques qui représentent du texte, des images ou des vidéos de manière à capturer leur relation. Les applications utilisent ces codes pour comprendre et générer du langage, en reconnaissant même les significations et les relations les plus complexes dans votre contenu spécifique. Le processus consiste à transformer le texte, les images et les vidéos en listes de nombres, appelés vecteurs, qui sont conçus pour capturer efficacement le sens du contenu d'origine.

Stocker les embeddings

Pour stocker et rechercher efficacement les représentations vectorielles continues générées à partir de vos données d'entreprise SAP, vous pouvez utiliser les produits de recherche vectorielle de Google Cloud, qui servent de base de données vectorielle.

Pour stocker les représentations vectorielles continues de vos données d'entreprise SAP, choisissez une base de données vectorielle dans la liste suivante:

Considérations de conception

Voici les principaux éléments de conception à prendre en compte pour choisir une base de données vectorielle:

  • Performances: facteurs tels que la vitesse d'indexation des nouveaux vecteurs, la vitesse de recherche (latence), la scalabilité, le compromis entre la récupération de tous les résultats pertinents (rappel) et la récupération uniquement des plus pertinents (précision).
  • Caractéristiques des données: la taille des vecteurs d'encapsulation, la taille de l'ensemble de données vectoriels et la distribution des données ont un impact sur les coûts, les performances et l'indexation.
  • Fonctionnalités: fonctions de distance compatibles telles que l'algorithme euclidien et la similarité cosinus, possibilité de filtrer, de combiner la recherche par mot clé et la recherche vectorielle, et compatibilité avec la recherche des plus proches voisins approximatifs (ANN).
  • Intégration: intégration existante et facilité d'ingestion des données à partir de vos applications.
  • Coût: modèle de tarification, coûts de stockage et de requêtes correspondant aux données et au volume de recherches.

Pour permettre une recherche et une analyse efficaces, stockez les représentations vectorielles continues dans une base de données vectorielle, ainsi que les identifiants qui les redirigent vers leurs données sources.

La décision de stocker des données d'entreprise dans une solution de stockage Google Cloud dépend principalement de l'emplacement de votre sous-système de diffusion:

  • Si votre sous-système de traitement est SAP, le stockage des données d'entreprise en dehors de SAP est facultatif, car vous avez déjà accès à vos données d'entreprise dans SAP.

  • Si votre sous-système de traitement se trouve en dehors de SAP, par exemple dans App Engine, vous devrez peut-être stocker vos données d'entreprise dans une solution de stockage Google Cloud appropriée pour une récupération efficace des données. Vous pouvez éviter cela si votre sous-système de traitement peut effectuer des appels à distance dans SAP pour récupérer les données.

Découvrez comment générer et stocker des embeddings.

Cette section explique comment générer et stocker des représentations vectorielles continues à partir de vos données d'entreprise. Il existe deux principaux modèles de génération et de stockage d'embeddings:

  • Générer des embeddings dans SAP: générez des embeddings à partir des données d'entreprise stockées dans votre système ERP SAP à l'aide d'un modèle d'embeddings approprié avec le SDK Vertex AI pour ABAP, puis stockez-les dans une base de données vectorielle.

  • Générer des représentations vectorielles continues dans Google Cloud: générez des représentations vectorielles continues à partir des données d'entreprise stockées sur un support de stockage dans Google Cloud à l'aide d'une approche sans serveur, telle que les fonctions Cloud Run ou BigQuery, et stockez-les dans une base de données vectorielle.

Générer des embeddings dans SAP

Pour générer des embeddings à partir de données d'entreprise SAP localement dans le système SAP, vous pouvez utiliser différents modèles d'embedding avec le SDK Vertex AI pour ABAP. Ces embeddings générés peuvent ensuite être envoyés à une base de données vectorielle appropriée sur Google Cloud à l'aide de l'un des mécanismes d'ingestion intégrés du SDK.

Vous pouvez choisir les données à convertir en représentations vectorielles continues en fonction de vos besoins en termes de fonctionnalités de recherche vectorielle. Pour savoir comment générer des représentations vectorielles continues avec le SDK Vertex AI pour ABAP, consultez la section Générer des représentations vectorielles continues.

Cette section explique les types de données SAP courants et comment générer des embeddings à l'aide du SDK Vertex AI pour ABAP.

Données structurées d'entreprise stockées dans des tables SAP

Vous générez principalement des représentations vectorielles continues pour une ou plusieurs colonnes de texte dans des tables SAP. Par exemple, si vous souhaitez rechercher des fournisseurs par nom, adresse ou numéro de téléphone, vous concatenatez les valeurs de ces colonnes, puis générez un entraînement de texte de cette valeur combinée. Les descriptions dans les tableaux de texte et les textes longs associés aux transactions commerciales sont d'autres valeurs textuelles qui sont de bons candidats pour l'intégration de texte.

L'exemple de code suivant montre comment générer des représentations vectorielles continues de texte et les stocker dans un bucket Cloud Storage:


DATA(lv_supplier) = CONV i_supplier-supplier( 'SUPPLIER' ).

SELECT SINGLE
     concat_with_space( supplierfullname, phonenumber1, 1 )
       AS line
       FROM i_supplier
       WHERE supplier = @lv_supplier
       INTO @DATA(lv_search_string).

DATA(ls_embedding_template) =
  VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
         id = lv_supplier
         content = lv_search_string ).

NEW /goog/cl_embeddings_model(
        iv_model_key = 'EMBEDDING_MODEL_KEY'
        )->gen_text_embeddings_by_struct(
        is_input = ls_embedding_template
        )->send_struct_to_gcs( iv_bucket_name = 'BUCKET_NAME' ).

Remplacez les éléments suivants :

  • SUPPLIER: code alphanumérique unique permettant d'identifier un fournisseur.
  • EMBEDDING_MODEL_KEY: clé du modèle pour générer des représentations vectorielles continues, qui est configurée dans les paramètres de génération du modèle.
  • BUCKET_NAME: nom du bucket Cloud Storage cible.

Images

De nombreux secteurs, y compris la fabrication et le commerce, capturent et stockent des images d'objets commerciaux clés tels que les matières premières, les produits finis et un large éventail d'équipements. Pour permettre une recherche efficace de ces objets d'entreprise à l'aide de descriptions textuelles ou de similarité visuelle, vous pouvez utiliser des embeddings multimodaux.

L'exemple de code suivant montre comment générer des représentations vectorielles continues multimodales pour des images et les publier sur un sujet Pub/Sub:

"Populate image data in XSTRING format
DATA(lv_image_xstring) = VALUE xstring( ).

DATA(lv_image_base64) =
   xco_cp=>xstring( lv_image_xstring
    )->as_string( xco_cp_binary=>text_encoding->base64
    )->value.

DATA(ls_image) =
  VALUE /goog/cl_embeddings_model=>ty_image(
     bytes_base64_encoded = lv_image_base64 ).

DATA(ls_embedding_template) =
  VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
         id = 'UNIQUE_ID'
         content = 'CONTEXTUAL_TEXT' ).

NEW /goog/cl_embeddings_model(
        iv_model_key = 'EMBEDDING_MODEL_KEY'
        )->gen_image_embeddings_by_struct(
        iv_image = ls_image
        is_input = ls_embedding_template
        )->send_struct_to_pubsub( iv_topic_id = 'PUBSUB_TOPIC_ID' ).

Remplacez les éléments suivants :

  • UNIQUE_ID: identifiant qui identifie de manière unique une image. Il peut s'agir, par exemple, d'une combinaison du nom de fichier et de la date de création de l'image.
  • CONTEXTUAL_TEXT : facultatif. Contexte et signification supplémentaires pour le contenu d'entrée transmis au modèle d'embeddings.
  • EMBEDDING_MODEL_KEY: clé du modèle pour générer des représentations vectorielles continues, qui est configurée dans les paramètres de génération du modèle.
  • PUBSUB_TOPIC_ID: ID du sujet Pub/Sub sur lequel publier les représentations vectorielles continues.

Documents

Les processus métier SAP gèrent différents types de documents, tels que les contrats, les manuels, les guides et les fiches de données de sécurité. Ces documents peuvent contenir des informations importantes nécessaires à la prise de décisions commerciales. Pour trouver facilement ces données stockées dans des documents, vous pouvez utiliser des embeddings multimodaux. Pour effectuer des recherches efficaces dans des documents longs, un mécanisme de segmentation doit être implémenté. Il divise le document en unités plus petites, telles que des pages ou des sections, ce qui permet de contextualiser les résultats de recherche dans une zone spécifique.

L'exemple de code suivant montre comment extraire des données d'un document PDF et générer des représentations vectorielles continues multimodales pour chaque page, puis envoyer ces représentations vectorielles continues dans une table BigQuery:

"Populate PDF data in XSTRING format
DATA(lv_pdf_xstring) = VALUE xstring( ).

DATA(lv_pdf_base64) =
   xco_cp=>xstring( lv_pdf_xstring
    )->as_string( xco_cp_binary=>text_encoding->base64
    )->value.

DATA(ls_document_input) = VALUE /goog/cl_documentai_v1=>ty_084(
   raw_document-content   = lv_pdf_base64
   raw_document-mime_type = 'application/pdf' ).

NEW /goog/cl_documentai_v1( iv_key_name = 'DOC_AI_CLIENT_KEY'
    )->process_processors(
      EXPORTING
       iv_p_projects_id   = 'PROJECT_ID'
       iv_p_locations_id  = 'LOCATION_ID'
       iv_p_processors_id = 'PROCESSOR_ID'
       is_input           = ls_document_input
      IMPORTING
       es_output          = DATA(ls_docai_output) ).

LOOP AT ls_docai_output-document-pages REFERENCE INTO DATA(ls_pages).

  DATA(ls_image) =
    VALUE /goog/cl_embeddings_model=>ty_image(
       bytes_base64_encoded = ls_pages->image-content ).

  DATA(ls_embedding_template) =
    VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
           id = 'UNIQUE_ID'                 "Document Name + Page #
           content = 'CONTEXTUAL_TEXT' ).   "Optional Text

  NEW /goog/cl_embeddings_model(
          iv_model_key = 'EMBEDDING_MODEL_KEY'
          )->gen_image_embeddings_by_struct(
          iv_image = ls_image
          is_input = ls_embedding_template
          )->send_struct_to_bq(
          iv_dataset_id = 'BIGQUERY_DATASET_ID'
          iv_table_id   = 'BIGQUERY_TABLE_ID' ).

ENDLOOP.

Remplacez les éléments suivants :

  • DOC_AI_CLIENT_KEY: clé client pour l'authentification.
  • PROJECT_ID: ID du projet Google Cloud dans lequel le processeur est créé.
  • LOCATION_ID: emplacement de l'outil de traitement. Pour savoir comment afficher les détails d'un processeur, consultez Afficher les détails d'un processeur.
  • PROCESSOR_ID: ID de l'outil de traitement. Pour savoir comment afficher les détails d'un processeur, consultez Afficher les détails d'un processeur.
  • UNIQUE_ID: identifiant qui identifie de manière unique un bloc de connaissances spécifique. Il peut s'agir, par exemple, d'une combinaison du nom du document et du numéro de page.
  • CONTEXTUAL_TEXT : facultatif. Contexte et signification supplémentaires pour le contenu d'entrée transmis au modèle d'embeddings.
  • EMBEDDING_MODEL_KEY: clé du modèle pour générer des représentations vectorielles continues, qui est configurée dans les paramètres de génération du modèle.
  • BIGQUERY_DATASET_ID: ID de l'ensemble de données BigQuery.
  • BIGQUERY_TABLE_ID: ID de la table BigQuery.

Générer des embeddings dans Google Cloud

Au lieu de générer des représentations vectorielles continues dans SAP, vous pouvez les générer de manière native dans Google Cloud avec un codage minimal ou nul. Cette approche nécessite de stocker vos données d'entreprise dans Google Cloud avant de générer des représentations vectorielles continues.

Si vos données d'entreprise sont chargées dans BigQuery, vous pouvez générer des représentations vectorielles continues de texte directement en exécutant une commande SQL. Pour en savoir plus, consultez Générer des embeddings textuels à l'aide de la fonction ML.GENERATE_EMBEDDING.

Si vos données d'entreprise sont importées dans un bucket Cloud Storage, utilisez l'une des méthodes suivantes pour générer des représentations vectorielles continues:

Étape suivante

Contributeurs

Auteur : Ajith Urimajalu | Responsable d'équipe d'ingénieurs d'applications SAP

Autre contributeur : Vikash Kumar | Rédacteur technique