O blog da AWS
Habilitando modelo de IA generativa com RAG no SageMaker Canvas sem código
Por Marco Ruiz, Arquiteto de soluções Sênior, AWS;
e Givanildo Alves, Arquiteto de Prototipação Sênior.
Em Outubro de 2023 a AWS anunciou novas capacidades de sumarização de conteúdo e extração de informações no Amazon SageMaker Canvas, facilitando para os desenvolvedores a criação de aplicações de IA generativa. Neste post, vamos mostrar passo a passo como usar o SageMaker Canvas e o Amazon Kendra com os modelos do Amazon Bedrock para habilitar um modelo de LLM (Large Language Model) com assistência do RAG (Retrieval Augmented Generation), sem a necessidade de desenvolvimento de código.
O RAG é uma técnica de IA que combina modelos de recuperação de informação e modelos de linguagem (LLMs), para adicionar informações de domínios específicos ou da base de conhecimentos corporativos ao contexto de execução de prompts e permitir a geração de respostas mais precisas e coerentes.
Ao invés de treinar uma LLM ou executar fine-tuning para incorporar novas informações, o que pode ser computacionalmente caro, RAG via SageMaker Canvas utiliza uma LLM já pré-treinada e refinada para executar diferentes tarefas, junto com um indexador de documentos.
O indexador recupera rapidamente os documentos mais relevantes para a pergunta e a LLM gera a resposta final considerando o contexto desses documentos recuperados. Mais informações sobre a técnica de LLM com RAG estão descritas na documentação o que é RAG.
Para executar os passos deste post, você necessitará de uma conta AWS. Os serviços utilizados podem incorrer em custos conforme a politica de cada serviço. Utilizaremos os serviços: Amazon S3, Amazon Kendra, Amazon Sagemaker e Amazon Bedrock.
Para explicar como configurar o ambiente, vamos dividir em quatro etapas:
- Indexar documentos no Amazon Kendra
- Escolher um modelo do Amazon Bedrock
- Selecionar e configurar o índice do Kendra no SageMaker Canvas
- Fazer pesquisas com o SageMaker Canvas utilizando base RAG
Vamos aos detalhes de cada etapa!
Indexando documentos no Amazon Kendra:
Para indexar os documentos que queremos usar como contexto para o modelo RAG usaremos o serviço Amazon Kendra. O Kendra é o mecanismo de pesquisa da AWS que permite indexar e pesquisar facilmente grandes conjuntos de dados.
O primeiro passo é montar a base de dados que será indexada pelo Amazon Kendra. Neste blogpost iremos usar o Amazon S3 com arquivos PDF que serão nossa base de conhecimento. Para isso pesquisamos 4 sites com informações públicas sobre os compositores clássicos Bethoveen, Bach, Mozart e a compositora brasileira Chiquinha Gonzaga. Armazenamos estes dados em 7 arquivos PDF diferentes e armazenamos em um bucket S3 como mostrado a seguir:
Figura 1 – Criando um bucket
Figura 2 – Adicionando arquivos em um bucket
Mais detalhes de como criar e subir arquivos no Amazon S3.
Com os dados em um bucket S3, agora é necessário criar um índice no console do Kendra. A partir do upload dos documentos, o Kendra se encarregará de processá-los automaticamente. É possível indexar PDFs, HTML, JSON, documentos do Microsoft Office e outros tipos de documentos ou formatos pelo Kendra.
Vamos ver agora o passo-a-passo desta fase:
Primeiro, vá para o console do Kendra e clique em Create Index. Forneça um nome e descrição para o índice.
Figura 3 – Página principal do Amazon Kendra
Em IAM Role, use a opção Create a new role do IAM para que o Amazon Kendra tenha as permissões para acessar o bucket do S3. O Kendra precisará dessas permissões para sincronizar os arquivos. Clique em Next.
Figura 4 – Criando index no Amazon Kendra
Em Configure user access control, mantenha as opções padrões e clique em Next. Na tela de Add additional capacity, manteremos a opção padrão Developer Edition e Next.
Figura 5 – Configurando user access control
Como na Figura 6, confira todos os dados e clique em Create.
Figura 6 – Criando o índice no Amazon Kendra
Com o index criado agora é a hora de alimentá-lo com os dados. Vá à página do seu índice e clique em Add data sources, conforme Figura 7.
Figura 7 – adicionando data source
Em Data Source, selecione Amazon S3 connector como o tipo de fonte de dados.Figura 8 – selecionando o conector do índice
Adicione um nome para o seu data source e mantenha todas as outras funções padrões, incluindo Default language of source documents, conforme Figura 9.
Figura 9 – dados adicionais do data source
Crie a IAM role para o Data Source. Mantenha a opção de No VPC padrão.
Figura 10 – definindo segurança e acesso
Forneça o bucket do S3 que contém seus arquivos PDF. Você pode opcionalmente fornecer um prefixo de pasta para indexar apenas uma subpasta desse bucket se necessário. Deixe as outras configurações como padrão. Para este blogpost vamos rodar sob demanda com a opção Sync on demand. Após escolher esta opção, clique em Next.
Figura 11 – Configurando a sincronização
Para as telas seguintes mantenha as opções padrão, na tela final confira os dados e clique em Add Data Source.
Devido a opção Sync on demand escolhida anteriormente, o Kendra só sincronizará os arquivos sob demanda depois que o índice for criado. Neste caso, para sincronizar pela primeira vez ou para novos arquivos ou atualizações, precisamos requisitar a sincronização sob demanda, clicando em Sync now.
Figura 12 – sincronizando sob demanda
Atenção: Este processo pode demorar entre alguns minutos até algumas horas. Ele deve estar finalizado para seguir ao próximo passo. O exemplo da Figura 12 consumiu o tempo de aproximadamente 25 minutos para finalizar.
Escolhendo um modelo do Amazon Bedrock
Antes de acionar o SageMaker Canvas, é necessário habilitar os modelos do Amazon Bedrock que você deseja utilizar. Para este blogpost utilizamos o modelo Anthropic Claude v2 mas você pode acessar a lista dos modelos suportados no Amazon Bedrock.
Para habilitar o Claude v2 no Bedrock, siga estas etapas:
- Acesse o console do serviço do Bedrock > ao lado esquerdo do painel acesse Model access > e no botão à direita Managed model access
Figura 13 – escolhendo modelo LLM
- Escolha o modelo que deseja para seu ambiente, neste caso o Claude, e selecione Request model access.
Figura 14 – requisitando o modelo escolhido
Atenção: Este processo pode demorar algumas horas para ser processado. Neste caso, você deve aguardar que este processo termine ou utilizar outro modelo pré-aprovado. Na Figura 15 abaixo um exemplo de modelo já acessado e outro em processo de aprovação “in Progress”
Figura 15 – submetendo pedido de modelo
Uma vez com o modelo habilitado, podemos seguir para o próximo passo.
Figura 16 – modelo liberado
Selecionando e configurando o índice do Amazon Kendra no SageMaker Canvas
Com o índice criado no Amazon Kendra e os modelos do Amazon Bedrock devidamente habilitados para o uso, chegou a hora da criação da interface do SageMaker Canvas, que será responsável de integrar todos estes serviços.
O primeiro passo para a criação de uma interface no SageMaker Canvas é criar um domínio SageMaker. Para isso siga os seguintes passos.
- Acesse a página principal do serviço SageMaker
- No menu do lado esquerdo clique em Canvas;
- Clique em Create a SageMaker domain.
Importante: Um domínio SageMaker pode ser usado para mais de uma aplicação SageMaker, além também de mais de um usuário.
Figura 17 – SageMaker domain
Escolha a opção de Set up for single user (Quick setup) em seguida clique em Set up (Este processo pode demorar alguns minutos).
Figura 18 – SageMaker domain set up
Com o domínio criado, clique em Domain settings, e depois no botão a direita Edit
Figura 19 – Opções do SageMaker domain
Mantenha as opções dos passos (Steps) 1, 2 e 3 como padrão e no passo 4 (Canvas) procure a opção Canvas Ready-to-use models configuration, você deve habilitar a função Enable document query using Amazon Kendra e escolher o índice criado nos passos anteriores, conforme figura 20.
Figura 20 – Habilitando o Amazon Kendra para o Amazon SageMaker
Mantenha todas as demais opções como padrão e clique em Submit. Pronto o ambiente está pronto pra ser usado.
Fazendo pesquisas com o SageMaker Canvas utilizando base RAG
Com o ambiente pronto, agora é o momento de carregar a aplicação do SageMaker Canvas para iniciarmos as pesquisas no ambiente. Para isso, volte ao domínio criado, clique no botão Launch a direita da tela e escolha a aplicação Canvas.
Figura 21 – Iniciando o SageMaker Canvas
O SageMaker Canvas será iniciado pela console. A primeira habilitação do serviço pode demorar alguns minutos, conforme a Figura 22.
Figura 22 – SageMaker Canvas sendo inicializado
Com o SageMaker Canvas carregado, feche a página inicial de boas vindas (se requisitado).
Figura 23 – SageMaker Canvas – página inicial
E clique em Gen AI no menu a esquerda da tela. Você também escolher a opção Compare GenAI models & query docs, como mostrado na Figura 24.
Figura 24 – Iniciando a interface do GenAI no SageMaker Canvas
A tela do serviço será apresentada conforme figura 25, não esqueça de habilitar a opção Query documents para que o SageMaker Canvas tenha acesso a base do Kendra. Escolha o index que você deseja usar. Use a caixa de texto no centro inferior da tela para fazer a sua pesquisa:
Figura 25 – iniciando uma pesquina no SageMaker Canvas
Com a resposta o SageMaker Canvas trará quais documentos foram consultados para a resposta apresentada, conforme Figura 26.
Figura 26 – Resposta do SageMaker Canvas
A seguir algumas pesquisas na base. A pesquisa da Figura 27, ao perguntar “quais as principais composições de Chiquinha Gonzaga”, mostra como o modelo está fiel à base e consegue articular a resposta se os dados não estão presentes nos documentos.
Figura 27 – Resposta do SageMaker Canvas quando as informações não constam na base de dados
Os modelos do Amazon Bedrock têm a capacidade de resumir conteúdos como mostrado pelo modelo Claude v2, na Figura 28 ao ser solicitado para trazer um resumo em um parágrafo sobre a compositora Chiquinha Gonzaga.
Figura 28 – exemplo de uma requisição de resumo
Na Figura 29, é solicitada uma pesquisa cruzando informações de mais de um arquivo na base sobre a cidade de nascimento de cada compositor:
Figura 29 – Resposta com referencia a mais de um documento
Realizando uma analise dos dados da base sobre o que o modelo sabe sobre Mozart, conforme Figura 30:
Figura 30 – Trazendo uma analise dos dados encontrados
Próximos passos:
Se você chegou até aqui, o próximo passo sugerido é dar permissão de acesso ao ambiente para os demais usuários do grupo, para que todos possam aproveitar o ambiente configurado e gerar respostas para perguntas de acordo com os dados da base RAG.
A configuração de acesso ao SageMaker Canvas é feita através do SageMaker domain para seus usuários e sua integração com a ferramenta Okta Single Sign-On.
Caso você queira limpar e remover o que foi provisionado para não continuar gerando possíveis custos a sua conta. Você deve seguir o passo a passo de como cancelar cada um desses serviços:
Removendo o Amazon Kendra
- Acesse o console do Amazon Kendra e selecione o índice que foi criado para a demonstração.
- Clique em “Ações” e depois em “Excluir índice”. Isso removerá permanentemente o índice Kendra.
Cancelando o Amazon SageMaker Canvas e Domain
- Acesse o console do SageMaker e vá até a seção Canvas.
- Na tela principal, no canto superior esquerdo e clique em log out.
- Agora vá até a seção SageMaker Domains e selecione o domínio provisionado.
- Clique em “Excluir” primeiramente o user e depois o domínio para remover completamente o domínio SageMaker.
Cancelando o acesso ao Modelo Anthropic Claude
- Acesse o console da Bedrock e vá até a seção de Model Assess.
- Na página de modelos clique em “Manage Model Assess”.
- Na página de gerenciamento de acesso, role ate localizar o modelo Claude v2 que foi assinado e desmarque a checkbox do modelo.
- Clique em Save.
Removendo Arquivos do Amazon S3
- Acesse o console do S3 e localize o bucket que foi utilizado durante a demonstração.
- Selecione todos os objetos e clique em “Excluir”.
- Confirme a exclusão dos arquivos para remoção.
Conclusão
Em resumo, neste post foi apresentado o passo a passo de como utilizar o Amazon SageMaker Canvas e o Amazon Kendra para habilitar um modelo de linguagem avançado do Amazon Bedrock com capacidades de RAG (Retrieval Augmented Generation), sem necessidade de codificação.
Vimos que com o SageMaker Canvas não foi necessário executar treinamentos e/ou fine-tuning. Indexamos documentos no Amazon Kendra e integramos com o modelo Anthropic Claude v2 do Amazon Bedrock no Canvas com alguns cliques. O SageMaker Canvas se encarregou de orquestrar o fluxo entre indexação, recuperação e geração da resposta final. Dessa forma, foi possível realizar consultas na base de dados e o modelo gerou respostas coerentes, incluindo sumarizações, extração de informações baseado nos dados e explicações de quando os dados não estavam presentes.
O SageMaker Canvas se mostrou uma ferramenta poderosa para permitir que qualquer pessoa crie rapidamente aplicativos de IA generativa sem precisar de expertise em Machine Learning. O processo todo pode ser feito via interface gráfica pelo SageMaker Canvas, permitindo a criação rápida de aplicativos de IA generativa. Isso democratiza o acesso a essas poderosas tecnologias de IA.
Esperamos que este post tenha mostrado o quão fácil é habilitar modelos avançados de linguagem natural com RAG usando as novas capacidades serverless da AWS. Com esta funcionalidade do SageMaker Canvas as equipes não técnicas agora podem criar seus próprios aplicativos de IA generativa! Rode hoje mesmo sua demonstração!
Sobre os autores
Marco Ruiz é Arquiteto de Soluções Sênior na Amazon Web Services (AWS) para o setor público desde 2021, apoiando a evolução de parceiros e atuando em iniciativas de Machine Learning LowCode/NoCode. Antes da AWS, atuou como arquiteto de infraestrutura, liderando projetos de migração e automação em grandes empresas de TI. Agora, Marco aplica seu conhecimento em tecnologias AWS para apoiar industrias como Educação e Energia.
Givanildo Alves é Arquiteto de Prototipação Sênior da equipe de Prototyping and Cloud Engineering e ajuda clientes a inovar e acelerar na nuvem, demonstrando a arte do possível na AWS através de protótipos, tendo já trabalhado em vários projetos em inteligência artificial e mais recentemente em IA Generativa. Ele tem uma longa carreira em engenharia de software e anteriormente trabalhou como Engenheiro de Software na Amazon.com.br.