Implemente um caso de uso do RAG AWS usando o Terraform e o Amazon Bedrock - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implemente um caso de uso do RAG AWS usando o Terraform e o Amazon Bedrock

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

Resumo

AWS fornece várias opções para criar seus casos de uso de IA generativa habilitados para Retrieval Augmented Generation (RAG). Esse padrão fornece uma solução para um aplicativo baseado em RAG baseado LangChain e compatível com o Amazon Aurora PostgreSQL como um armazenamento vetorial. Você pode implantar diretamente essa solução com o Terraform em seu Conta da AWS e implementar o seguinte caso de uso simples do 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

  • Um ativo Conta da AWS.

  • AWS Command Line Interface (AWS CLI) instalado e configurado com o seu Conta da AWS. Para obter instruções de instalação, consulte Instalar ou atualizar para a versão mais recente do AWS CLI na AWS CLI documentação. Para revisar suas AWS credenciais e seu acesso à sua conta, consulte Configuração e configurações do arquivo de credenciais na AWS CLI documentação.

  • Acesso ao modelo que está habilitado para os modelos de linguagem grande necessários (LLMs) no console Amazon Bedrock do seu Conta da AWS. Esse padrão requer o seguinte 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 com uma AWS Lambda função que executa tarefas de recuperação e 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 todos 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 um aplicativo baseado em RAG usando o Aurora PostgreSQL LLMs e 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 S3 FileLoader para ler o arquivo como um LangChain documento. Em seguida, LangChain RecursiveCharacterTextSplitterfragmente cada documento, dados a CHUNK_SIZE e a, dependendo do tamanho máximo do token do modelo de incorporação Amazon Titan Text Embedding V2. CHUNK_OVERLAP 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 Lambda primeiro recupera o nome de usuário e a senha de. AWS Secrets Manager

  3. Na instância do notebook Amazon SageMaker AIaws-sample-bedrock-rag-template, o usuário pode escrever uma solicitação 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 dados são criptografados sempre que aplicável usando a chave AWS Key Management Service (AWS KMS) com o aliasaws-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 básicos de alto desempenho (FMs) das principais startups de IA e da Amazon para seu uso por meio de uma API unificada.

  • AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.

  • 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.

  • AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos 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.

  • O AWS Lambda é 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 aprendizado de máquina (ML) que ajuda você a criar e treinar modelos de ML e depois implantá-los em um ambiente hospedado pronto para produção.

  • O AWS Secrets Manager 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 você a lançar AWS recursos em uma rede virtual que você definiu. 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 desse padrão está disponível no repositório GitHub terraform-rag-template-using-amazon-bedrock.

Práticas recomendadas

  • Embora esse exemplo de código possa ser implantado em qualquer um Região da AWS, recomendamos que você use o Leste dos EUA (Norte da Virgínia) us-east-1 ou Oeste dos EUA (Norte 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 up-to-date lista do suporte ao modelo da Amazon Bedrock Foundation em Regiões da AWS, consulte Model support by 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.

  • Esse padrão fornece somente uma demonstração proof-of-concept (PoC) ou piloto. 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

TarefaDescriptionHabilidades necessárias

Clonar o repositório.

Para clonar o GitHub repositório fornecido com esse 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 GitHub repositório, use o seguinte comando para abrir a terraform pasta:

    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 de SageMaker IA dentro da VPC e com as permissões para acessar o banco de dados Aurora PostgreSQL.

AWS DevOps
TarefaDescriptionHabilidades 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 Conta da AWS local onde a infraestrutura está implantada.

  2. Abra a instância do notebook SageMaker AIaws-sample-bedrock-rag-template.

  3. Mova o notebook rag_demo.ipynb Jupyter para a instância do notebook SageMaker AI usando o recurso de arrastar e soltar.

  4. Abra a instância do notebook rag_demo.ipynb na SageMaker IA e escolha o conda_python3 kernel.

  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
TarefaDescriptionHabilidades 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

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 alternativa ao Aurora PostgreSQL, AWS fornece outros recursos e serviços para o RAG, como o Amazon Bedrock Knowledge Bases e o Amazon Service. OpenSearch Você pode escolher a solução que melhor se adapta aos seus requisitos específicos:

  • O Amazon OpenSearch Service fornece mecanismos distribuídos de pesquisa e análise que você pode usar para 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 Amazon Bedrock podem funcionar tanto com o Aurora OpenSearch PostgreSQL quanto com o Amazon Service.

Implantação em outros 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 Lambda data-ingestion-processor e à instância do notebook SageMaker AI para permitir o 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.