Bereitstellungs-Subsystem in SAP für RAG-fähige generative KI-Anwendungen entwerfen

In diesem Dokument wird eine Referenzarchitektur für die Entwicklung eines Bereitstellungs-Subsystems in SAP beschrieben, das mit generativen KI-Anwendungen mit Retrieval Augmented Generation (RAG) verwendet werden kann. Für die Einbindung in die Google Cloud Dienste, die für die Entwicklung von RAG-fähigen generativen KI-Anwendungen erforderlich sind, verwendet diese Referenzarchitektur die lokale oder eine beliebige Cloud-Version des ABAP SDK for Google Cloud.

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

Ein Bereitstellungs-Subsystem ist eine wichtige Komponente in einer RAG-fähigen generativen KI-Anwendung, da es den Fluss von Anfragen und Antworten zwischen der Anwendung und ihren Nutzern verwaltet. Mit dem in diesem Dokument beschriebenen Bereitstellungsuntersystem können Ihre Anwendungen auf SAP-Unternehmensdaten zugreifen und diese verwenden, um Large Language Models (LLMs) Kontext zu bieten. Dies kann dazu beitragen, genauere und zuverlässigere Ergebnisse zu generieren.

Wenn Sie Gemini-LLMs mit SAP-Unternehmensdaten und ‑prozessen kombinieren, können Sie folgende Vorteile nutzen:

  • Höhere Genauigkeit: Der Zugriff auf ein breiteres Spektrum an Informationen führt zu genaueren und fundierteren Entscheidungen, die auf Ihren Unternehmensdaten basieren.
  • Verbesserte Nutzerfreundlichkeit: Personalisierte und kontextbezogene Informationen verbessern die Nutzerzufriedenheit durch zuverlässigere Modellantworten.

Architektur

Das folgende Diagramm zeigt die Komponenten eines Bereitstellungs-Subsystems in SAP:

Bereitstellungs-Subsystem in SAP

Wie im vorherigen Bild dargestellt, umfasst die Architektur des Bereitstellungs-Subsystems die folgenden Komponenten:

Zahl Komponente Details
1 Subsystem für die Bereitstellung Das Bereitstellungssubsystem ist für das Abrufen relevanter Informationen aus Datenquellen verantwortlich. Er ergänzt die Informationen um einen Prompt, interagiert mit den generativen KI-Modellen und gibt die endgültige Antwort an den Nutzer zurück.
2 ABAP SDK for Google Cloud Das SDK verwaltet die Kommunikation zwischen dem Bereitstellungs-Subsystem und verschiedenen Google Cloud Diensten.
3 SAP-Funktionsmodul Wenn Ihr Datensatz klein ist und sich in Ihren SAP-Systemen befindet, können Sie die SAP-Funktionsmodule verwenden, um Ihre Pipeline für die Informationsabfrage zu erstellen. Sie können Daten aus einem SAP-Funktionsmodul mithilfe von SELECT-Abfragen, BAPI-Aufrufen oder SAP-Funktionsaufrufen mit Gemini abrufen.
4 Produkte für die Vektorsuche Wenn Ihre Unternehmensdaten groß sind und Sie eine RAG-Anwendung mit minimaler Latenz benötigen, können Sie Ihre Abrufpipeline mithilfe der Vektorsuche erstellen. Sie können eine semantische Suche in Ihren Unternehmensdaten durchführen, die in Form von Einbettungen in einer Vektordatenbank wie Cloud Storage, Vertex AI Feature Store oder BigQuery gespeichert sind.
5 Vertex AI Gemini-Modelle Vertex AI Gemini-Modelle, die Antworten generieren, die auf Ihren Unternehmensdaten basieren.

Subsystem für die Bereitstellung

Das Bereitstellungssubsystem einer Lösung für generative KI besteht aus den folgenden Unterkomponenten:

Informationsabruf

Wenn Nutzer über ein Frontend Anfragen an die generative KI-Anwendung senden, ruft das Bereitstellungs-Subsystem Informationen aus einer Datenquelle ab. Um Informationen aus einer Datenquelle abzurufen, können Sie eine für Ihren Anwendungsfall geeignete Methode auswählen:

  • Informationen mit der Vektorsuche abrufen
  • Informationen ohne Vektorsuche abrufen

Wenn Ihre Unternehmensdaten groß sind (strukturierte oder unstrukturierte Daten) und Sie eine RAG-Anwendung mit minimaler Latenz benötigen, empfehlen wir, Ihre Abrufpipeline mithilfe der Vektorsuche zu erstellen. Die Vektorsuche kann innerhalb von Millisekunden Text- und multimodale Suchanfragen in Milliarden von Einträgen ausführen.

