For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-deploy-rasa-chatbot.md.

AI Deploy - Tutoriel - Déployer un chatbot Rasa avec une simple application Flask

Voir en Markdown

Découvrez comment déployer de manière simple un chatbot avec AI Deploy

Info

AI Deploy est couvert par les Conditions particulières OVHcloud Public Cloud.

Objectif

Dans un précédent tutoriel, nous avons créé et entraîné un chatbot Rasa avec AI Notebooks : Comment créer et entraîner un chatbot sur OVHcloud. L’objectif de ce tutoriel est à présent de déployer un chatbot avec les outils AI d’OVHcloud. Nous entraînons également notre chatbot avec AI Training.

Nous avons utilisé le célèbre framework open source Rasa pour créer le chatbot. Pour déployer notre chatbot, nous utiliserons le framework Flask afin de créer une application web.

Les objectifs de ce tutoriel sont les suivants :

  1. Sécuriser l’application Flask.
  2. Déployer le modèle Rasa avec AI Deploy.
  3. Déployer l’application Flask et converser avec le chatbot.

Voici un schéma expliquant le fonctionnement :

Schéma de l'échange entre l'utilisateur l'application Flask exécutée avec AI Deploy sur le port 5000 et le modèle Rasa exécuté avec AI Deploy sur le port 5005 numéroté say hello puis request response for hello puis send response hello you puis write hello you

Prérequis

  • Un projet Public Cloud créé
  • L’interface CLI ovhai installée sur votre système (plus d’informations ici)
  • Docker installé sur votre ordinateur local
  • Un compte Docker Hub
  • Des connaissances sur la création d’images avec un Dockerfile

En pratique

Nous allons créer deux apps AI pour déployer le modèle Rasa. Pour commencer, vous devrez créer deux variables d’environnement pour l’application Flask.

Cloner notre dépôt d’exemple

Assurez-vous d’avoir cloné le dépôt GitHub. Vous pouvez le trouver ici.

Créer les variables d’environnement

Le frontend et le backend (le chatbot) doivent communiquer de manière sûre et sécurisée. Nous allons générer des clés de sécurité à cet effet.

La première variable sera la clé secrète pour la signature du Json web token permettant d’accéder à votre chatbot Rasa. Pour générer cette clé, nous utilisons Python. Si vous avez Python 2.6+ installé sur votre machine, vous pouvez lancer Python dans un terminal puis :

import secrets
print(secrets.token_urlsafe())
# Devrait afficher quelque chose comme ceci :
# dux3BudMxlRSm1GI3IoBEuS7UWVU3nYGJ9l_0Cd3rms

La seconde sera l’algorithme utilisé pour le Json web token. L’algorithme utilisé sera H256.

Vous avez maintenant vos deux variables d’environnement. Il est temps de les enregistrer ! Créez un fichier .env dans le dossier flask_app. Votre .env devrait ressembler à ceci :

JWT_SECRET_KEY=your-jwebtoken-generated-before
JWT_ALGORITHM=HS256

Vos variables d’environnement sont enregistrées. Il reste une dernière chose à faire : ajouter la valeur JWT_SECRET_KEY dans le fichier docker-compose.yml de l’image Rasa. Cette valeur doit être identique à celle du fichier .env. Sinon, votre modèle ne pourra pas fonctionner. Passons maintenant au test en local de notre application, ou déployons directement notre chatbot !

Si vous avez déjà entraîné un modèle Rasa avec OVHcloud, vous devriez déjà disposer d’un conteneur Object Storage contenant vos modèles entraînés. Si ce n’est pas le cas, poursuivez ce tutoriel pour en créer un. Sinon, vous pouvez aller directement ici.

Ajouter un espace de stockage d’objets

Le conteneur que nous allons créer contiendra au moins un modèle. Ce modèle sera servi sur une plateforme avec AI Deploy.

Nous pouvons spécifier lors de la création si nous les voulons en lecture seule, en lecture-écriture, etc. Séparer les données d’entrée et les données de sortie est une bonne pratique, qui permet un développement plus rapide et évite les risques de suppression de données.

L’objectif évident de l’utilisation d’Object Storage plutôt que du stockage local de l’AI Notebook est de dissocier le calcul du stockage, ce qui permet d’arrêter ou de supprimer le notebook tout en conservant les données en toute sécurité.

Si vous souhaitez en savoir plus sur le concept de stockage de données, consultez ce guide : Créer un conteneur d’objets.

Pour le déploiement du chatbot, nous allons créer un bucket Object Storage. Il contiendra un modèle pré-entraîné. Si vous avez déjà entraîné un modèle auparavant avec d’autres tutoriels, ne créez pas de nouveau conteneur.

