Subsistema de transferencia de datos en SAP para aplicaciones de IA generativa

En este documento, se describe una arquitectura de referencia para diseñar un subsistema de transferencia de datos en SAP para aplicaciones de IA generativa compatibles con RAG. Este subsistema usa la edición local o cualquier edición en la nube del SDK de ABAP para Google Cloud para integrarse con los servicios de Google Cloud necesarios para compilar aplicaciones de IA generativa compatibles con RAG.

Una aplicación de IA generativa compatible con la generación aumentada de recuperación (RAG) tiene varios componentes, entre los que el subsistema de transferencia de datos es responsable de preparar y procesar los datos empresariales. Este subsistema te ayuda a preparar y almacenar tus datos empresariales como incorporaciones en una base de datos vectorial para interacciones de IA precisas y perspicaces.

Como muchas organizaciones usan sistemas de ERP de SAP para almacenar sus datos empresariales, este documento ofrece orientación para integrar las soluciones de almacenamiento de datos y las bases de datos de búsqueda vectorial de Google Cloud como parte de tu subsistema de transferencia de datos. Esto te permite tomar decisiones fundamentadas y usar de manera eficaz los servicios de Google Cloud para crear una canalización sólida y eficiente para tus aplicaciones de IA generativa compatibles con RAG.

El público objetivo de este documento incluye a desarrolladores de ABAP, arquitectos de soluciones de SAP y arquitectos de nube. En el documento, se da por sentado que conoces los conceptos de terminología de Búsqueda de vectores y RAG.

Arquitectura

En el siguiente diagrama, se muestra una arquitectura de referencia que ilustra los componentes de un subsistema de transferencia de datos en SAP:

Subsistema de transferencia de datos en SAP

Esta arquitectura de subsistema de transferencia de datos incluye los siguientes componentes:

# Componente Detalles
1 Subsistema de transferencia de datos Prepara y procesa datos empresariales para generar incorporaciones de vectores. Luego, estas incorporaciones se almacenan en una base de datos vectorial adecuada en Google Cloud. De manera opcional, puedes almacenar tus datos empresariales en Google Cloud.
2 SDK ABAP para Google Cloud El SDK controla la comunicación entre el subsistema de transferencia de datos y varios servicios de Google Cloud.
3 Almacenamiento de datos Opcional. Solución de almacenamiento de datos de Google Cloud, como BigQuery o Cloud Storage, que se usa para almacenar datos empresariales, tanto estructurados como no estructurados Para obtener más información, consulta Almacena datos empresariales en Google Cloud.
4 Modelo de incorporaciones (Vertex AI) Modelos de IA que generan incorporaciones a partir de varias fuentes de datos empresariales.
5 Productos de Búsqueda de vectores Almacena las incorporaciones en una base de datos vectorial, como Cloud Storage o BigQuery, en la que puedes realizar búsquedas semánticas.

Subsistema de transferencia de datos

En esta sección, se explica el subsistema de transferencia de datos que transforma tus datos de la empresa en incorporaciones y las almacena en una base de datos de vectores para usarlas con aplicaciones de IA generativa compatibles con RAG. Este subsistema puede procesar una amplia variedad de datos de SAP, incluidos documentos, imágenes, reglas empresariales y mensajes para generar incorporaciones.

Prepara los datos de la empresa

Antes de implementar tu aplicación de IA generativa compatible con RAG por primera vez, debes cargar incorporaciones para los datos empresariales existentes desde tu sistema SAP. Para ello, puedes compilar nuevos programas por lotes o reutilizar los existentes que puedan leer los datos de tu empresa en partes manejables.

Una vez que hayas realizado la carga inicial de datos y incorporaciones, el subsistema de transferencia de datos debe mantenerse al día con los cambios en tus datos de SAP. Ya sean registros nuevos, actualizaciones de los existentes o eliminaciones, el índice de búsqueda de vectores debe reflejar estos cambios. Para ello, puedes usar los lugares adecuados dentro del framework de desarrollo de aplicaciones de SAP, como los complementos empresariales (BAdIs) y los controladores de eventos de RAP. Esto garantiza que tus incorporaciones permanezcan actualizadas y que tus aplicaciones de IA siempre tengan la información más reciente.

Almacena datos empresariales en Google Cloud (opcional)

Los sistemas de SAP pueden contener datos empresariales estructurados y no estructurados. De manera opcional, puedes almacenar estos datos empresariales en Google Cloud para su recuperación desde el subsistema de publicación.