Wenn Sie die Vektorsuche für die Informationsabfrage verwenden möchten, müssen Sie eine Vektordatenbank einrichten, um die Unternehmensdaten in Form von Vektoreinbettungen zu speichern. Informationen zum Aufnehmen von Unternehmensdaten in eine Vektordatenbank finden Sie unter Datenaufnahme-Subsystem in SAP für RAG-fähige generative KI-Anwendungen erstellen.

Wenn Ihr Datensatz klein ist und sich in Ihren SAP-Systemen befindet, können Sie Informationen mithilfe von SELECT-Abfragen, SAP BAPI-Aufrufen oder SAP-Funktionsaufrufen mit Gemini abrufen, um den Kontext des Modells zu erweitern.

Informationserweiterung

Damit das Modell einen wichtigen unternehmensspezifischen Kontext erhält, empfehlen wir Ihnen, Ihre Prompts mit relevanten Informationen aus Ihren SAP-Systemen anzureichern.

Nachdem Sie die zusätzlichen Daten erhalten haben, fügen Sie sie dem Kontext des Modells hinzu. Durch diese Erweiterung erhält das Modell den erforderlichen Kontext, um eine Antwort mit den hinzugefügten Unternehmensinformationen zu geben.

Wenn Sie die abgerufenen Daten dem Kontext des Modells hinzufügen möchten, hängen Sie sie an die Eingabeaufforderung für das Modell an oder konkatenieren Sie sie mit ihr. Beim Anhängen der Daten können Sie ihnen einen entsprechenden Präfix oder Suffix hinzufügen, um anzugeben, dass es sich um zusätzlichen Kontext neben dem Prompt handelt.

Antwortgenerierung

Wenn Sie ein Gemini-KI-Modell mit dem erweiterten Prompt aufrufen möchten, verwenden Sie die Komponente „Generator Model Invoker“ des Vertex AI SDK für ABAP.

So ist die generierte Antwort nicht nur für die Suchanfrage des Nutzers relevant, sondern basiert auch auf Ihren unternehmensspezifischen Daten. Das führt zu genaueren und aussagekräftigeren Ergebnissen.

Anwendungsfall

Mit einer RAG-fähigen generativen KI-Anwendung können Sie mithilfe von Anfragen in natürlicher Sprache schnell aktuelle Informationen zum Materialbestand in einem Lager generieren.

Angenommen, Sie implementieren eine Anwendung für generative KI für Lagermitarbeiter eines Unternehmens, das Möbel, Dekoration und Accessoires für das Zuhause herstellt und versendet.

Um das Lagerinventar und die Lieferkette effizient zu verwalten, bietet die Anwendung mit generativer KI über eine SAP-Webanwendung schnelle Informationen zum Materialbestand anhand von Abfragen in natürlicher Sprache. Ein Beispiel für eine solche Abfrage wäre die Ermittlung der aktuellen Inventarmenge eines bestimmten Materials.

Diese Informationen werden in den Produktdaten in SAP-Datenbanktabellen gespeichert. Das kann eine riesige Liste von Artikeln für ein großes Unternehmen für Heimeinrichtung sein. Mitarbeiter im Lager benötigen Antworten von der SAP-Anwendung, die auf den Informationen in den SAP-Systemen (der einzigen Quelle der Wahrheit) beruhen. Anhand dieser Informationen können sie schnell und effizient Entscheidungen treffen, z. B.:

  • Lagerverfügbarkeit: Ist ein bestimmtes Material auf Lager?
  • Lagerbestände: Wie viele Einheiten eines Materials sind verfügbar?
  • Produktionsplanung: Wie hoch sollte das Produktionsziel für ein Material sein, um die nächste eingehende Bestellung zu erfüllen?

Bereitstellung

In diesem Abschnitt wird die Implementierung eines Bereitstellungs-Subsystems für den Lagerhallen-Anwendungsfall beschrieben. Darin wird beschrieben, wie Sie das Vertex AI SDK für ABAP verwenden, das in der neuesten Version des ABAP SDK for Google Cloud eingebettet ist, um Informationen abzurufen und mit Gemini-Modellen zu interagieren.

Im Lagerfall sind die Lagerinformationen in SAP mit einer eindeutigen Material-ID für jedes Produkt verknüpft. Für jedes Produkt sind in SAP auch beschreibende Attribute gespeichert, z. B. Name, detaillierte Beschreibung, Kategorie und andere relevante Eigenschaften. Diese Textbeschreibungen werden in numerische Darstellungen umgewandelt, die als „Embeddings“ bezeichnet werden, und in einer Vektordatenbank gespeichert. Jede Einbettung ist mit der entsprechenden Material-ID verknüpft, was eine effiziente Suche und Analyse von Produktinformationen ermöglicht.