Pour créer le volume à GRA (centre de données de Gravelines) en lecture seule, rendez-vous dans le dossier ai-training-examples/apps/flask/conversational-rasa-chatbot/back-end/models. Ensuite, il vous suffira de saisir :

ovhai bucket object upload <model-output-container>@GRA 20221220-094914-yellow-foley.tar.gz

Le modèle 20221220-094914-yellow-foley.tar.gz sera ajouté dans votre conteneur <model-output-container>. Voilà, vous pouvez maintenant déployer votre chatbot.

Tester en local (optionnel)

Une bonne pratique consiste à tester votre travail en local avant de passer en production.

Ouvrez un terminal, déplacez-vous dans le dossier du projet (ai-training-examples/apps/flask/conversational-rasa-chatbot) puis utilisez cette commande :

docker compose -f "flask-docker-compose.yml" up -d --build

Cette commande créera 2 containers : un pour le backend du modèle Rasa et un pour le serveur frontend géré par Flask. Une fois les deux containers lancés (cela prendra 5 minutes maximum), vous pouvez accéder directement à http://localhost:5000 sur le port 5000, celui de votre application frontend.

Pour arrêter les containers, lancez cette commande :

docker compose -f flask-docker-compose.yml down

Déployer le modèle Rasa dans le Cloud

Pour plus de simplicité, nous utiliserons la CLI ovhai. Avec une seule ligne de commande, votre modèle sera opérationnel et sécurisé en TLS !

Nous devrons créer un container afin de déployer le chatbot. Vous n’avez pas besoin de créer le Dockerfile puisqu’un exemple est disponible dans notre dépôt GitHub. Ce Dockerfile se trouve ici et ressemble à ceci :

FROM python:3.8

WORKDIR /workspace
ADD . /workspace

RUN pip install --no-cache-dir -r requirements_rasa.txt

RUN chown -R 42420:42420 /workspace
ENV HOME=/workspace

#If you deploy the chatbot you expose at port 5005.
EXPOSE 5005 

CMD rasa run -m trained-models --cors "*" --debug --connector socketio --credentials "crendentials.yml" --endpoints "endpoints.yml" & rasa run actions

Construire l’image Docker depuis le Dockerfile

Depuis le répertoire contenant votre Dockerfile (/apps/flask/conversational-rasa-chatbot/back-end/), exécutez l’une des commandes suivantes pour construire l’image de votre application :

# Build the image using your machine's default architecture
docker build . -f rasa.Dockerfile -t `<yourdockerhubId>/rasa-chatbot-backend:latest`

# Build image targeting the linux/amd64 architecture
docker buildx build --platform linux/amd64 -f rasa.Dockerfile -t `<yourdockerhubId>/rasa-chatbot-backend:latest` .
  • La première commande construit l’image en utilisant l’architecture par défaut de votre système. Cela peut fonctionner si votre machine utilise déjà l’architecture linux/amd64, requise pour exécuter des containers avec nos produits AI. Cependant, sur des systèmes avec une architecture différente (par exemple ARM64 sur Apple Silicon), l’image résultante ne sera pas compatible et ne pourra pas être déployée.

  • La seconde commande cible explicitement l’architecture linux/amd64 afin de garantir la compatibilité avec nos services AI. Elle nécessite buildx, qui n’est pas installé par défaut. Si vous n’avez jamais utilisé buildx, vous pouvez l’installer en exécutant : docker buildx install

Info

L’argument point . indique que votre contexte de build (emplacement du Dockerfile et des autres fichiers nécessaires) est le répertoire courant.

L’argument -t vous permet de choisir l’identifiant à donner à votre image. Généralement, les identifiants d’image sont composés d’un nom et d’un tag de version <name>:<version>. Pour cet exemple, nous avons choisi <yourdockerhubId>/rasa-chatbot-backend:latest.

Envoyer l’image

Exécutez la commande suivante :

docker push `<yourdockerhubId>`/rasa-chatbot-backend:latest

Déployer l’app

Maintenant que votre container est créé, lançons notre application et déployons notre modèle !

ovhai app run --name rasa-back \
--unsecure-http \
--default-http-port 5005 \
--cpu 4 \
--volume `<model-output-container>`@GRA:/workspace/trained-models:RO \
-e JWT_SECRET=`<JWT_SECRET_KEY>` \
`<yourdockerhubId>`/rasa-chatbot-backend:latest

Explication de chaque ligne :

  • Lance une app dans AI Deploy nommée « rasa-back ».
  • Précise que notre URL n’est pas sécurisée par OVHcloud. Le modèle sera en réalité sécurisé par un Json web token. La seule personne qui accédera à votre modèle sera l’application frontend Flask. C’est aussi pour cette raison que vous avez créé des variables d’environnement précédemment. Pour en savoir plus sur les Json web tokens, référez-vous à https://jwt.io/.
  • Le port du modèle rasa est 5005.
  • 4 CPU suffisent pour déployer le modèle.
  • Nous allons ajouter un volume pour récupérer le fichier du modèle.
  • Dans l’argument -e, placez la clé secrète jwt que vous avez générée, présente dans votre fichier .env.
  • Sur la dernière ligne, vous précisez l’image Docker à charger ainsi que la commande bash à exécuter à l’intérieur du container Docker.

