Projetar um subsistema de disponibilização no SAP para aplicativos de IA generativa com capacidade de RAG

Este documento descreve uma arquitetura de referência para projetar um subsistema de atendimento no SAP para uso com aplicativos de IA generativa com capacidade de geração aumentada de recuperação (RAG, na sigla em inglês). Para integrar os serviços Google Cloud necessários para criar aplicativos de IA generativa compatíveis com RAG, essa arquitetura de referência usa o ABAP SDK for Google Cloud no local ou em qualquer edição na nuvem.

Este documento é destinado a desenvolvedores ABAP, arquitetos de soluções SAP e arquitetos de nuvem. Ele pressupõe que você esteja familiarizado com a terminologia da pesquisa vetorial e os conceitos da RAG.

Um subsistema de disponibilização é um componente importante em um aplicativo de IA generativa compatível com RAG porque ele gerencia o fluxo de solicitações e respostas entre o aplicativo e os usuários. O subsistema de veiculação descrito neste documento permite que seus aplicativos acessem e usem dados corporativos da SAP para fornecer contexto a modelos de linguagem grandes (LLMs), o que pode ajudar a gerar resultados mais precisos e confiáveis.

Ao combinar LLMs do Gemini com dados e processos empresariais da SAP, você pode ter benefícios como:

  • Maior precisão: o acesso a uma gama mais ampla de informações leva a uma tomada de decisões mais precisa e fundamentada nos dados da empresa.
  • Experiência do usuário aprimorada: informações personalizadas e contextualmente relevantes melhoram a satisfação do usuário com uma resposta de modelo mais confiável.

Arquitetura

O diagrama a seguir mostra os componentes de um subsistema de disponibilização no SAP:

Como disponibilizar o subsistema no SAP

Como mostrado na imagem anterior, a arquitetura do subsistema de disponibilização inclui os seguintes componentes:

Número Componente Detalhes
1 Subsistema de disponibilização O subsistema de disponibilização é responsável por extrair informações relevantes das fontes de dados. Ele aumenta as informações com um comando, interage com os modelos de IA generativa e envia a resposta final ao usuário.
2 SDK do ABAP para Google Cloud O SDK lida com a comunicação entre o subsistema de disponibilização e vários serviços Google Cloud .
3 Módulo de função SAP Quando o conjunto de dados é pequeno e está nos sistemas SAP, é possível usar os módulos de função do SAP para criar o pipeline de recuperação de informações. É possível extrair dados de um módulo de função SAP usando consultas SELECT, chamadas de BAPI ou chamadas de função SAP com Gemini.
4 Produtos da Pesquisa vetorial Quando os dados da sua empresa são grandes e você quer um aplicativo RAG com latência mínima, crie seu pipeline de recuperação usando a Pesquisa de vetores. É possível realizar pesquisas semânticas nos dados corporativos armazenados na forma de incorporações em um banco de dados vetorial, como o Cloud Storage, o Vertex AI Feature Store ou o BigQuery.
5 Modelos Gemini da Vertex AI Modelos da Vertex AI Gemini que geram respostas com base nos dados da sua empresa.

Subsistema de disponibilização

O subsistema de disponibilização de uma solução de IA generativa consiste nos seguintes subcomponentes:

Recuperação de informações

Quando os usuários enviam solicitações para o aplicativo de IA generativa por um front-end, o subsistema de disponibilização recupera informações de uma fonte de dados. Para extrair informações de uma fonte de dados, escolha um método adequado para seu caso de uso:

  • Extrair informações usando a Pesquisa Vetorial
  • Recuperar informações sem a Pesquisa Vetorial

Quando os dados da sua empresa são grandes (estruturados ou não estruturados) e você quer um aplicativo RAG com latência mínima, recomendamos que você crie seu pipeline de recuperação usando a Pesquisa vetorial. A pesquisa vetorial pode executar pesquisas de texto e multimodais em bilhões de registros em milissegundos.

Para usar a Pesquisa de vetor para recuperação de informações, você precisa configurar um banco de dados de vetor para armazenar os dados da empresa na forma de embeddings vetoriais. Para informações sobre como ingerir dados corporativos em um banco de dados de vetor, consulte Criar um subsistema de ingestão de dados no SAP para aplicativos de IA generativa com capacidade de RAG.

Se o conjunto de dados for pequeno e residir nos sistemas SAP, você poderá extrair informações usando consultas SELECT, chamadas SAP BAPI ou chamadas de função SAP com Gemini para aumentar o contexto do modelo.

Aumento de informações

Para fornecer ao modelo o contexto essencial específico da empresa, recomendamos que você aprimore as instruções com informações relevantes dos seus sistemas SAP.

Depois de receber os dados adicionais, adicione-os ao contexto do modelo. Esse aumento fornece ao modelo o contexto necessário para fazer uma resposta usando as informações empresariais adicionadas.

Para aumentar os dados extraídos ao contexto do modelo, anexe ou concatene os dados à solicitação de entrada do modelo. Ao anexar os dados, é possível adicionar um prefixo ou sufixo com um texto relevante para indicar que ele é um contexto adicional com o comando.

Geração de respostas

Para invocar um modelo de IA do Gemini com o comando aumentado, use o componente de invocação de modelo generativo do SDK da Vertex AI para ABAP.

Essa abordagem garante que a resposta gerada não seja apenas relevante para a consulta do usuário e seja baseada nos dados específicos da sua empresa, gerando resultados mais precisos e úteis.

Caso de uso

Um aplicativo de IA generativa compatível com RAG pode ser usado para gerar atualizações rápidas do estoque de materiais em um armazém usando consultas em linguagem natural.

