Diseña un subsistema de entrega en SAP para aplicaciones de IA generativa compatibles con RAG

En este documento, se describe una arquitectura de referencia para diseñar un subsistema de entrega en SAP para usar con aplicaciones de IA generativa compatibles con la generación aumentada por recuperación (RAG). Para integrarse con los Google Cloud servicios necesarios para compilar aplicaciones de IA generativa compatibles con RAG, esta arquitectura de referencia usa la edición local o en la nube del SDK de ABAP para Google Cloud.

Este documento está dirigido a desarrolladores de ABAP, arquitectos de soluciones de SAP y arquitectos de nube. Se supone que estás familiarizado con la terminología de Búsqueda de vectores y los conceptos de RAG.

Un subsistema de entrega es un componente importante en una aplicación de IA generativa compatible con RAG porque administra el flujo de solicitudes y respuestas entre la aplicación y sus usuarios. El subsistema de publicación que se describe en este documento permite que tus aplicaciones accedan a los datos empresariales de SAP y los usen para proporcionar contexto a los modelos de lenguaje grandes (LLM), lo que puede ayudar a generar resultados más precisos y confiables.

Si combinas los LLM de Gemini con los datos y procesos empresariales de SAP, puedes obtener los siguientes beneficios:

  • Mayor precisión: El acceso a una gama más amplia de información lleva a una toma de decisiones más precisa y fundamentada en tus datos empresariales.
  • Experiencia del usuario mejorada: La información personalizada y contextualmente relevante mejora la satisfacción del usuario con una respuesta del modelo más confiable.

Arquitectura

En el siguiente diagrama, se muestran los componentes de un subsistema de entrega en SAP:

Subsistema de entrega en SAP

Como se muestra en la imagen anterior, la arquitectura del subsistema de entrega incluye los siguientes componentes:

Número Componente Detalles
1 Subsistema de entrega El subsistema de entrega es responsable de recuperar información relevante de las fuentes de datos. Aumenta la información con una instrucción, interactúa con los modelos de IA generativa y le entrega la respuesta final al usuario.
2 SDK ABAP para Google Cloud El SDK controla la comunicación entre el subsistema de entrega y varios servicios de Google Cloud .
3 Módulo de funciones de SAP Cuando tu conjunto de datos es pequeño y reside en tus sistemas SAP, puedes usar los módulos de funciones de SAP para compilar tu canalización de recuperación de información. Puedes recuperar datos de un módulo de funciones de SAP con consultas SELECT, llamadas a BAPI o llamadas a funciones de SAP con Gemini.
4 Productos de Búsqueda de vectores Cuando tus datos empresariales son grandes y deseas una aplicación de RAG con latencia mínima, puedes compilar tu canalización de recuperación con la Búsqueda vectorial. Puedes realizar búsquedas semánticas en tus datos de la empresa almacenados en forma de incorporaciones en una base de datos de vectores, como Cloud Storage, Vertex AI Feature Store o BigQuery.
5 Modelos de Vertex AI Gemini Modelos de Gemini de Vertex AI que generan respuestas basadas en tus datos empresariales.

Subsistema de entrega

El subsistema de entrega de una solución de IA generativa consta de los siguientes subcomponentes:

Recuperación de información

Cuando los usuarios envían solicitudes a la aplicación de IA generativa a través de un frontend, el subsistema de entrega recupera información de una fuente de datos. Para recuperar información de una fuente de datos, puedes elegir un método apropiado para tu caso de uso:

  • Cómo recuperar información con la búsqueda de vectores
  • Cómo recuperar información sin la Búsqueda de vectores

Cuando tus datos empresariales son grandes (datos estructurados o no estructurados) y deseas una aplicación de RAG con latencia mínima, te recomendamos que crees tu canalización de recuperación con la Búsqueda vectorial. La Búsqueda de vectores puede ejecutar búsquedas multimodales y de texto en miles de millones de registros en milisegundos.

Para usar la Búsqueda de vectores para la recuperación de información, debes configurar una base de datos de vectores para almacenar los datos de la empresa en forma de incorporaciones de vectores. Si deseas obtener información para transferir datos empresariales a una base de datos de vectores, consulta Cómo compilar un subsistema de transferencia de datos en SAP para aplicaciones de IA generativa compatibles con RAG.

Si tu conjunto de datos es pequeño y reside en tus sistemas de SAP, puedes recuperar información con consultas SELECT, llamadas SAP BAPI o llamadas a funciones de SAP con Gemini para aumentar el contexto del modelo.

Magnificación de información

Para proporcionarle al modelo el contexto esencial específico de la empresa, te recomendamos que enriquezcas tus instrucciones con información relevante de tus sistemas SAP.

Después de obtener los datos adicionales, aumenta los datos al contexto del modelo. Esta ampliación le brinda al modelo el contexto necesario para generar una respuesta con la información de la empresa agregada.

Para aumentar los datos recuperados al contexto del modelo, adjúntalos o concatena los datos a la instrucción de entrada del modelo. Mientras agregas los datos, puedes agregar un prefijo o un sufijo con texto relevante para indicar que es contexto adicional junto con la instrucción.

Generación de respuestas

Para invocar un modelo de IA de Gemini con la instrucción aumentada, usa el componente invocador de modelos generativos del SDK de Vertex AI para ABAP.

Este enfoque garantiza que la respuesta generada no solo sea relevante para la consulta del usuario, sino que se base en los datos específicos de tu empresa, lo que genera resultados más precisos y útiles.

Caso de uso

Se puede usar una aplicación de IA generativa compatible con RAG para generar actualizaciones rápidas del inventario de materiales en un almacén mediante consultas en lenguaje natural.