Explication de la commande bash lançant le chatbot (vous pouvez la retrouver dans le Dockerfile) :

  • rasa run : lance un modèle spécifique à utiliser avec d’autres applications.
  • -m trained-models : précise le chemin vers les modèles entraînés précédemment.
  • --cors "*" : active tous les cors, notre application frontend doit avoir accès au modèle.
  • --debug : affiche tous les logs pour chaque utilisateur connecté et déconnecté.
  • --connector socketio : précise ce connecteur afin de permettre une connexion pour créer un nouveau site web.
  • --credentials "crendentials.yml" : précise ici le chemin du fichier d’identifiants.
  • --endpoints "endpoints.yml" : précise le chemin du fichier endpoints.yml.
  • rasa run actions : les actions personnalisées que vous avez créées précédemment, pour les lancer et les utiliser.

Maintenant, vous pouvez attendre que votre app démarre, puis accéder à l’URL. Rien de particulier ne se passera, à part un petit message hello from Rasa 3.2.10 !

Pour de meilleures interactions, nous allons maintenant déployer le frontend Flask. Pour simplifier, tout se trouve dans le dépôt GitHub cloné.

Déployer l’app frontend

  • Créer le Dockerfile

Nous allons d’abord devoir créer le Dockerfile. Comme précédemment, ce Dockerfile a déjà été créé et se trouve dans le dossier front-end. Le fichier est ici et ressemble à ceci :

FROM python:3.8

WORKDIR /workspace
ADD . /workspace

RUN pip install --no-cache-dir -r requirements_flask.txt

RUN chown -R 42420:42420 /workspace
ENV HOME=/workspace

EXPOSE 5000

CMD python3 app.py

Lançons maintenant l’app sur AI Deploy ! Pour cela, vous devrez créer une image Docker. Rendez-vous dans le dossier front-end (ai-training-examples/apps/flask/conversational-rasa-chatbot/front-end) et exécutez l’une des commandes suivantes :

# Build the image using your machine's default architecture
docker build . -f flask.Dockerfile -t `<yourdockerhubId>`/flask-app-frontend:latest

# Build image targeting the linux/amd64 architecture
docker buildx build --platform linux/amd64 -f flask.Dockerfile -t `<yourdockerhubId>`/flask-app-frontend:latest .

Puis envoyez votre image :

docker push `<yourdockerhubId>`/flask-app-frontend:latest
  • Déployer l’image Docker

Une fois l’image construite, lançons l’application frontend avec la CLI ovhai.

Mais d’abord, récupérez l’URL de votre app backend du chatbot Rasa. Elle ressemblera à ceci : https://259b36ff-fc61-46a5-9a25-8d9a7b9f8ff6.app.gra.ai.cloud.ovh.net/. Vous pouvez l’obtenir avec la CLI en listant toutes vos apps et en repérant celle que vous souhaitez.

Vous pouvez maintenant exécuter cette commande :

ovhai app run --name flask-app \
--token `<token>` \
--default-http-port 5000 \
-e API_URL=`<RasaURL_Previously_Copied>` \
--cpu 2 \
`<yourdockerhubId>`/flask-app-frontend:latest 

Voilà ! Sur l’URL de cette app, vous pouvez discuter avec votre chatbot. Essayez d’avoir une conversation simple ! Si vous rechargez la page, vous remarquerez que le chatbot repart de zéro. Chaque utilisateur est donc différent sur chaque machine.

Voici un exemple de discussion avec le chatbot :

Deux fenêtres de conversation avec le chatbot où l'assistant salue l'utilisateur puis l'interroge sur son logement et son transport et récapitule enfin les valeurs saisies appartment rer on site

Aller plus loin

Si vous souhaitez voir comment le modèle est créé et entraîné avec AI Notebooks, suivez ce tutoriel.

Comment créer et entraîner un chatbot rasa

Si vous souhaitez entraîner un chatbot Rasa avec l’outil AI Training, référez-vous à ce tutoriel.

Comment entraîner un chatbot avec Docker et AI Training

Si vous souhaitez utiliser davantage de fonctionnalités de Rasa, suivez ce lien. Nous utilisons Rasa Open Source et non Rasa X.

Rasa Open source

Si vous souhaitez en savoir plus sur le framework Flask, rendez-vous sur ce lien.

Flask Framework

Votre avis nous intéresse !

N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :

Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

Cette page vous a-t-elle aidé ?