

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
<a name="deploy-rag-use-case-on-aws"></a>

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

## Resumo
<a name="deploy-rag-use-case-on-aws-summary"></a>

AWS fornece várias opções para criar seus casos de uso de IA generativa habilitados para [Retrieval Augmented Generation (RAG)](https://aws.amazon.com/what-is/retrieval-augmented-generation/). 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](https://docs.unstructured.io/open-source/core-functionality/partitioning).)

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

1. 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](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-embedding-models.html) como o modelo de incorporação e o [Anthropic Claude 3 Sonnet](https://aws.amazon.com/bedrock/claude/) como o modelo de geração de texto, ambos disponíveis no Amazon Bedrock.

## Pré-requisitos e limitações
<a name="deploy-rag-use-case-on-aws-prereqs"></a>

**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](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 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](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) 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](https://docs.aws.amazon.com/apigateway/latest/developerguide) 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](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ 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](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), versão 2 ou versões posteriores
+ [Docker](https://docs.docker.com/get-started/), versão 26.0.0 ou versões posteriores
+ [Poetry](https://pypi.org/project/poetry/), versão 1.7.1 ou versões posteriores
+ [Python](https://www.python.org/downloads/) versão 3.10 ou versões posteriores
+ [Terraform](https://developer.hashicorp.com/terraform/install) versão 1.8.4 ou versões posteriores

## Arquitetura
<a name="deploy-rag-use-case-on-aws-architecture"></a>

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.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/8f184945-7f17-4760-8806-6d0eaeef372a/images/3771b7a0-05bd-4eb3-ad5b-199e22f86184.png)


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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html) invoca a função do Lambda `data-ingestion-processor`.

1. 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](https://python.langchain.com/v0.1/docs/integrations/document_loaders/aws_s3_file/) para ler o arquivo como um [LangChain documento](https://api.python.langchain.com/en/v0.0.339/schema/langchain.schema.document.Document.html). Em seguida, [LangChain RecursiveCharacterTextSplitter](https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/)fragmente 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

1. Na [instância do notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html) Amazon SageMaker AI`aws-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 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
<a name="deploy-rag-use-case-on-aws-tools"></a>

**Serviços da AWS**
+ O [Amazon Aurora Edição Compatível com PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) é 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](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) é 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)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é 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)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda na criação e no controle de chaves criptográficas, contribuindo para a proteção dos seus dados.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) é 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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é 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)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 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](https://docs.docker.com/manuals/) é 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](https://www.terraform.io/docs) é 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](https://pypi.org/project/poetry/) é uma ferramenta para gerenciamento de dependências e empacotamento em Python.
+ [Python](https://www.python.org/) é 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](https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock).

## Práticas recomendadas
<a name="deploy-rag-use-case-on-aws-best-practices"></a>
+ 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](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) 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](#deploy-rag-use-case-on-aws-additional).
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html) 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) na documentação do IAM.

## Épicos
<a name="deploy-rag-use-case-on-aws-epics"></a>

### Implemente a solução em um Conta da AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o GitHub repositório fornecido com esse padrão, use o seguinte comando:<pre>git clone https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock</pre> | AWS DevOps | 
| Configure as variáveis. | Para configurar os parâmetros deste padrão, execute as seguintes etapas:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS DevOps | 
| Implante a solução. | Para implantar a solução, faça o seguinte:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)<br />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 | 

### Testar a solução
<a name="test-the-solution"></a>


| Tarefa | Description | Habilidades 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:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)<br />O caderno Jupyter orienta você pelo seguinte processo:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS geral | 

### Limpeza da infraestrutura
<a name="clean-up-infrastucture"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe a infraestrutura. | Para remover todos os recursos que você criou quando não forem mais necessários, use o seguinte comando:<pre>terraform destroy -var-file=commons.tfvars</pre> | AWS DevOps | 

## Recursos relacionados
<a name="deploy-rag-use-case-on-aws-resources"></a>

**AWS recursos**
+ [Criar funções do Lambda com Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Parâmetros de inferência para modelos de fundação](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [Acessar modelos de base do Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [O papel dos bancos de dados vetoriais em aplicativos generativos de IA](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/) (AWS Database Blog)
+ [Trabalho com Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

**Outros recursos**
+ [Documentação do pgvector](https://github.com/pgvector/pgvector)

## Mais informações
<a name="deploy-rag-use-case-on-aws-additional"></a>

**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](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) 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](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) 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](#deploy-rag-use-case-on-aws-architecture), 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`. 

1. Crie uma conexão de emparelhamento usando o [emparelhamento da VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) ou um [gateway de trânsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html) para a VPC da aplicação.

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