Subsistema de ingestão de dados no SAP para aplicativos de IA generativa

Este documento descreve uma arquitetura de referência para projetar um subsistema de ingestão de dados no SAP para aplicativos de IA generativa com capacidade de RAG. Esse subsistema usa o ABAP SDK for Google Cloud no local ou em qualquer edição na nuvem para se integrar aos serviços do Google Cloud necessários para criar aplicativos de IA generativa compatíveis com o RAG.

Um aplicativo de IA generativa com capacidade de geração aumentada de recuperação (RAG, na sigla em inglês) tem vários componentes, entre os quais o subsistema de ingestão de dados é responsável por preparar e processar os dados corporativos. Esse subsistema ajuda você a preparar e armazenar os dados da empresa como embeddings em um banco de dados de vetores, para interações precisas e úteis de IA.

Como muitas organizações usam sistemas ERP da SAP para armazenar dados corporativos, este documento oferece orientações sobre a integração de soluções de armazenamento de dados e bancos de dados de pesquisa de vetores do Google Cloud como parte do subsistema de ingestão de dados. Assim, você pode fazer escolhas informadas e usar os serviços do Google Cloud de forma eficaz para criar um pipeline robusto e eficiente para seus aplicativos de IA generativa com capacidade de RAG.

O público-alvo deste documento inclui desenvolvedores ABAP, arquitetos de soluções SAP e arquitetos de nuvem. O documento pressupõe que você conheça os conceitos de terminologia da pesquisa vetorial e RAG.

Arquitetura

O diagrama a seguir mostra uma arquitetura de referência que ilustra os componentes de um subsistema de ingestão de dados no SAP:

Subsistema de ingestão de dados no SAP

Essa arquitetura de subsistema de ingestão de dados inclui os seguintes componentes:

# Componente Detalhes
1 Subsistema de ingestão de dados Prepara e processa dados corporativos para gerar embeddings vetoriais. Esses embeddings são armazenados em um banco de dados de vetores adequado no Google Cloud. Você também pode armazenar seus dados corporativos no Google Cloud.
2 SDK do ABAP para Google Cloud O SDK processa a comunicação entre o subsistema de ingestão de dados e vários serviços do Google Cloud.
3 Armazenamento de dados Opcional. Solução de armazenamento de dados do Google Cloud, como BigQuery ou Cloud Storage, usada para armazenar dados empresariais, estruturados e não estruturados. Para mais informações, consulte Armazenar dados corporativos no Google Cloud.
4 Modelo de embedding (Vertex AI) Modelos de IA que geram embeddings de várias fontes de dados empresariais.
5 Produtos da Pesquisa vetorial Armazena as inclusões em um banco de dados de vetor, como o Cloud Storage ou o BigQuery, onde é possível realizar a pesquisa semântica.

Subsistema de ingestão de dados

Esta seção explica o subsistema de ingestão de dados que transforma seus dados corporativos em embeddings e os armazena em um banco de dados vetorial para uso com aplicativos de IA generativa com capacidade de RAG. Esse subsistema pode processar uma ampla variedade de dados do SAP, incluindo documentos, imagens, regras de negócios e instruções, para gerar incorporações.

Preparar dados corporativos

Antes de implantar seu aplicativo de IA generativa compatível com RAG pela primeira vez, carregue as incorporações dos dados corporativos atuais do seu sistema SAP. Você pode fazer isso criando novos programas em lote ou reutilizando os existentes que podem ler os dados da empresa em partes gerenciáveis.

Depois de realizar o carregamento inicial de dados e incorporações, o subsistema de ingestão de dados precisa acompanhar todas as mudanças nos dados do SAP. Sejam novos registros, atualizações de registros existentes ou exclusões, o índice de pesquisa de vetor precisa refletir essas mudanças. Para fazer isso, use os pontos apropriados no framework de desenvolvimento de aplicativos SAP, como complementos empresariais (BAdIs) e gerenciadores de eventos RAP. Isso garante que as incorporação permaneçam atualizadas e que seus aplicativos de IA sempre tenham as informações mais recentes.

Armazenar dados corporativos no Google Cloud (opcional)

Os sistemas SAP podem conter dados empresariais estruturados e não estruturados. Opcionalmente, é possível armazenar esses dados corporativos no Google Cloud para recuperação do subsistema de veiculação.

