Ce référentiel contient un exemple pratique sur la façon de créer une application de questions-réponses capable de répondre aux questions liées à vos documents privés à l'aide des services GenAI AWS.
Auparavant, j'ai créé une application de questions-réponses en utilisant Azure OpenAI GPT-4 et Pinecone (vous pouvez la trouver ici) .
Dans ce référentiel, je vais construire exactement la même application mais en utilisant uniquement les services AWS (+ Streamlit pour l'interface utilisateur).
Pour être plus précis, l'application a l'architecture suivante :
Et il utilise les technologies suivantes :
Ce référentiel contient l'application suivante :
Streamlit
, qui nous permet d'interroger les données stockées dans AWS Kendra à l'aide de l'un des modèles AWS Bedrock LLM disponibles.Les documents privés sont stockés dans un compartiment s3.
Le Kendra Index est configuré pour utiliser un connecteur s3. L'index vérifie le compartiment s3 toutes les N minutes pour détecter le nouveau contenu. Si un nouveau contenu est trouvé dans le compartiment, il est automatiquement analysé et stocké dans la base de données Kendra.
Lorsqu'un utilisateur exécute une requête via l'application Streamlit
, l'application suit ces étapes :
Si au lieu d'utiliser l'application Streamlit
, vous préférez exécuter étape par étape les instructions de configuration du pattern RAG, vous disposez d'un notebook Jupyter ( /notebooks/rag-with-langchain.ipynb
) qui vous permettra justement de le faire.
L'application Streamlit
utilise largement la bibliothèque LangChain
pour implémenter le modèle RAG. Si vous préférez ne pas utiliser de bibliothèques tierces et configurer le modèle RAG uniquement avec la bibliothèque boto3
, vous disposez d'un deuxième notebook Jupyter ( /notebooks/rag-with-only-boto3.ipynb
) qui vous permettra de le faire. .
Dans le dossier /infra
, vous trouverez une série de fichiers Terraform qui créeront tous les services AWS nécessaires au bon fonctionnement de l'application.
Ces fichiers Terraform créeront les ressources suivantes :
Il existe quelques conditions préalables dont vous devez être conscient avant de tenter d'exécuter l'application.
Dans la section « Model Access », vous avez un aperçu des LLM auxquels vous avez accès et de ceux auxquels vous n'avez pas accès.
Pour utiliser pleinement cette application, vous devez avoir accès à tous les LLM tiers d'AWS Bedrock .
boto3
est configuré pour récupérer les informations d'identification AWS du profil default
du fichier de configuration AWS sur votre ordinateur local. Pour un aperçu des multiples approches de configuration des informations d'identification boto3
, accédez au lien suivant :
Avant d'essayer d'exécuter l'application, lisez la section Infrastructure AWS et conditions préalables .
Le référentiel contient un fichier .env
qui contient les variables d'environnement dont l'application a besoin pour s'exécuter correctement :
KENDRA_INDEX='<kendra-index>'
AWS_BEDROCK_REGION='<bedrock-region>'
AWS_KENDRA_REGION='<region-where-kendra-index-is-deployed>'
Modifiez les valeurs en conséquence.
pip install -r requirements.txt
Lorsque vous installez Streamlit
, un outil de ligne de commande (CLI) est également installé. Le but de cet outil est d'exécuter des applications Streamlit
.
Pour exécuter l'application, exécutez simplement la commande suivante :
streamlit run app.py
Ce référentiel dispose d'un
Dockerfile
au cas où vous préféreriez exécuter l'application sur un conteneur.
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
mis à jour pour le rendre compatible avec les dernières modifications de Bedrock.boto3
et botocore3
. Un boto3
compatible avec Bedrock est enfin disponible publiquement.