Datenaufnahme-Subsystem in SAP für Anwendungen mit generativer KI

In diesem Dokument wird eine Referenzarchitektur für das Entwerfen eines Datenaufnahme-Subsystems in SAP für RAG-fähige generative KI-Anwendungen beschrieben. Dieses Subsystem verwendet die lokale oder eine beliebige Cloud-Version des ABAP SDK for Google Cloud, um sich in die Google Cloud-Dienste einzubinden, die für die Entwicklung von generativen KI-Anwendungen mit RAG-Funktionen erforderlich sind.

Eine generative KI-Anwendung mit Retrieval-Augmented Generation (RAG)-Funktionen hat verschiedene Komponenten. Das Datenaufnahme-Subsystem ist unter anderem für die Vorbereitung und Verarbeitung der Unternehmensdaten verantwortlich. Mit diesem Teilsystem können Sie Ihre Unternehmensdaten als Einbettungen in einer Vektordatenbank vorbereiten und speichern, um präzise und aussagekräftige KI-Interaktionen zu ermöglichen.

Da viele Unternehmen SAP-ERP-Systeme zum Speichern ihrer Unternehmensdaten verwenden, enthält dieses Dokument eine Anleitung zur Einbindung der Datenspeicherlösungen und Vektorsuchdatenbanken von Google Cloud in Ihr Datenaufnahmesystem. So können Sie fundierte Entscheidungen treffen und die Google Cloud-Dienste effektiv nutzen, um eine robuste und effiziente Pipeline für Ihre RAG-fähigen generativen KI-Anwendungen zu erstellen.

Dieses Dokument richtet sich an ABAP-Entwickler, SAP-Lösungsarchitekten und Cloud-Architekten. In diesem Dokument wird davon ausgegangen, dass Sie mit der Terminologie der Vektorsuche und den RAG vertraut sind.

Architektur

Das folgende Diagramm zeigt eine Referenzarchitektur mit den Komponenten eines Datenaufnahme-Subsystems in SAP:

Datenaufnahme-Subsystem in SAP

Diese Architektur des Datenaufnahme-Subsystems umfasst die folgenden Komponenten:

# Komponente Details
1 Datenaufnahme-Subsystem Er bereitet Unternehmensdaten vor und verarbeitet sie, um Vektor-Embeddings zu generieren. Diese Einbettungen werden dann in einer geeigneten Vektordatenbank in Google Cloud gespeichert. Optional können Sie Ihre Unternehmensdaten in Google Cloud speichern.
2 ABAP SDK for Google Cloud Das SDK verwaltet die Kommunikation zwischen dem Datenaufnahme-Subsystem und verschiedenen Google Cloud-Diensten.
3 Datenspeicher Optional. Google Cloud-Datenspeicherlösung wie BigQuery oder Cloud Storage, die zum Speichern von Unternehmensdaten (sowohl strukturierten als auch unstrukturierten) verwendet wird. Weitere Informationen finden Sie unter Unternehmensdaten in Google Cloud speichern.
4 Einbettungsmodell (Vertex AI) KI-Modelle, die Embeddings aus verschiedenen Unternehmensdatenquellen generieren
5 Produkte für die Vektorsuche Speichert Embeddings in einer Vektordatenbank wie Cloud Storage oder BigQuery, in der Sie eine semantische Suche durchführen können.

Datenaufnahme-Subsystem

In diesem Abschnitt wird das Datenaufnahme-Subsystem beschrieben, das Ihre Unternehmensdaten in Einbettungen umwandelt und diese in einer Vektordatenbank zur Verwendung mit RAG-fähigen generativen KI-Anwendungen speichert. Dieses Teilsystem kann eine Vielzahl von SAP-Daten verarbeiten, darunter Dokumente, Bilder, Geschäftsregeln und Prompts, um Einbettungen zu generieren.

Unternehmensdaten vorbereiten

Bevor Sie Ihre RAG-fähige generative KI-Anwendung zum ersten Mal bereitstellen, müssen Sie Datasets für vorhandene Unternehmensdaten aus Ihrem SAP-System laden. Sie können neue Batchprogramme erstellen oder vorhandene wiederverwenden, mit denen Ihre Unternehmensdaten in überschaubaren Teilen gelesen werden können.