Sobald Ihre Vektordatenbank aktualisiert wurde, können Sie die Suchanfrage „Wie hoch ist die aktuelle Inventarmenge für ein Produkt?“ so ausführen:

  • Führen Sie eine Vektorsuche in der Vektordatenbank mit der Abfrage aus, um die Material-ID abzurufen.

  • SAP-Tabellen abfragen und SAP BAPI aufrufen, um die Lagermenge für die Material-ID abzurufen.

  • Erhöhen Sie die Lagermenge entsprechend dem Kontext des Modells.

Wenn Sie einen Vektorindex als Vektordatenbank ausgewählt haben, können Sie mit dem Vertex AI SDK für ABAP eine Vektorsuche direkt aus ABAP aufrufen. Weitere Informationen finden Sie in der Referenzarchitektur Vertex AI Vector Search für intelligente SAP-Anwendungen.

Die folgenden Schritte sind für die Implementierung eines Bereitstellungs-Subsystems erforderlich:

  1. Um die Material-ID für den Lager-Anwendungsfall abzurufen, können Sie die Vektorsuche verwenden.

    Im folgenden Codebeispiel wird gezeigt, wie die Material-ID mithilfe der Vektorsuche abgerufen wird:

    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.
    

    Wenn Ihr Datensatz klein ist und sich in Ihren SAP-Systemen befindet, können Sie SELECT-Abfragen mit der Materialbeschreibung verwenden, um die Material-ID für den Lager-Use-Case zu ermitteln, und dann die SAP-Tabelle abfragen, um die Lagermenge zu erhalten.

    Im folgenden Codebeispiel wird gezeigt, wie Sie mithilfe von SELECT-Abfragen Informationen zum Materialbestand abrufen:

    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. Wenn Sie die abgerufenen Daten in den Prompt einfügen möchten, konkatenieren Sie den verfügbaren Bestand für das Material mit dem Prompt mit dem Präfix „Verfügbarer Bestand“.

    Im folgenden Codebeispiel wird gezeigt, wie die abgerufenen Daten dem Eingabeprompt hinzugefügt werden:

    * Augment retrieved data to the input prompt
    lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory.
    
    
  3. Wenn Sie ein Gemini-KI-Modell mit dem erweiterten Prompt aufrufen möchten, verwenden Sie die Komponente „Generator Model Invoker“ des Vertex AI SDK für ABAP.

    Im folgenden Codebeispiel wird gezeigt, wie das Modell mit einem erweiterten Prompt aufgerufen wird:

    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.
    
    

Designaspekte

Dieser Abschnitt enthält eine Anleitung zur Verwendung dieser Referenzarchitektur, um Architekturen zu entwickeln, die Ihren spezifischen Anforderungen an Sicherheit, Datenschutz, Compliance, Kosten und Leistung entsprechen.

Sicherheit, Datenschutz und Compliance

Für Sicherheit und Compliance tragen Sie gemeinsam die Verantwortung. Weitere Informationen finden Sie unter Geteilte Verantwortung bei Vertex AI.

Informationen zur Verpflichtung von Google Cloudzum Datenschutz finden Sie im Datenschutz-Center.

Kostenoptimierung

Wenn Sie die Vektorsuche verwenden, um Informationen für die RAG-Suche abzurufen, können Sie die Kosten senken, indem Sie kleinere Shard-Größen und niedriger dimensionale Einbettungen für Ihre Indexe auswählen. So können Sie für die Bereitstellung der Indexe einen kleineren Compute-Rechner verwenden.

Vertex AI ist ein abrechenbares Angebot von Google Cloud. Informationen zu Preisen finden Sie unter Vertex AI-Preise und Preise für die Vektorsuche. Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Leistungsoptimierung

Wenn Sie die Vektorsuche verwenden, um Informationen für die RAG abzurufen, sollten Sie beim Erstellen des Index größere Shard-Größen und beim Bereitstellen des Index Hochleistungs-Rechenmaschinen auswählen, um die Latenz beim Abrufen großer Datensätze zu verbessern. Weitere Informationen zu Shard-Größen für einen Index finden Sie unter Indexgröße.

Um die Relevanz der Suchantworten zu erhöhen, generieren Sie Einbettungen Ihrer Unternehmensdaten in höheren Dimensionen. Compute-Maschinen und höhere Einbettungsdimensionen sind kostenintensiv. Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Nächste Schritte

Beitragende

Autor: Devesh Singh | SAP Application Engineer

Weiterer Mitwirkender: Vikash Kumar | Technischer Autor