Este repositório contém um exemplo prático sobre como construir um aplicativo de perguntas e respostas capaz de responder perguntas relacionadas aos seus documentos privados usando os serviços GenAI AWS.
Anteriormente, desenvolvi um aplicativo de perguntas e respostas usando Azure OpenAI GPT-4 e Pinecone (você pode encontrá-lo aqui) .
Neste repositório irei construir exatamente o mesmo aplicativo, mas usando apenas serviços AWS (+ Streamlit para a UI).
Para ser mais preciso, o aplicativo possui a seguinte arquitetura:
E utiliza as seguintes tecnologias:
Este repositório contém o seguinte aplicativo:
Streamlit
, que nos permite consultar os dados armazenados no AWS Kendra usando um dos modelos AWS Bedrock LLM disponíveis.Os documentos privados estão sendo armazenados em um bucket s3.
O Kendra Index está configurado para usar um conector s3. O índice verifica o bucket s3 a cada N minutos em busca de novo conteúdo. Se novo conteúdo for encontrado no bucket, ele será automaticamente analisado e armazenado no banco de dados Kendra.
Quando um usuário executa uma consulta por meio do aplicativo Streamlit
, o aplicativo segue estas etapas:
Se ao invés de usar o aplicativo Streamlit
você preferir executar passo a passo as instruções de configuração do padrão RAG, você tem um notebook Jupyter ( /notebooks/rag-with-langchain.ipynb
) que justamente permitirá que você faça isso.
O aplicativo Streamlit
faz uso intenso da biblioteca LangChain
para implementar o padrão RAG. Se preferir não usar bibliotecas de terceiros e configurar o padrão RAG apenas com a biblioteca boto3
, você tem um segundo notebook Jupyter ( /notebooks/rag-with-only-boto3.ipynb
) que permitirá fazer isso .
Na pasta /infra
, você encontrará uma série de arquivos Terraform que criarão todos os serviços AWS necessários para o bom funcionamento do aplicativo.
Esses arquivos Terraform criarão os seguintes recursos:
Existem alguns pré-requisitos que você deve conhecer antes de tentar executar o aplicativo.
Na seção "Acesso ao modelo", você tem uma visão geral de quais LLMs você tem acesso e quais não.
Para usar totalmente este aplicativo, você deve ter acesso a todos os LLMs de terceiros do AWS Bedrock .
boto3
está configurado para recuperar as credenciais da AWS do perfil default
do arquivo de configuração da AWS em sua máquina local. Para uma visão geral das múltiplas abordagens para configurar credenciais boto3
, acesse o seguinte link:
Antes de tentar executar o aplicativo, leia a seção Infraestrutura AWS e Pré-requisitos .
O repositório possui um arquivo .env
que contém as variáveis de ambiente que o aplicativo requer para ser executado com êxito:
KENDRA_INDEX='<kendra-index>'
AWS_BEDROCK_REGION='<bedrock-region>'
AWS_KENDRA_REGION='<region-where-kendra-index-is-deployed>'
Altere os valores adequadamente.
pip install -r requirements.txt
Quando você instala Streamlit
, uma ferramenta de linha de comando (CLI) também é instalada. O objetivo desta ferramenta é executar aplicativos Streamlit
.
Para executar o aplicativo, basta executar o seguinte comando:
streamlit run app.py
Este repositório possui um
Dockerfile
caso você prefira executar o aplicativo em um contêiner.
docker build -t aws-rag-app .
docker run -p 5050:5050
-e KENDRA_INDEX="<kendra-index>"
-e AWS_BEDROCK_REGION="<bedrock-region>"
-e AWS_KENDRA_REGION="<region-where-kendra-index-is-deploy>"
-e AWS_ACCESS_KEY_ID="<aws-access-key>"
-e AWS_SECRET_ACCESS_KEY="<aws-secret-access-key>"
aws-rag-app
app.py
atualizado para torná-lo compatível com as alterações mais recentes do Bedrock.boto3
e botocore3
removidos. Um boto3
compatível com Bedrock está finalmente disponível ao público.