Implantação de um caso de uso de RAG na AWS com o uso do Terraform e do Amazon Bedrock - Recomendações da AWS

Implantação de um caso de uso de RAG na AWS com o uso do Terraform e do Amazon Bedrock

Martin Maritsch, Nicolas Jacob Baer, Olivier Brique, Julian Ferdinand Grueber, Alice Morano e Nicola D Orazio, Amazon Web Services

Resumo

A AWS disponibiliza várias alternativas para criar casos de uso de IA generativa habilitados para geração aumentada via recuperação (RAG). Este padrão fornece uma solução para uma aplicação baseada em RAG utilizando LangChain e Amazon Aurora compatível com PostgreSQL como um armazenamento de vetores. Você pode implantar esta solução diretamente com o Terraform em sua Conta da AWS e implementar o seguinte caso de uso simples de RAG:

  1. O usuário faz o upload manual de um arquivo para um bucket do Amazon Simple Storage Service (Amazon S3), como um arquivo do Microsoft Excel ou um documento em PDF. (Para obter mais informações sobre os tipos de arquivo compatíveis, consulte a documentação do Unstructured.)

  2. O conteúdo do arquivo é extraído e incorporado a um banco de dados de conhecimento baseado no Aurora compatível com PostgreSQL e com tecnologia sem servidor, que permite a ingestão de documentos quase em tempo real no armazenamento de vetores. Com essa abordagem, o modelo RAG consegue acessar e recuperar informações relevantes em casos de uso nos quais a baixa latência é importante.

  3. Quando o usuário interage com o modelo de geração de texto, a experiência é aprimorada por meio da ampliação da recuperação de conteúdo relevante dos arquivos enviados anteriormente.

O padrão usa o Incorporador de Texto do Amazon Titan v2 como o modelo de incorporação e o Anthropic Claude 3 Sonnet como o modelo de geração de texto, ambos disponíveis no Amazon Bedrock.

Pré-requisitos e limitações

Pré-requisitos

  • Uma Conta da AWS ativa.

  • A AWS Command Line Interface (AWS CLI) instalada e configurada com sua Conta da AWS. Para obter instruções de instalação, consulte Instalar ou atualizar a versão mais recente daAWS CLI na documentação da AWS CLI. Para analisar as credenciais da AWS e o acesso à sua conta, consulte Configurações do arquivo de configuração e credenciais na documentação da AWS CLI.

  • Acesso aos modelos, que esteja habilitado para os grandes modelos de linguagem (LLMs) necessários, no console do Amazon Bedrock da sua Conta da AWS. Este padrão requer os seguintes LLMs:

    • amazon.titan-embed-text-v2:0

    • anthropic.claude-3-sonnet-20240229-v1:0

Limitações

  • Esta arquitetura de amostra não inclui uma interface para responder perguntas de forma programática com o banco de dados de vetores. Se seu caso de uso exigir uma API, considere adicionar o Amazon API Gateway junto com uma função do AWS Lambda que execute tarefas de recuperação e de resposta a perguntas. 

  • Essa arquitetura de amostra não inclui recursos de monitoramento para a infraestrutura implantada. Se o seu caso de uso exigir monitoramento, considere adicionar os serviços de monitoramento da AWS.

  • Se você fizer o upload de muitos documentos para o bucket do Amazon S3 em um curto período de tempo, a função do Lambda pode atingir limites de taxa. Para resolver isso, é possível desacoplar a função do Lambda ao usar uma fila do Amazon Simple Queue Service (Amazon SQS), em que é possível controlar a taxa de invocações do Lambda.

  • Alguns Serviços da AWS não estão disponíveis em todas as Regiões da AWS. Para conferir a disponibilidade de uma região, consulte Serviços da AWS by Region. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Versões do produto

  • AWS CLI, versão 2 ou versões posteriores

  • Docker, versão 26.0.0 ou versões posteriores

  • Poetry, versão 1.7.1 ou versões posteriores

  • Python versão 3.10 ou versões posteriores

  • Terraform versão 1.8.4 ou versões posteriores

Arquitetura

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

Fluxo de trabalho para criar uma aplicação baseada em RAG usando o Aurora PostgreSQL e os LLMs no Amazon Bedrock.

Este diagrama ilustra o seguinte:

  1. Quando um objeto é criado no bucket do Amazon S3 bedrock-rag-template-<account_id>, uma notificação do Amazon S3 invoca a função do Lambda data-ingestion-processor.

  2. A função do Lambda data-ingestion-processor é baseada em uma imagem do Docker armazenada no repositório bedrock-rag-template do Amazon Elastic Container Registry (Amazon ECR).

    A função usa o LangChain S3FileLoader para ler o arquivo como um Documento do LangChain. Em seguida, o LangChain RecursiveCharacterTextSplitter divide cada documento em blocos, considerando o CHUNK_SIZE e o CHUNK_OVERLAP, que dependem do tamanho máximo de tokens do modelo de incorporação do Incorporador de Texto do Amazon Titan V2. Em seguida, a função do Lambda invoca o modelo de incorporação no Amazon Bedrock para transformar os blocos em representações vetoriais numéricas. Por fim, esses vetores são armazenados no banco de dados do Aurora PostgreSQL. Para acessar o banco de dados, a função do Lambda recupera inicialmente o usuário e a senha armazenados no AWS Secrets Manager.

  3. Na instância de caderno do Amazon SageMaker AI aws-sample-bedrock-rag-template, o usuário tem a possibilidade de criar um prompt de pergunta. O código invoca o Claude 3 no Amazon Bedrock e adiciona as informações da base de conhecimento ao contexto do prompt. Como resultado, o Claude 3 fornece respostas com base nas informações contidas nos documentos.

