Soyez opérationnel rapidement avec une application de chat IA sur AWS qui fournit une base sur laquelle s'appuyer.
Un exemple de chatbot simple, mais évolutif, prêt pour l'entreprise, qui implémente le modèle de génération augmentée de récupération (RAG) sans dépendre d'aucun framework/bibliothèque Python. Il utilise les bases de connaissances Bedrock pour ingérer des documents dans un compartiment S3 et stocker les vecteurs indexés dans une base de données Postgres hébergée dans Aurora Serverless. Cette base de données sert également de base de données d'application stockant des informations telles que l'historique des conversations des utilisateurs. L'application implémente à la fois une interface graphique Web ainsi qu'une API HTTP JSON et est hébergée en tant que conteneur exécuté sur ECS Fargate avec un ALB. L'application est construite à l'aide de Flask et HTMX.
Suivez le processus en 6 étapes ci-dessous pour déployer cette solution dans votre compte AWS.
Exportez les variables d’environnement requises.
export AWS_REGION= $( aws configure get region || echo " us-east-1 " )
export ACCOUNT= $( aws sts get-caller-identity --query Account --output text )
export BUCKET=tf-state- ${ACCOUNT}
Éventuellement, créez un compartiment s3 pour stocker l'état de Terraform (ceci est recommandé car le mot de passe initial de la base de données sera stocké dans l'état). Si vous disposez déjà d'un bucket s3, vous pouvez mettre à jour la variable BUCKET
avec le nom de votre bucket (par exemple, export BUCKET=my-s3-bucket
).
aws s3 mb s3:// ${BUCKET}
Définissez les paramètres d'entrée du modèle, comme name
de l'application dans terraform.tfvars
.
cd iac
cat << EOF > terraform.tfvars
name = "ai-chatbot"
tags = {
app = "ai-chatbot"
}
EOF
Déployez à l'aide de Terraform.
terraform init -backend-config= " bucket= ${BUCKET} " -backend-config= " key=ai-chatbot.tfstate "
terraform apply
Maintenant que l'infrastructure a été déployée, vous pouvez créer le conteneur d'applications et le déployer au-dessus de l'infrastructure.
Si vous avez changé le nom de l'application de ai-chatbot
à autre chose, vous devrez le transmettre à la commande make à l'aide du paramètre app
(ou le modifier en haut de Makefile
).
Avant le déploiement, vous devez envisager de modifier les invites du système et de l'utilisateur pour répondre à vos besoins spécifiques.
Lors du premier déploiement, vous pouvez exécuter la commande suivante pour créer ensemble l'image de base et l'image de l'application.
cd ../
make baseimage && make deploy
Après le déploiement initial, vous pouvez itérer plus rapidement sur les modifications de code en reconstruisant uniquement les couches de code et en les redéployant.
make deploy
# OR
# make deploy app=my-cool-chatbot
cd iac
export DOCS_BUCKET= $( terraform output -raw s3_bucket_name )
aws s3 cp /path/to/docs/ s3:// ${DOCS_BUCKET} / --recursive
cd iac
make sync
Notez que ce script appelle l’API bedrock-agent start-ingestion-job
. Ce travail devra être terminé avec succès avant que le chatbot puisse répondre aux questions sur vos documents.
open $( terraform output -raw endpoint )
En plus de l'interface graphique HTML simple, il existe une API HTTP JSON qui prend en charge les actions suivantes.
export endpoint= $( terraform output -raw endpoint )
Posez une question et obtenez une réponse.
curl -s -X POST -H " Content-Type: application/json " $endpoint /api/ask
-d ' { "question": "Who are you?" } ' | jq
{
"answer" : " ... " ,
"conversationId" : " 46ac5045-49b4-487c-b3a0-64d82462ad76 "
}
Pour poser une question de suivi dans le cadre d'une conversation, incluez l'identifiant de la conversation dans l'URL.
curl -s -X POST -H " Content-Type: application/json " $endpoint /api/ask/46ac5045-49b4-487c-b3a0-64d82462ad76 -d ' { "question": What are you capable of?" } ' | jq
{
"answer" : " ... " ,
"conversationId" : " 46ac5045-49b4-487c-b3a0-64d82462ad76 "
}
Renvoie les 10 dernières conversations
curl -s $endpoint /api/conversations | jq
[
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
},
{
"conversationId" : " aaddc6aa-7c51-4b0a-800d-53e72b05524f " ,
"created" : " 2024-04-10T22:01:16.071982+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:18.500971+00:00 " ,
"q" : " ... "
},
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:27.328482+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
]
Renvoie des informations sur la conversation spécifiée
curl -s $endpoint /api/conversations/d61e143c-a32d-4b4f-aa4e-a0fe94082e77 | jq
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
Renvoie les 10 dernières conversations d'un utilisateur
curl -s $endpoint /api/conversations/users/1 | jq
[
{
"conversationId" : " d61e143c-a32d-4b4f-aa4e-a0fe94082e77 " ,
"created" : " 2024-04-10T22:04:36.813819+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:04:40.657402+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
},
{
"conversationId" : " aaddc6aa-7c51-4b0a-800d-53e72b05524f " ,
"created" : " 2024-04-10T22:01:16.071982+00:00 " ,
"questions" : [
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:18.500971+00:00 " ,
"q" : " ... "
},
{
"a" : " ... " ,
"created" : " 2024-04-10 22:01:27.328482+00:00 " ,
"q" : " ... "
}
],
"userId" : " 1 "
}
]
Choose a make command to run
init run this once to initialize a new python project
install install project dependencies
start run local project
baseimage build base image
deploy build and deploy container
up run the app locally using docker compose
down stop the app
start-docker run local project using docker compose
Afin d'exécuter l'application localement, créez un fichier local nommé .env
avec les variables suivantes. La variable KNOWLEDGE_BASE_ID
provient de la sortie Terraform ( cd iac && terraform output
).
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xyz
KNOWLEDGE_BASE_ID=
Après avoir configuré votre fichier .env
, vous pouvez exécuter l'application localement dans Docker pour itérer sur les modifications de code avant de la déployer sur AWS. Lors de l'exécution de l'application localement, elle communique avec une base de données Postgres locale et utilise l'API distante de la base de connaissances Amazon Bedrock. Assurez-vous que vous disposez d'informations d'identification AWS valides. L'exécution de la commande make up
démarrera une instance de base de données postgres et un conteneur Web.
make up
Pour arrêter l'environnement, exécutez simplement :
make down