Nachdem Sie die anfängliche Daten- und Einbettungsladung durchgeführt haben, muss Ihr Datenaufnahme-Subsystem alle Änderungen an Ihren SAP-Daten verfolgen. Ganz gleich, ob es sich um neue Einträge, Aktualisierungen vorhandener Einträge oder Löschungen handelt, der Index der Vektorsuche muss diese Änderungen widerspiegeln. Dazu können Sie geeignete Stellen im SAP-Anwendungsentwicklungsframework wie Business Add-Ins (BAdIs) und RAP-Ereignishandler verwenden. So bleiben Ihre Einbettungen auf dem neuesten Stand und Ihre KI-Anwendungen haben immer die neuesten Informationen.

Unternehmensdaten in Google Cloud speichern (optional)

SAP-Systeme können sowohl strukturierte als auch unstrukturierte Unternehmensdaten enthalten. Optional können Sie diese Unternehmensdaten in Google Cloud speichern, um sie über das Auslieferungssystem abzurufen.

Sie können Ihre Unternehmensdaten in den folgenden Google Cloud-Diensten speichern:

  • Für das Streaming strukturierter Daten von SAP nach BigQuery können Sie den BigQuery-Connector für SAP oder die INSERT_ALL_TABLEDATA-Methode der Klasse /GOOG/CL_BIGQUERY_V2 des ABAP SDK for Google Cloud verwenden.
  • Zum Speichern unstrukturierter Daten wie Bildern und PDF-Dokumenten in Cloud Storage können Sie die Klasse /GOOG/CL_STORAGE_V1 des ABAP SDK for Google Cloud verwenden. Ein Codebeispiel zum Hochladen eines Objekts in einen Cloud Storage-Bucket finden Sie unter Datei in einen Bucket hochladen.
  • Wenn Sie Cloud Storage als Inhaltsrepository für SAP konfigurieren möchten, können Sie die auf GitHub verfügbare Beispiellösung Google Cloud Storage: Content Server for SAP implementieren und anpassen.

Einbettungen aus Unternehmensdaten generieren

Wenn Sie Text- und multimodale Einbettungen aus Ihren Unternehmensdaten generieren möchten, können Sie Einbettungsmodelle mit dem Vertex AI SDK für ABAP verwenden.

Einbettungen sind im Wesentlichen numerische Codes, die Text, Bilder oder Videos so darstellen, dass ihre Beziehung zueinander erfasst wird. Anwendungen verwenden diese Codes, um Sprache zu verstehen und zu generieren und selbst die komplexesten Bedeutungen und Beziehungen in Ihren spezifischen Inhalten zu erkennen. Dabei werden Text, Bilder und Videos in Listen mit Zahlen umgewandelt, die als Vektoren bezeichnet werden. Diese sollen die Bedeutung der ursprünglichen Inhalte effektiv erfassen.

Einbettungen speichern

Sie können die aus Ihren SAP-Unternehmensdaten generierten Einbettungen mit den Vektorsuchprodukten von Google Cloud effizient speichern und durchsuchen. Diese Produkte dienen als Vektordatenbank.

Wählen Sie eine Vektordatenbank aus der folgenden Liste aus, um die Einbettungen für Ihre SAP-Unternehmensdaten zu speichern:

Designaspekte

Die folgenden Designüberlegungen sind bei der Auswahl einer Vektordatenbank wichtig:

  • Leistung: Faktoren wie Indexierungsgeschwindigkeit für neue Vektoren, Suchgeschwindigkeit (Latenz), Skalierbarkeit und Kompromiss zwischen dem Abrufen aller relevanten Ergebnisse (Recall) und nur der relevantesten (Genauigkeit).
  • Dateneigenschaften: Die Größe der Einbettungsvektoren, die Größe des Vektordatensatzes und die Datenverteilung wirken sich auf Kosten, Leistung und Indexierung aus.
  • Funktionen: Unterstützte Distanzfunktionen wie der euklidische Algorithmus und die Kosinusähnlichkeit, Filterung, Kombination von Keyword- und Vektorsuche sowie Unterstützung der Suche nach ungefähren nächsten Nachbarn (ANN).
  • Integration: Vorhandene Integration und einfache Datenaufnahme aus Ihren Anwendungen.
  • Kosten: Preismodell, Speicher- und Abfragekosten, die dem Daten- und Suchvolumen entsprechen.