Considere um cenário em que você está implementando um aplicativo de IA generativa para funcionários de um depósito de uma empresa que fabrica e envia móveis, decorações e acessórios para casa.

Para gerenciar o inventário do armazém e a cadeia de suprimentos de maneira eficiente, o aplicativo de IA generativa oferece insights rápidos sobre o estoque de materiais usando consultas baseadas em linguagem natural em um aplicativo da Web da SAP. Um exemplo de consulta poderia ser determinar a contagem atual do inventário de um material específico.

Essas informações são armazenadas nos dados do produto nas tabelas do banco de dados do SAP, que podem ser uma lista enorme de itens de uma grande empresa de móveis para casa. Os funcionários do depósito precisam receber respostas do aplicativo SAP que sejam baseadas nas informações dos sistemas SAP (a única fonte de verdade). Com essas informações, eles podem tomar decisões rápidas e eficientes, como:

  • Disponibilidade em estoque: um material específico está em estoque?
  • Níveis de inventário: quantas unidades de um material estão disponíveis?
  • Planejamento da Production: qual deve ser o objetivo de fabricação para que um material atenda ao próximo pedido de entrada?

Implantação

Esta seção descreve a implementação de um subsistema de veiculação para o caso de uso do armazém. Ele detalha como usar o SDK da Vertex AI para ABAP, incorporado à versão mais recente do SDK do ABAP para Google Cloud, para extrair informações e interagir com modelos do Gemini.

No caso de uso do depósito, as informações de estoque no SAP estão vinculadas a um ID de material exclusivo para cada produto. Cada produto também tem atributos descritivos armazenados no SAP, como nome, descrição detalhada, categoria e outras propriedades relevantes. Essas descrições textuais são convertidas em representações numéricas chamadas de "embeddings" e armazenadas em um banco de dados vetorial. Cada incorporação está vinculada ao ID de material correspondente, permitindo a pesquisa e análise eficientes das informações do produto.

Depois que o banco de dados de vetores for atualizado, para executar a consulta de pesquisa "Qual é a contagem atual de inventário de um produto?", faça o seguinte:

  • Realize uma pesquisa vetorial no banco de dados de vetores com a consulta para recuperar o ID do material.

  • Consultar tabelas do SAP e chamar a BAPI do SAP para receber a quantidade de estoque do ID do material.

  • Aumente a quantidade de estoque no contexto do modelo.

Se a escolha do banco de dados vetorial for um índice vetorial, use o SDK da Vertex AI para ABAP para invocar uma pesquisa vetorial diretamente do ABAP. Para mais informações, consulte a arquitetura de referência Vertex AI Vector Search para aplicativos SAP inteligentes.

Confira a seguir as etapas de implementação de um subsistema de disponibilização:

  1. Para extrair o ID do material do caso de uso do depósito, use a pesquisa de vetor.

    O exemplo de código abaixo ilustra como recuperar o ID do material usando a Pesquisa de vetor:

    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.
    

    Se o conjunto de dados for pequeno e residir nos sistemas SAP, para encontrar o ID do material para o caso de uso do depósito, use consultas SELECT com a descrição do material e consulte a tabela SAP para receber a quantidade de estoque.

    O exemplo de código abaixo ilustra como recuperar as informações de estoque de material usando 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 aumentar os dados extraídos para a solicitação de entrada, concatenar o estoque disponível do material para a solicitação com o prefixo "Estoque disponível".

    O exemplo de código abaixo ilustra como aumentar os dados recuperados para o comando de entrada:

    * Augment retrieved data to the input prompt
    lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory.
    
    
  3. Para invocar um modelo de IA do Gemini com o comando aumentado, use o componente de invocação de modelo generativo do SDK da Vertex AI para ABAP.

    O exemplo de código a seguir ilustra como invocar o modelo com o comando aumentado:

    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.
    
    

Considerações sobre o design

Esta seção fornece orientações para ajudar você a usar essa arquitetura de referência para desenvolver arquiteturas que atendam aos seus requisitos específicos de segurança, privacidade, compliance, custo e desempenho.

segurança, privacidade e conformidade

A segurança e a conformidade são responsabilidades compartilhadas. Para informações detalhadas, consulte Responsabilidade compartilhada da Vertex AI.

Para informações sobre o compromisso do Google Cloudcom a privacidade de dados, consulte a Central de recursos de privacidade.

Otimização de custos

Se você estiver usando a Pesquisa vetorial para extrair informações da RAG, para reduzir os custos, considere escolher tamanhos de fragmentos menores e embeddings de menor dimensão para seus índices, o que permite usar uma máquina de computação menor para implantar os índices.

A Vertex AI é um serviço faturável da Google Cloud. Para informações sobre preços, consulte Preços da Vertex AI e Preços da pesquisa de vetor. Para gerar uma estimativa de custo com base na projeção de uso, use a calculadora de preços.

Otimização de desempenho

Se você estiver usando a Pesquisa vetorial para extrair informações do RAG, para melhorar a latência na pesquisa de conjuntos de dados grandes, escolha tamanhos de fragmento maiores ao criar seu índice e máquinas de computação de alto desempenho ao implantar seu índice. Para saber mais sobre os tamanhos de fragmentos de um índice, consulte Tamanho do índice.

Para aumentar a relevância das respostas de pesquisa, gere incorporações dos seus dados empresariais em dimensões maiores. Máquinas de computação e dimensões de incorporação mais altas são custosas. Para gerar uma estimativa de custo com base na projeção de uso, use a calculadora de preços.

A seguir

Colaboradores

Autor: Devesh Singh | Engenheiro de aplicativos SAP

Outro colaborador: Vikash Kumar | Redator técnico