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:
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:
- Desarrolla una aplicación de Cloud Run. Para obtener más información, consulta Infraestructura para una aplicación de IA generativa compatible con RAG mediante Vertex AI.
- Para una tabla de objetos que represente el bucket de Cloud Storage, usa la función
ML.GENERATE_EMBEDDING
. Para obtener más información, consulta Genera incorporaciones de texto con la funciónML.GENERATE_EMBEDDING
.
¿Qué sigue?
Para obtener información sobre cómo usar la Búsqueda de vectores para la búsqueda semántica con aplicaciones de SAP, consulta Búsqueda de vectores de Vertex AI para aplicaciones inteligentes de SAP.
Si deseas obtener información para usar Vector Search con el SDK de Vertex AI para ABAP, consulta Cómo usar Vertex AI Vector Search.
Si necesitas ayuda para resolver problemas con el SDK de ABAP para Google Cloud, haz lo siguiente:
- Consulta la guía de solución de problemas del SDK de ABAP para Google Cloud.
- Haz tus preguntas y analiza el SDK de ABAP para Google Cloud con la comunidad en Cloud Forums.
- Recopila toda la información de diagnóstico disponible y comunícate con el servicio de Atención al cliente de Cloud. Si deseas obtener más información para comunicarte con el equipo de Atención al cliente, consulta Obtén asistencia para SAP en Google Cloud.
Colaboradores
Autor: Ajith Urimajalu | Ingeniero de aplicaciones de SAP y líder de equipo
Otro colaborador: Vikash Kumar | Escritor técnico