Este repositorio contiene un ejemplo práctico sobre cómo crear una aplicación de preguntas y respuestas capaz de responder preguntas relacionadas con sus documentos privados utilizando los servicios GenAI AWS.
Anteriormente, creé una aplicación de preguntas y respuestas usando Azure OpenAI GPT-4 y Pinecone (puede encontrarla aquí) .
En este repositorio crearé exactamente la misma aplicación pero usando solo servicios de AWS (+ Streamlit para la interfaz de usuario).
Para ser más precisos, la aplicación tiene la siguiente arquitectura:
Y utiliza las siguientes tecnologías:
Este repositorio contiene la siguiente aplicación:
Streamlit
, que nos permite consultar los datos almacenados en AWS Kendra utilizando uno de los modelos disponibles de AWS Bedrock LLM.Los documentos privados se almacenan en un depósito s3.
El Kendra Index está configurado para utilizar un conector s3. El índice comprueba el depósito s3 cada N minutos en busca de contenido nuevo. Si se encuentra contenido nuevo en el depósito, se analiza y almacena automáticamente en la base de datos de Kendra.
Cuando un usuario ejecuta una consulta a través de la aplicación Streamlit
, la aplicación sigue estos pasos:
Si en lugar de utilizar la aplicación Streamlit
prefieres ejecutar paso a paso las instrucciones para configurar el patrón RAG, tienes un cuaderno Jupyter ( /notebooks/rag-with-langchain.ipynb
) que precisamente te permitirá hacer esto.
La aplicación Streamlit
hace un uso intensivo de la biblioteca LangChain
para implementar el patrón RAG. Si prefiere no utilizar bibliotecas de terceros y configurar el patrón RAG únicamente con la biblioteca boto3
, tiene un segundo cuaderno Jupyter ( /notebooks/rag-with-only-boto3.ipynb
) que le permitirá hacer esto. .
En la carpeta /infra
, encontrará una serie de archivos Terraform que crearán todos los servicios de AWS necesarios para el correcto funcionamiento de la aplicación.
Estos archivos Terraform crearán los siguientes recursos:
Hay algunos requisitos previos que debe conocer antes de intentar ejecutar la aplicación.
En la sección "Acceso al modelo", tiene una descripción general de a qué LLM tiene acceso y a cuáles no.
Para utilizar esta aplicación por completo, debe tener acceso a todos los LLM de terceros de AWS Bedrock .
boto3
está configurado para recuperar las credenciales de AWS del perfil default
del archivo de configuración de AWS en su máquina local. Para obtener una descripción general de los múltiples enfoques para configurar las credenciales boto3
, vaya al siguiente enlace:
Antes de intentar ejecutar la aplicación, lea la sección Infraestructura de AWS y Requisitos previos .
El repositorio tiene un archivo .env
que contiene las variables de entorno que la aplicación requiere para ejecutarse correctamente:
KENDRA_INDEX='<kendra-index>'
AWS_BEDROCK_REGION='<bedrock-region>'
AWS_KENDRA_REGION='<region-where-kendra-index-is-deployed>'
Cambie los valores en consecuencia.
pip install -r requirements.txt
Cuando instala Streamlit
, también se instala una herramienta de línea de comandos (CLI). El propósito de esta herramienta es ejecutar aplicaciones Streamlit
.
Para ejecutar la aplicación, simplemente ejecute el siguiente comando:
streamlit run app.py
Este repositorio tiene un
Dockerfile
en caso de que prefieras ejecutar la aplicación en un contenedor.
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
actualizado para que sea compatible con los últimos cambios de Bedrock.boto3
y botocore3
. Un boto3
compatible con Bedrock finalmente está disponible públicamente.