Speichern Sie die Einbettungen zusammen mit den IDs, die sie mit den Quelldaten verknüpfen, in einer Vektordatenbank, um eine effiziente Suche und Analyse zu ermöglichen.

Die Entscheidung, Unternehmensdaten in einer Google Cloud-Speicherlösung zu speichern, hängt hauptsächlich vom Standort Ihres Bereitstellungsuntersystems ab:

  • Wenn Ihr Bereitstellungsuntersystem SAP ist, ist das Speichern von Unternehmensdaten außerhalb von SAP optional, da Sie bereits innerhalb von SAP auf Ihre Unternehmensdaten zugreifen können.

  • Wenn sich Ihr Bereitstellungsuntersystem außerhalb von SAP befindet, z. B. in der App Engine, müssen Sie Ihre Unternehmensdaten möglicherweise in einer geeigneten Google Cloud-Speicherlösung speichern, um sie effizient abrufen zu können. Das lässt sich vermeiden, wenn Ihr Bereitstellungsuntersystem Remoteaufrufe an SAP senden kann, um die Daten abzurufen.

Informationen zum Generieren und Speichern von Einbettungen

In diesem Abschnitt wird erläutert, wie Sie embeddings aus Ihren Unternehmensdaten generieren und speichern. Es gibt zwei Hauptmuster zum Generieren und Speichern von Einbettungen:

  • Embeddings in SAP generieren: Mit dem Vertex AI SDK für ABAP können Sie mithilfe eines geeigneten Embeddings-Modells Embeddings aus den Unternehmensdaten in Ihrem SAP ERP-System generieren und in einer Vektordatenbank speichern.

  • Embeddings in Google Cloud generieren: Mit einem serverlosen Ansatz wie Cloud Run-Funktionen oder BigQuery können Sie Embeddings aus den Unternehmensdaten generieren, die sich auf einem Speichermedium in Google Cloud befinden, und sie in einer Vektordatenbank speichern.

Einbettungen in SAP generieren

Wenn Sie Einbettungen aus SAP-Unternehmensdaten lokal im SAP-System generieren möchten, können Sie verschiedene Einbettungsmodelle mit dem Vertex AI SDK für ABAP verwenden. Diese generierten Einbettungen können dann mithilfe eines der integrierten Datenaufnahmemechanismen des SDK an eine geeignete Vektordatenbank in Google Cloud gesendet werden.

Sie können entscheiden, welche Daten in Einbettungen umgewandelt werden sollen, je nachdem, welche Vektorsuchfunktionen Sie benötigen. Informationen zum Generieren von Einbettungen mit dem Vertex AI SDK für ABAP finden Sie unter Einbettungen generieren.

In diesem Abschnitt werden gängige SAP-Datentypen und die Generierung von Einbettungen mit dem Vertex AI SDK for ABAP erläutert.

Strukturierte Unternehmensdaten, die in SAP-Tabellen gespeichert sind

Sie generieren hauptsächlich Einbettungen für eine oder mehrere Textspalten in SAP-Tabellen. Wenn Sie beispielsweise nach Lieferanten suchen möchten, die einen bestimmten Namen, eine bestimmte Adresse oder eine bestimmte Telefonnummer haben, können Sie die Werte dieser Spalten zusammenführen und dann einen Text-Embedding dieses kombinierten Werts generieren. Weitere Textwerte, die sich gut für das Einbetten von Text eignen, sind Beschreibungen in Texttabellen und lange Texte, die mit Geschäftstransaktionen verknüpft sind.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie Text-Embeddings generieren und in einem Cloud Storage-Bucket speichern:


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' ).

Ersetzen Sie Folgendes:

  • SUPPLIER: Ein eindeutiger alphanumerischer Code zur Identifizierung eines Lieferanten.
  • EMBEDDING_MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
  • BUCKET_NAME: Der Name des Ziel-Cloud Storage-Bucket.

Images