Para almacenar tus datos empresariales, puedes usar los siguientes servicios de Google Cloud:

  • Para transmitir datos estructurados de SAP a BigQuery, puedes usar BigQuery Connector para SAP o el método INSERT_ALL_TABLEDATA de la clase /GOOG/CL_BIGQUERY_V2 del SDK de ABAP para Google Cloud.
  • Para almacenar datos no estructurados, como imágenes y documentos PDF en Cloud Storage, puedes usar la clase /GOOG/CL_STORAGE_V1 del SDK de ABAP para Google Cloud. Si deseas ver una muestra de código que ilustra cómo subir un objeto a un bucket de Cloud Storage, consulta Sube un archivo a un bucket.
  • Para configurar Cloud Storage como repositorio de contenido para SAP, puedes implementar y personalizar la solución de ejemplo disponible en GitHub, Google Cloud Storage: Content Server for SAP.

Genera incorporaciones a partir de datos empresariales

Para generar incorporaciones de texto y multimodales a partir de tus datos empresariales, puedes usar modelos de incorporación con el SDK de Vertex AI para ABAP.

Los embeddings son, en esencia, códigos numéricos que representan texto, imágenes o videos de una manera que captura cómo se relacionan. Las aplicaciones usan estos códigos para comprender y generar lenguaje, y reconocer incluso los significados y las relaciones más complejos en tu contenido específico. El proceso funciona transformando el texto, las imágenes y los videos en listas de números, conocidos como vectores, que están diseñados para capturar con eficacia el significado del contenido original.

Almacena las incorporaciones

Para almacenar y buscar de manera eficiente las incorporaciones generadas a partir de tus datos empresariales de SAP, puedes usar los productos de búsqueda vectorial de Google Cloud, que actúan como una base de datos vectorial.

Para almacenar las incorporaciones de tus datos empresariales de SAP, elige una base de datos de vectores de la siguiente lista:

Consideraciones del diseño

Las siguientes son consideraciones de diseño clave para elegir una base de datos vectorial:

  • Rendimiento: Factores como la velocidad de indexación de vectores nuevos, la velocidad de búsqueda (latencia), la escalabilidad y la compensación entre recuperar todos los resultados relevantes (recuperación) y solo los más relevantes (precisión).
  • Características de los datos: El tamaño de los vectores de incorporación, el tamaño del conjunto de datos de vectores y la distribución de datos afectan el costo, el rendimiento y el indexado.
  • Funciones: Funciones de distancia compatibles, como el algoritmo euclidiano y la similitud del coseno, la capacidad de filtrar, combinar la búsqueda de palabras clave y la búsqueda de vectores, y la compatibilidad con la búsqueda de vecinos más cercanos aproximados (ANN).
  • Integración: Integración existente y facilidad de transferencia de datos desde tus aplicaciones.
  • Costo: Es el modelo de precios, el almacenamiento y los costos de consulta correspondientes a los datos y el volumen de búsqueda.

Para permitir una búsqueda y un análisis eficientes, almacena las incorporaciones en una base de datos de vectores, junto con los identificadores que las vinculan a sus datos de origen.

La decisión de almacenar datos empresariales en una solución de almacenamiento de Google Cloud depende principalmente de la ubicación de tu subsistema de entrega:

  • Si tu subsistema de publicación es SAP, almacenar datos empresariales fuera de SAP es opcional, ya que ya tienes acceso a tus datos empresariales dentro de SAP.

  • Si tu subsistema de publicación reside fuera de SAP, como App Engine, entonces es posible que debas almacenar tus datos empresariales en una solución de almacenamiento de Google Cloud adecuada para la recuperación de datos eficiente. Puedes evitar esto si tu subsistema de entrega puede realizar llamadas remotas a SAP para recuperar los datos.

Explora cómo generar y almacenar embeddings

En esta sección, se explica cómo generar y almacenar incorporaciones a partir de tus datos empresariales. Existen dos patrones principales para generar y almacenar incorporaciones:

  • Genera incorporaciones en SAP: Genera incorporaciones a partir de los datos empresariales que residen en tu sistema de ERP de SAP con un modelo de incorporaciones adecuado con el SDK de Vertex AI para ABAP y almacénalos en una base de datos vectorial.

  • Genera incorporaciones en Google Cloud: Genera incorporaciones a partir de los datos empresariales que residen en un medio de almacenamiento en Google Cloud mediante un enfoque sin servidores, como las funciones de Cloud Run o BigQuery, y almacénalos en una base de datos vectorial.

Genera incorporaciones en SAP

Para generar embeddings a partir de datos empresariales de SAP de forma local dentro del sistema de SAP, puedes usar varios modelos de embedding con el SDK de Vertex AI para ABAP. Luego, estos embeddings generados se pueden enviar a una base de datos de vectores adecuada en Google Cloud con uno de los mecanismos de transferencia integrados del SDK.

Puedes decidir qué datos convertir en incorporaciones según tu necesidad de funciones de búsqueda de vectores. Si deseas obtener información para generar incorporaciones con el SDK de Vertex AI para ABAP, consulta Genera incorporaciones.

En esta sección, se explican los tipos de datos comunes de SAP y cómo generar embeddings con el SDK de Vertex AI para ABAP.