Imagina una situación en la que implementas una aplicación de IA generativa para los empleados del almacén de una empresa que fabrica y envía muebles, decoración y accesorios para el hogar.

Para administrar el inventario del almacén y la cadena de suministro de manera eficiente, la aplicación de IA generativa proporciona estadísticas rápidas sobre el inventario de materiales mediante consultas basadas en lenguaje natural a través de una aplicación web de SAP. Un ejemplo de una consulta de este tipo podría ser determinar el recuento de inventario actual de un material específico.

Esta información se almacena en los datos de productos de las tablas de la base de datos de SAP, que podría ser una lista enorme de artículos para una gran empresa de artículos para el hogar. Los empleados del almacén deben obtener respuestas de la aplicación de SAP que se basen en la información de los sistemas de SAP (la única fuente de confianza). Esta información les permite tomar decisiones rápidas y eficientes, como las siguientes:

  • Disponibilidad de stock: ¿Hay un material en particular en stock?
  • Niveles de inventario: ¿Cuántas unidades de un material están disponibles?
  • Planificación de la producción: ¿Cuál debe ser el objetivo de fabricación para que un material cumpla con el próximo pedido entrante?

Implementación

En esta sección, se describe la implementación de un subsistema de publicación para el caso de uso de almacén. En ella, se detalla cómo usar el SDK de Vertex AI para ABAP, incorporado en la versión más reciente del SDK de ABAP para Google Cloud, para recuperar información y también interactuar con los modelos de Gemini.

En el caso de uso del almacén, ten en cuenta que la información del inventario en SAP está vinculada a un ID de material único para cada producto. Cada producto también tiene atributos descriptivos almacenados en SAP, como su nombre, una descripción detallada, la categoría y otras propiedades relevantes. Estas descripciones textuales se convierten en representaciones numéricas llamadas "incorporaciones" y se almacenan en una base de datos de vectores. Cada incorporación está vinculada a su ID de material correspondiente, lo que permite realizar búsquedas y análisis eficientes de la información de los productos.

Una vez que se actualice tu base de datos de vectores, para ejecutar la búsqueda "¿cuál es el recuento actual del inventario de un producto?", puedes hacer lo siguiente:

  • Realiza una búsqueda vectorial en la base de datos de vectores con la consulta para recuperar el ID del material.

  • Consulta las tablas de SAP y llama a SAP BAPI para obtener la cantidad en stock del ID de material.

  • Aumenta la cantidad en stock al contexto del modelo.

Si tu base de datos de vectores es un índice de vectores, puedes usar el SDK de Vertex AI para ABAP para invocar una búsqueda de vectores directamente desde ABAP. Para obtener más información, consulta la arquitectura de referencia Vertex AI Vector Search para aplicaciones inteligentes de SAP.

Los siguientes son los pasos de implementación de un subsistema de publicación:

  1. Para recuperar el ID de material del caso de uso del almacén, puedes usar la Búsqueda vectorial.

    En la siguiente muestra de código, se ilustra cómo recuperar el ID de material con la Búsqueda vectorial:

    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 tu conjunto de datos es pequeño y reside en tus sistemas SAP, para encontrar el ID de material del caso de uso de almacén, puedes usar consultas SELECT con la descripción del material y, luego, consultar la tabla de SAP para obtener la cantidad en stock.

    En la siguiente muestra de código, se muestra cómo recuperar la información del material en stock con las consultas 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. Para agregar los datos recuperados a la instrucción de entrada, concatena el stock disponible del material a la instrucción con el prefijo “Stock disponible”.

    En la siguiente muestra de código, se muestra cómo aumentar los datos recuperados a la instrucción de entrada:

    * Augment retrieved data to the input prompt
    lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory.
    
    
  3. Para invocar un modelo de IA de Gemini con la instrucción aumentada, usa el componente invocador de modelos generativos del SDK de Vertex AI para ABAP.

    En la siguiente muestra de código, se muestra cómo invocar el modelo con una instrucción aumentada:

    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.
    
    

Consideraciones del diseño

En esta sección, se proporciona orientación para ayudarte a usar esta arquitectura de referencia para desarrollar arquitecturas que te ayuden a cumplir con tus requisitos específicos de seguridad, privacidad, cumplimiento, costo y rendimiento.

Security, privacy, and compliance

La seguridad y el cumplimiento son responsabilidades compartidas. Para obtener información detallada, consulta Responsabilidad compartida de Vertex AI.

Para obtener información sobre el compromiso de Google Cloudcon la privacidad de los datos, consulta el Centro de recursos de privacidad.

Optimización de costos

Si usas Vector Search para recuperar información de RAG, para reducir los costos, considera elegir tamaños de fragmentos más bajos y representaciones de menor dimensión para tus índices, lo que te permite usar una máquina de procesamiento más pequeña para implementar los índices.

Vertex AI es una oferta facturable de Google Cloud. Para obtener información sobre los precios, consulta los precios de Vertex AI y los precios de Vector Search. Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Optimización del rendimiento

Si usas la Búsqueda vectorial para recuperar información de RAG, para mejorar la latencia y buscar conjuntos de datos grandes, considera elegir tamaños de fragmentos más altos cuando crees tu índice y máquinas de procesamiento de alto rendimiento cuando implementes tu índice. Para obtener más información sobre los tamaños de fragmentos de un índice, consulta Tamaño del índice.

Para aumentar la relevancia de las respuestas de la búsqueda, genera incorporaciones de tus datos empresariales en dimensiones superiores. Las máquinas de procesamiento y las dimensiones de incorporación más altas son costosas. Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

¿Qué sigue?

Colaboradores

Autor: Devesh Singh | Ingeniero de aplicaciones de SAP

Otro colaborador: Vikash Kumar | Escritor técnico