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 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
Extrair informações usando 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.
Recuperar informações sem a Pesquisa Vetorial
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:
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.
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.
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
Para saber como usar a pesquisa vetorial para pesquisa semântica com aplicativos SAP, consulte Pesquisa vetorial da Vertex AI para aplicativos SAP inteligentes.
Para saber como usar a pesquisa de vetor com o SDK da Vertex AI para ABAP, consulte Usar a pesquisa de vetor da Vertex AI.
Para saber como ingerir dados corporativos em um banco de dados de vetores, consulte Criar um subsistema de ingestão de dados no SAP para aplicativos de IA generativa com capacidade de RAG.
Se você precisar de ajuda para resolver problemas com o SDK ABAP para Google Cloud, faça o seguinte:
- Consulte o guia de solução de problemas do ABAP SDK for Google Cloud.
- Faça suas perguntas e discuta o SDK ABAP para Google Cloud com a comunidade nos Fóruns do Cloud.
- Colete todas as informações de diagnóstico disponíveis e entre em contato com o Cloud Customer Care. Para mais informações sobre como entrar em contato com o atendimento ao cliente, consulte Como receber suporte para a SAP no Google Cloud.
Colaboradores
Autor: Devesh Singh | Engenheiro de aplicativos SAP
Outro colaborador: Vikash Kumar | Redator técnico