Para armazenar dados corporativos, use os seguintes serviços do Google Cloud:

Gerar embeddings com base em dados empresariais

Para gerar embeddings de texto e multimodais com base nos dados corporativos, use modelos de embedding com o SDK da Vertex AI para ABAP.

Os embeddings são basicamente códigos numéricos que representam texto, imagens ou vídeos de uma forma que captura como eles estão relacionados. Os aplicativos usam esses códigos para entender e gerar linguagem, reconhecendo até mesmo os significados e relacionamentos mais complexos no seu conteúdo específico. O processo funciona transformando texto, imagens e vídeos em listas de números, conhecidos como vetores, que são projetados para capturar de forma eficaz o significado do conteúdo original.

Armazenar os embeddings

Para armazenar e pesquisar de forma eficiente as incorporações geradas com base nos dados corporativos da SAP, use os produtos de pesquisa de vetores do Google Cloud, que funcionam como um banco de dados de vetores.

Para armazenar as representações nos dados corporativos do SAP, escolha um banco de dados de vetores da lista a seguir:

Considerações sobre o design

Confira a seguir as principais considerações de design para escolher um banco de dados vetorial:

  • Desempenho: fatores como velocidade de indexação para novos vetores, velocidade de pesquisa (latência), escalonabilidade, compensação entre a recuperação de todos os resultados relevantes (recall) e apenas os mais relevantes (precisão).
  • Características dos dados: o tamanho dos vetores de incorporação, o tamanho do conjunto de dados de vetores e a distribuição de dados afetam o custo, o desempenho e a indexação.
  • Recursos: funções de distância com suporte, como o algoritmo euclidiano e a semelhança de coseno, capacidade de filtrar, combinar a pesquisa de palavras-chave e de vetores e suporte à pesquisa de vizinhos mais próximos aproximados (ANN).
  • Integração: integração existente e facilidade de ingestão de dados dos seus aplicativos.
  • Custo: modelo de preços, armazenamento e custos de consulta correspondentes aos dados e ao volume de pesquisa.

Para permitir a pesquisa e análise eficientes, armazene as embeddings em um banco de dados de vetores, junto com os identificadores que as vinculam aos dados de origem.

A decisão de armazenar dados corporativos em uma solução de armazenamento do Google Cloud depende principalmente do local do seu subsistema de fornecimento:

  • Se o subsistema de prestação for SAP, o armazenamento de dados corporativos fora do SAP é opcional, já que você já tem acesso aos dados corporativos no SAP.

  • Se o subsistema de prestação estiver fora do SAP, como o App Engine, talvez seja necessário armazenar os dados corporativos em uma solução de armazenamento do Google Cloud adequada para extração de dados eficiente. Isso pode ser evitado se o subsistema de serviço puder fazer chamadas remotas no SAP para recuperar os dados.

Saiba como gerar e armazenar embeddings

Esta seção explica como gerar e armazenar embeddings com base nos dados da empresa. Há dois padrões principais para gerar e armazenar embeddings:

  • Gerar embeddings no SAP: gere embeddings dos dados corporativos que residem no sistema SAP ERP usando um modelo de embeddings adequado com o SDK da Vertex AI para ABAP e armazene-os em um banco de dados de vetor.

  • Gerar embeddings no Google Cloud: gere embeddings dos dados corporativos armazenados em um meio de armazenamento no Google Cloud usando uma abordagem sem servidor, como as funções do Cloud Run ou o BigQuery, e armazene-os em um banco de dados de vetores.

Gerar embeddings no SAP

Para gerar embeddings de dados corporativos da SAP localmente no sistema SAP, use vários modelos de embedding com o SDK da Vertex AI para ABAP. Esses embeddings gerados podem ser enviados para um banco de dados de vetores adequado no Google Cloud usando um dos mecanismos de ingestão integrados do SDK.

Você pode decidir quais dados converter em embeddings com base na sua necessidade de recursos de pesquisa vetorial. Para saber como gerar embeddings com o SDK da Vertex AI para ABAP, consulte Gerar embeddings.

Esta seção explica os tipos de dados comuns do SAP e como gerar embeddings usando o SDK da Vertex AI para ABAP.

Dados estruturados da empresa armazenados em tabelas do SAP

