Comment créer un chatbot open-source avec Rasa ?

Mis à jour le dimanche 25 juillet 2021 par johackim

Initialiser un bot

Pour initialiser un projet avec Rasa, exécutez la commande Docker suivante :

docker run -it -u 1000 -v ${PWD}:/app rasa/rasa:2.8.0-full init --no-prompt

Essayer de parler avec un bot

Pour essayer un bot, exécutez la commande suivante :

docker run -it -u 1000 -v ${PWD}:/app rasa/rasa:2.8.0-full shell

Vous pouvez à présent parler avec votre bot, essayez de d'écrire un texte (ex: "Hello !") et il vous répondra.

Si vous voulez redémarrer ou stopper le bot, voici les commandes à executer :

/restart
/stop

Entrainer votre bot

Il existe une commande pour entrainer un bot :

docker run -it -u 1000 -v ${PWD}:/app rasa/rasa:2.8.0-full train

Tester le bot

Dans un projet Rasa, il existe un dossier test, avec des fichier yaml (ex: test_stories.yml).

Ces fichiers, permettent de tester notre bot de manière automatique pour vérifier si il répond correctement selon la configuration qu'on lui a renseigné.

Exéctuez la commande suivante pour tester votre bot :

docker run -it -u 1000 -v ${PWD}:/app rasa/rasa:2.8.0-full test

Si jamais un test échoue, vous pouvez avoir plus de détails via le fichier results/failed_test_stories.yml.

Démarrer votre bot

Pour démarrer votre bot :

docker run -u 1000 -p 5005:5005 -v ${PWD}:/app rasa/rasa:2.8.0-full run

Configurer le bot

Les 3 fichiers les plus importants pour configurer un bot sont les suivants :

  • data/nlu.yml

Ce fichier contient la liste de tous les languages (NLU) que le bot analysera pour selectionner une action correspondante à chaque message qu'il recevra.

  • data/stories.yml

Ce fichier contient tous les différents chemins qu'un utilisateur peut emprunter pour parler au bot.

  • domain.yml

Ce fichier contient toutes les réponses que le bot peut envoyer à un utilisateur.

  • actions/actions.py

Configurer le bot pour qu'il dise "bonjour"

Pour que notre bot dise bonjour il faut configurer 3 fichiers :

# data/nlu.yml
nlu:
- intent: hello
examples: |
- bonjour
- salut
- hello
- hey
- yo
- coucou
- comment tu vas ?
- Salutations ! Je suis Buzz L'éclair et je viens en paix !
# data/stories.yml
stories:
- story: hello
steps:
- intent: hello
- action: utter_hello
# domain.yml
intents:
- hello
responses:
utter_hello:
- text: "Bonjour, que puis-je pour vous ?"

Configurer le bot pour qu'il vérifie la disponibilité d'un site internet

# endpoints.yml
action_endpoint:
url: http://localhost:5055/webhook
# data/nlu.yml
version: "2.0"
nlu:
- intent: check_website
examples: |
- j'aimerai vérifier la disponibilité de mon site
# data/rules.yml
version: "2.0"
rules:
- rule: activate check_website form
steps:
- intent: check_website
- action: check_website_form
- active_loop: check_website_form
- rule: submit check_website_form
condition:
- active_loop: check_website_form
steps:
- action: check_website_form
- active_loop: null
- action: action_hello_world
- action: utter_website_tested
# domain.yml
responses:
utter_ask_website:
- text: "Pouvez-vous me rappeler le nom de domaine de votre application ? (ex: mondomaine.fr)"
forms:
domain_form:
required_slots:
domain:
- type: from_text
actions:
- action_check_domain
# actions/actions.py
import requests
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
def check_website(domain):
try:
url = "https://%s" % domain
r = requests.get(url)
if r.status_code == 200:
return True
return False
except Exception as e:
return False
class ActionCheckDomain(Action):
def name(self) -> Text:
return "action_check_domain"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
if check_website(tracker.get_slot("domain")):
dispatcher.utter_message(text="Domain good")
else:
dispatcher.utter_message(text="Domain bad")
return []