Datos empresariales estructurados almacenados en tablas de SAP

En primer lugar, generas incorporaciones para una o más columnas de texto en las tablas de SAP. Por ejemplo, si deseas buscar proveedores por su nombre, dirección o número de teléfono, debes concatenar los valores de estas columnas y, luego, generar una incorporación de texto de este valor combinado. Algunos otros valores de texto que son buenos candidatos para la incorporación de texto son las descripciones en tablas de texto y los textos largos vinculados a transacciones comerciales.

En la siguiente muestra de código, se ilustra cómo generar embeddings de texto y almacenarlas en un bucket de 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' ).

Reemplaza lo siguiente:

  • SUPPLIER: Es un código alfanumérico único para identificar a un proveedor.
  • EMBEDDING_MODEL_KEY: Es la clave de modelo para generar incorporaciones, que se configura en los parámetros de generación del modelo.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage de destino.

Imágenes

Muchas industrias, como la fabricación y la venta minorista, capturan y almacenan imágenes de objetos comerciales clave, como materias primas, productos terminados y una amplia variedad de equipos. Para habilitar la búsqueda eficiente de estos objetos empresariales con descripciones textuales o similitud visual, puedes usar incorporaciones multimodales.

En la siguiente muestra de código, se muestra cómo generar embeddings multimodales para imágenes y publicarlas en un tema de 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' ).

Reemplaza lo siguiente:

  • UNIQUE_ID: Es un identificador que identifica de forma única una imagen. Por ejemplo, puede ser una combinación del nombre de archivo y la fecha de creación de la imagen.
  • CONTEXTUAL_TEXT: Opcional Contexto y significado adicionales al contenido de entrada que se pasa al modelo de embeddings.
  • EMBEDDING_MODEL_KEY: Es la clave de modelo para generar incorporaciones, que se configura en los parámetros de generación del modelo.
  • PUBSUB_TOPIC_ID: Es el ID del tema de Pub/Sub en el que se publicarán las incorporaciones.

Documentos

Los procesos empresariales de SAP manejan diferentes tipos de documentos, como contratos, manuales, guías y hojas de datos de seguridad. Estos documentos pueden contener información importante necesaria para tomar decisiones comerciales. Para encontrar estos datos almacenados en los documentos sin problemas, puedes usar incorporaciones multimodales. Para buscar de manera eficaz en documentos largos, se debe implementar un mecanismo de fragmentación. Divide el documento en unidades más pequeñas, como páginas o secciones, lo que permite contextualizar los resultados de la búsqueda dentro de un área específica.

En la siguiente muestra de código, se muestra cómo extraer datos de un documento PDF, generar incorporaciones multimodales para cada página y, luego, enviar esas incorporaciones a una tabla de 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.

Reemplaza lo siguiente:

  • DOC_AI_CLIENT_KEY: Es la clave del cliente para la autenticación.
  • PROJECT_ID: Es el ID del proyecto de Google Cloud en el que se crea el encargado del tratamiento de datos.
  • LOCATION_ID: La ubicación del procesador. Para obtener información sobre cómo ver los detalles del procesador, consulta Cómo ver los detalles de un procesador.
  • PROCESSOR_ID: Es el ID del procesador. Para obtener información sobre cómo ver los detalles del procesador, consulta Cómo ver los detalles de un procesador.
  • UNIQUE_ID: Es un identificador que identifica de forma inequívoca un fragmento de conocimiento específico. Por ejemplo, puede ser una combinación del nombre del documento y el número de página.
  • CONTEXTUAL_TEXT: Opcional Contexto y significado adicionales al contenido de entrada que se pasa al modelo de embeddings.
  • EMBEDDING_MODEL_KEY: Es la clave de modelo para generar incorporaciones, que se configura en los parámetros de generación del modelo.
  • BIGQUERY_DATASET_ID: Es el ID del conjunto de datos de BigQuery.
  • BIGQUERY_TABLE_ID: Es el ID de la tabla de BigQuery.

Genera incorporaciones en Google Cloud

Como alternativa a la generación de incorporaciones en SAP, puedes generar incorporaciones de forma nativa en Google Cloud con codificación mínima o sin ella. Este enfoque requiere que almacenes tus datos empresariales en Google Cloud antes de generar incorporaciones.

Si tus datos empresariales se cargaron en BigQuery, puedes generar incorporaciones de texto directamente ejecutando un comando SQL. Para obtener más información, consulta Genera incorporaciones de texto con la función ML.GENERATE_EMBEDDING.

Si tus datos empresariales se suben a un bucket de Cloud Storage, usa uno de los siguientes métodos para generar incorporaciones:

¿Qué sigue?

Colaboradores

Autor: Ajith Urimajalu | Ingeniero de aplicaciones de SAP y líder de equipo

Otro colaborador: Vikash Kumar | Escritor técnico