A abordagem deste padrão em relação à rede e à segurança é a seguinte:

  • A função do Lambda data-ingestion-processor está em uma sub-rede privada na nuvem privada virtual (VPC). A função do Lambda não tem permissão para enviar tráfego para a internet pública devido ao seu grupo de segurança. Como resultado, o tráfego destinado ao Amazon S3 e ao Amazon Bedrock é roteado apenas pelos endpoints da VPC. Dessa forma, o tráfego não passa pela internet pública, diminuindo a latência e oferecendo uma camada adicional de segurança na rede.

  • Todos os recursos e os dados são criptografados sempre que aplicável, utilizando a chave do AWS Key Management Service (AWS KMS) com o alias aws-sample/bedrock-rag-template.

Automação e escala

Esse padrão usa o Terraform para implantar a infraestrutura do repositório de código em uma Conta da AWS.

Ferramentas

Serviços da AWS

  • O Amazon Aurora Edição Compatível com PostgreSQL é um mecanismo de banco de dados relacional totalmente gerenciado e compatível com ACID que ajuda você a configurar, operar e escalar implantações do PostgreSQL. Neste padrão, o Aurora compatível com PostgreSQL faz uso do plug-in “pgvector” como banco de dados de vetores.

  • O Amazon Bedrock é um serviço totalmente gerenciado que disponibiliza modelos de base (FMs) de alta performance, provenientes de startups líderes em IA e da própria Amazon, por meio de uma API unificada.

  • A AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que auxilia na interação com Serviços da AWS por meio de comandos no seu shell de linha de comandos.

  • O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável. Neste padrão, o Amazon ECR hospeda a imagem do Docker da função do Lambda data-ingestion-processor.

  • OAWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos AWS controlando quem está autenticado e autorizado a usá-los.

  • O AWS Key Management Service (AWS KMS) ajuda na criação e no controle de chaves criptográficas, contribuindo para a proteção dos seus dados.

  • AWS Lambda O é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado. Neste padrão, a Lambda ingere dados no armazenamento de vetores.

  • O Amazon SageMaker AI é um serviço gerenciado de machine learning (ML) que ajuda no desenvolvimento e no treinamento de modelos de ML e, em seguida, na implantação desses modelos em um ambiente hospedado pronto para produção.

  • AWS Secrets Manager O ajuda a substituir credenciais codificadas, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo por programação.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

  • A Amazon Virtual Private Cloud (Amazon VPC) ajuda a iniciar recursos da AWS em uma rede virtual definida por você. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS. A VPC inclui sub-redes e tabelas de rotas para controlar o fluxo de tráfego.

Outras ferramentas

  • O Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.

  • O HashiCorp Terraform é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.

  • O Poetry é uma ferramenta para gerenciamento de dependências e empacotamento em Python.

  • Python é uma linguagem de programação de computador de uso geral.

Repositório de código

O código para este padrão está disponível no repositório terraform-rag-template-using-amazon-bedrock do GitHub.

Práticas recomendadas

  • Embora esta amostra de código possa ser implantada em qualquer Região da AWS, recomendamos o uso de Leste dos EUA (Norte da Virgínia) (us-east-1) ou de Oeste dos EUA (N. da Califórnia) (us-west-1). Essa recomendação baseia-se na disponibilidade de modelos de base e de modelos de incorporação no Amazon Bedrock no momento da publicação deste padrão. Para obter uma lista atualizada do suporte aos modelos de base do Amazon Bedrock nas Regiões da AWS, consulte Suporte para modelos por Região da AWS na documentação do Amazon Bedrock. Para obter informações sobre como implantar esta amostra de código em outras regiões, consulte Informações adicionais.

  • Este padrão fornece apenas uma demonstração de prova de conceito (PoC, na sigla em inglês) ou teste experimental. Se você pretende implantar o código para produção, certifique-se de seguir as seguintes práticas recomendadas:

    • Habilite o registro em log de acesso ao servidor para o Amazon S3.

    • Configure o monitoramento e a geração de alertas para a função do Lambda.

    • Se seu caso de uso exigir uma API, considere adicionar o Amazon API Gateway junto com uma função do Lambda que execute tarefas de recuperação e de resposta a perguntas.

  • Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte Concessão de privilégio mínimo e Práticas recomendadas de segurança na documentação do IAM.