Você gera principalmente incorporações para uma ou mais colunas de texto nas tabelas do SAP. Por exemplo, se você quiser pesquisar fornecedores pelo nome, endereço ou número de telefone, concatena os valores dessas colunas e gera uma incorporação de texto desse valor combinado. Alguns outros valores de texto que são bons candidatos para incorporação de texto são descrições em tabelas de texto, textos longos vinculados a transações comerciais.

O exemplo de código abaixo ilustra como gerar incorporações de texto e armazená-las em um bucket do 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' ).

Substitua:

  • SUPPLIER: um código alfanumérico exclusivo para identificar um fornecedor.
  • EMBEDDING_MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelos.
  • BUCKET_NAME: o nome do bucket de destino do Cloud Storage.

Imagens

Muitas indústrias, incluindo manufatura e varejo, capturam e armazenam imagens de objetos de negócios importantes, como matérias-primas, produtos acabados e uma ampla gama de equipamentos. Para permitir a pesquisa eficiente desses objetos de negócios usando descrições textuais ou semelhança visual, use embeddings multimodais.

O exemplo de código abaixo ilustra como gerar embeddings multimodais para imagens e publicá-las em um tópico do 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' ).

Substitua:

  • UNIQUE_ID: um identificador exclusivo de uma imagem. Por exemplo, pode ser uma combinação do nome do arquivo e da data de criação da imagem.
  • CONTEXTUAL_TEXT: opcional. Adiciona contexto e significado ao conteúdo de entrada que é transmitido ao modelo de embeddings.
  • EMBEDDING_MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelos.
  • PUBSUB_TOPIC_ID: o ID do tópico do Pub/Sub em que as inclusões vão ser publicadas.

Documentos

Os processos de negócios do SAP lidam com diferentes tipos de documentos, como contratos, manuais, guias e folhas de dados de segurança. Esses documentos podem conter informações importantes necessárias para tomar decisões de negócios. Para encontrar esses dados armazenados nos documentos com facilidade, use embeddings multimodais. Para pesquisar de forma eficaz em documentos longos, é necessário implementar um mecanismo de fragmentação. Ele divide o documento em unidades menores, como páginas ou seções, permitindo a contextualização dos resultados da pesquisa em uma área específica.

O exemplo de código abaixo ilustra como extrair dados de um documento PDF e gerar embeddings multimodais para cada página e, em seguida, enviar essas embeddings para uma tabela do 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.

Substitua:

  • DOC_AI_CLIENT_KEY: a chave do cliente para autenticação.
  • PROJECT_ID: o ID do projeto do Google Cloud em que o processador foi criado.
  • LOCATION_ID: o local do processador. Para saber como ver detalhes do processador, consulte Conferir detalhes sobre um processador.
  • PROCESSOR_ID: o ID do processador. Para saber como conferir os detalhes do processador, consulte Conferir detalhes sobre um processador.
  • UNIQUE_ID: um identificador que identifica exclusivamente um fragmento específico de conhecimento. Por exemplo, pode ser uma combinação do nome do documento e do número da página.
  • CONTEXTUAL_TEXT: opcional. Adiciona contexto e significado ao conteúdo de entrada que é transmitido ao modelo de embeddings.
  • EMBEDDING_MODEL_KEY: a chave do modelo para gerar embeddings, que é configurada nos parâmetros de geração de modelo.
  • BIGQUERY_DATASET_ID: o ID do conjunto de dados do BigQuery.
  • BIGQUERY_TABLE_ID: o ID da tabela do BigQuery.

Gerar embeddings no Google Cloud

Como alternativa à geração de incorporações na SAP, é possível gerar incorporações de forma nativa no Google Cloud com pouca ou nenhuma programação. Essa abordagem exige que você armazene os dados da empresa no Google Cloud antes de gerar as embeddings.

Se os dados corporativos forem carregados no BigQuery, será possível gerar incorporações de texto diretamente executando um comando SQL. Para mais informações, consulte Gerar embeddings de texto usando a função ML.GENERATE_EMBEDDING.

Se os dados da sua empresa forem enviados para um bucket do Cloud Storage, use um dos seguintes métodos para gerar incorporações:

A seguir

Colaboradores

Autor: Ajith Urimajalu | Líder da equipe de engenheiros de aplicativos SAP

Outro colaborador: Vikash Kumar | Redator técnico