In vielen Branchen, darunter der Fertigung und dem Einzelhandel, werden Bilder wichtiger Geschäftsobjekte wie Rohmaterialien, Endprodukte und eine breite Palette von Geräten aufgenommen und gespeichert. Mithilfe von multimodalen Einbettungen können Sie diese Geschäftsobjekte entweder anhand von Textbeschreibungen oder visueller Ähnlichkeit effizient suchen.

Das folgende Codebeispiel zeigt, wie Sie multimodale Einbettungen für Bilder generieren und in einem Pub/Sub-Thema veröffentlichen:

"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' ).

Ersetzen Sie Folgendes:

  • UNIQUE_ID: Eine Kennung, die ein Bild eindeutig identifiziert. Das kann beispielsweise eine Kombination aus Dateiname und Erstellungsdatum des Bildes sein.
  • CONTEXTUAL_TEXT: Optional. Zusätzlicher Kontext und Bedeutung für die Eingabeinhalte, die an das Einbettungsmodell übergeben werden.
  • EMBEDDING_MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
  • PUBSUB_TOPIC_ID: Die Pub/Sub-Themen-ID, unter der die Einbettungen veröffentlicht werden sollen.

Dokumente

In SAP-Geschäftsprozessen werden verschiedene Arten von Dokumenten verarbeitet, z. B. Verträge, Handbücher, Anleitungen und Sicherheitsdatenblätter. Diese Dokumente können wichtige Informationen enthalten, die für die Entscheidungsfindung erforderlich sind. Mithilfe von multimodalen Einbettungen können Sie diese in Dokumenten gespeicherten Daten nahtlos finden. Für eine effektive Suche in langen Dokumenten muss ein Chunking-Mechanismus implementiert werden. Das Dokument wird in kleinere Einheiten wie Seiten oder Abschnitte unterteilt, sodass Suchergebnisse in einem bestimmten Bereich kontextualisiert werden können.

Im folgenden Codebeispiel wird gezeigt, wie Daten aus einem PDF-Dokument extrahiert und multimodale Einbettungen für jede Seite generiert werden, die dann an eine BigQuery-Tabelle gesendet werden:

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

Ersetzen Sie Folgendes:

  • DOC_AI_CLIENT_KEY: Der Clientschlüssel für die Authentifizierung.
  • PROJECT_ID: Die ID des Google Cloud-Projekts, in dem der Prozessor erstellt wird.
  • LOCATION_ID: Standort des Prozessors. Informationen zum Aufrufen von Prozessordetails finden Sie unter Details zu einem Prozessor aufrufen.
  • PROCESSOR_ID: Die ID des Prozessors. Informationen zum Aufrufen von Prozessordetails finden Sie im Hilfeartikel Details zu einem Prozessor ansehen.
  • UNIQUE_ID: Eine Kennung, die einen bestimmten Wissensbestand eindeutig identifiziert. Das kann beispielsweise eine Kombination aus Dokumentnamen und Seitennummer sein.
  • CONTEXTUAL_TEXT: Optional. Zusätzlicher Kontext und Bedeutung für die Eingabeinhalte, die an das Einbettungsmodell übergeben werden.
  • EMBEDDING_MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
  • BIGQUERY_DATASET_ID: Die BigQuery-Dataset-ID.
  • BIGQUERY_TABLE_ID: Die BigQuery-Tabelle-ID.

Einbettungen in Google Cloud generieren

Anstatt Embeddings in SAP zu generieren, können Sie sie auch nativ in Google Cloud generieren, mit nur wenigen Codezeilen oder gar ohne Code. Bei diesem Ansatz müssen Sie Ihre Unternehmensdaten in Google Cloud speichern, bevor Sie Embeddings generieren.

Wenn Ihre Unternehmensdaten in BigQuery geladen werden, können Sie Text-Embeddings direkt durch Ausführen eines SQL-Befehls generieren. Weitere Informationen finden Sie unter Texteinbettungen mit der Funktion ML.GENERATE_EMBEDDING generieren.

Wenn Ihre Unternehmensdaten in einen Cloud Storage-Bucket hochgeladen werden, können Sie eine der folgenden Methoden zum Generieren von Einbettungen verwenden:

Nächste Schritte

Beitragende

Autor: Ajith Urimajalu | SAP Application Engineer Team Lead

Weiterer Mitwirkender: Vikash Kumar | Technischer Autor