Épicos

TarefaDescriçãoHabilidades necessárias

Clonar o repositório.

Para clonar o repositório GitHub fornecido com este padrão, use o seguinte comando:

git clone https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock
AWS DevOps

Configure as variáveis.

Para configurar os parâmetros deste padrão, execute as seguintes etapas:

  1. No seu computador, no repositório do GitHub, use o seguinte comando para abrir a pasta terraform:

    cd terraform
  2. Abra o arquivo commons.tfvars e personalize os parâmetros conforme suas necessidades.

AWS DevOps

Implante a solução.

Para implantar a solução, faça o seguinte:

  1. Na pasta terraform, use o seguinte comando para executar o Terraform fornecendo as variáveis que você configurou:

    terraform init terraform apply -var-file=commons.tfvars
  2. Confirme se os recursos apresentados no diagrama da arquitetura foram implantados com êxito.

A implantação da infraestrutura provisiona uma instância do SageMaker AI na VPC, garantindo as permissões necessárias para acessar o banco de dados do Aurora PostgreSQL.

AWS DevOps
TarefaDescriçãoHabilidades necessárias

Execute a demonstração.

Após a implantação da infraestrutura anterior ter sido concluída com êxito, siga as seguintes etapas para executar a demonstração em um caderno Jupyter:

  1. Faça login no Console de gerenciamento da AWS da Conta da AWS em que a infraestrutura foi implantada.

  2. Abra a instância de caderno do SageMaker AI aws-sample-bedrock-rag-template.

  3. Transfira o caderno Jupyter rag_demo.ipynb para a instância de caderno do SageMaker AI usando arrastar e soltar.

  4. Abra o arquivo rag_demo.ipynb na instância de caderno do SageMaker AI e selecione o kernel conda_python3.

  5. Para executar a demonstração, execute as células do caderno.

O caderno Jupyter orienta você pelo seguinte processo:

  • Instalação dos requisitos

  • Definição da incorporação

  • Conexão de banco de dados

  • Ingestão de dados

  • Geração de texto com recuperação aumentada

  • Consultas a documentos relevantes

AWS geral
TarefaDescriçãoHabilidades necessárias

Limpe a infraestrutura.

Para remover todos os recursos que você criou quando não forem mais necessários, use o seguinte comando:

terraform destroy -var-file=commons.tfvars
AWS DevOps

Recursos relacionados

AWS Recursos do

Outros recursos

Mais informações

Implementação de um banco de dados de vetores

Este padrão usa o Aurora compatível com PostgreSQL para implementar um banco de dados de vetores para RAG. Como alternativas ao Aurora PostgreSQL, a AWS oferece outras funcionalidades e serviços para RAG, como as Bases de Conhecimento para Amazon Bedrock e o Amazon OpenSearch Service. Você pode escolher a solução que melhor se adapta aos seus requisitos específicos:

  • O Amazon OpenSearch Service fornece mecanismos distribuídos de busca e de analytics, permitindo armazenar e consultar grandes volumes de dados.

  • As Bases de Conhecimento para Amazon Bedrock foram projetadas para criar e implantar bases de conhecimento como uma camada adicional para simplificar o processo de ingestão e a recuperação da RAG. As Bases de Conhecimento para Amazon Bedrock podem trabalhar tanto com Aurora PostgreSQL quanto com Amazon OpenSearch Service.

Implantação em outras Regiões da AWS

Conforme descrito na seção Arquitetura, recomendamos que você use a região Leste dos EUA (Norte da Virgínia) (us-east-1) ou Oeste dos EUA (N. da Califórnia) (us-west-1) para implantar esta amostra de código. No entanto, existem duas formas possíveis de implantar esta amostra de código em regiões diferentes de us-east-1 e us-west-1. É possível configurar a região de implantação no arquivo commons.tfvars. Para acesso a modelos base em diferentes regiões, considere as seguintes opções:

  • Atravessando a internet pública: se o tráfego puder ser transferido pela internet pública, adicione gateways da internet à VPC. Em seguida, ajuste o grupo de segurança atribuído à função do Lambda data-ingestion-processor e à instância de caderno do SageMaker AI para permitir tráfego de saída para a internet pública.

  • Sem atravessar a internet pública: para implantar este exemplo em qualquer região diferente de us-east-1 ou de us-west-1, faça o seguinte:

  1. Em qualquer uma das regiões us-east-1 ou us-west-1, crie uma VPC adicional, incluindo um endpoint da VPC para bedrock-runtime.

  2. Crie uma conexão de emparelhamento usando o emparelhamento da VPC ou um gateway de trânsito para a VPC da aplicação.

  3. Ao configurar o cliente boto3 do bedrock-runtime em qualquer função do Lambda externa à us-east-1 ou us-west-1, transfira o nome de DNS privado do endpoint da VPC para bedrock-runtime em us-east-1 ou us-west-1 como endpoint_url para o cliente boto3.