Table des matières

Tutorial RiveScript

Traduction de la page « RiveScript::Tutorial - Learn to write RiveScript code. »

Introduction

Ce tutoriel va vous aider à apprendre comment écrire vos propres personnalités de Chatbot en utilisant le langage RiveScript.

Qu'est-ce que RiveScript ?

RiveScript est un langage de script destiné à faciliter le développement de chatbots interactifs. Un chatbot est une application logicielle qui peut communiquer avec des humains en utilisant des langages naturels comme l'anglais afin de procurer un divertissement, des services ou tout simplement avoir une conversation.

Mise en route

Pour écrire votre propre code RiveScript, vous aurez seulement besoin d'un simple éditeur de texte. Vous pouvez utiliser gedit sous GNU/Linux, Notepad++ sous Windows ou n'importe quel autre éditeur de texte en votre possession.

Un document RiveScript est un fichier texte contenant du code RiveScript. Ces fichiers auront une extension .rive. Un exemple de nom de fichier serait greetings.rive.

Pour exécuter et tester votre code RiveScript, vous aurez besoin d' un interpréteur RiveScript, ou d'un programme qui utilise une bibliothèque RiveScript pour lire et à exécuter du code RiveScript.

Ce tutoriel suppose que vous utilisez la commade rivescript livré avec la bibliothèque Perl RiveScript. Sous les distributions GNU/Linux Debian ou Ubuntu, vous pouvez installer le paquet « librivescript-perl », en tapant la commande suivante dans GNOME Terminal :

sudo apt-get install librivescript-perl

Le répertoire projet

Pour ce tutoriel, vous devez créer un dossier pour enregistrer vos documents RiveScript. Suivent quelques emplacements conseillés, mais vous pouvez les placer où vous le souhaitez.

Pour les utilisateurs de GNU/Linux, Unix et macOS, je vous recommande de faire un dossier dans votre répertoire personnel, comme ceci:

 GNU/Linux : /home/UTILISATEUR/rstut
 macOS : /Users/UTILISATEUR/rstut

Remplacer UTILISATEUR avec votre nom d' utilisateur bien sûr.

Pour les utilisateurs de Windows, créez un répertoire dans le lecteur C:\, comme ceci :

  Windows : C:\rstut

Après avoir commencé la rédaction de documents RiveScript, vous pouvez tester votre code à tout moment en exécutant l'interpréteur RiveScript et pointant vers votre répertoire des réponses.

Pour les utilisateurs de Linux, Unix et macOS, ouvrez une fenêtre de terminal et exécuter la commande suivante :

  rivescript rstut 

Pour Windows, ouvrez une fenêtre d'invite de commande (cliquer sur le bouton Démarrer, tapez cmd et appuyez sur Entrée. Pour Windows XP et précédent, appuyez sur la touche Windows + R sur votre clavier, et le taper cmd et appuyez sur Entrée dans la boîte de dialogue Exécuter). Accédez au dossier « bin » dans la distribution Perl RiveScript en utilisant la commande cd, puis exécutez la commande suivante:

  rivescript C:\rstut

Si vous éprouvez des difficultés à le faire fonctionner sur Windows, voir la page dépannage de Windows pour obtenir de l'aide.

Premiers pas

Bonjour, humain !

Écrivons nos premières lignes de code RiveScript !

Dans votre éditeur de texte, créez un nouveau fichier et écrivez ce qui suit :

! version = 2.0

+ bonjour bot
- Bonjour, humain !

Enregistrer le dans votre répertoire projet en tant que hello.rive, puis exécutez l'interpréteur RiveScript sur ​​ce répertoire (voir « Le répertoire projet » pour référence). Vous devriez voir quelque chose de cette nature dans la fenêtre de votre terminal :

RiveScript Interpreter - Interactive Mode
-----------------------------------------
RiveScript Version: v2.0.2
        Reply Root: rstut

You are now chatting with the RiveScript bot. Type a message and press Return to send it.
When finished, type '/quit' to exit the program. Type '/help' for other options.

You> 

À l'invite, tapez « Bonjour bot » et appuyez sur Entrée. Le bot doit répondre avec « Bonjour, humain ! ».

Essayez de dire quelque chose d'autre au robot, comme « comment allez-vous ? » et voyer ce qu'il dit. Le bot doit répondre « ERR: No Reply Matched ». La raison est que vous avez dit quelque chose qui n'est traité par aucun code RiveScript. Il y a seulement un gestionnaire pour « bonjour bot », et rien d'autre. Plus tard, vous apprendrez à écrire une réponse « attrape-tout » qui sera utilisée quand vous dites quelque chose que le bot n'a pas été programmé pour traiter. Mais d'abord, revenons sur le code que vous avez écrit pour hello.rive.

Le code, expliqué

Le code RiveScript est vraiment simple. Chaque ligne du fichier texte est une entité distincte (RiveScript est un langage de script orienté ligne). Les lignes de code RiveScript commencent toujours avec un symbole de commande (dans cet exemple, les symboles que nous voyons sont ! , + et - ) et ils ont toujours une sorte de données qui les suit. Les données dépendentd e la commande utilisée.

La ligne « ! version = 2.0 » indique à l'interpréteur RiveScript que votre code suit la version 2.0 de la spécification RiveScript. De cette façon, les futures versions du langage peuvent être rétro-compatibles avec le code existant en regardant le numéro de version et répondre en conséquence. C'est une bonne idée de toujours inclure la ligne de version dans votre code (mais ce n'est pas la fin du monde si vous l'ignorez - il vous suffit de laisser l'interprète faire de son mieux deviner quelle version utilise votre code).

Le commande + est la manière dont vous définissez un déclencheur. Un déclencheur est une ligne de texte qui est utilisée pour faire correspondre le message de l'utilisateur. Dans ce cas, « Bonjour tout le monde » est exactement le message correspondant. Vous apprendrez à connaître quelques caractéristiques plus complexes des déclencheurs plus loin dans ce tutoriel.

Remarque importante : un déclencheur est toujours en casse minuscule, et il ne contient pas de signes de ponctuation. Même si vous écrivez un déclencheur qui contient un nom propre, la première lettre du nom propre devra être en minuscule également. Vous avez peut-être remarqué lors du test de votre code que l’interpréteur ne se soucie pas des majuscules utilisées dans vos messages : vous pouvez dire « Bonjour Bot », « BONJOUR BOT », ou « bonjour bot » et cela correspondra quand même au déclencheur.

La commande - est la manière de définir une réponse à un déclencheur. Dans ce cas, lorsque le message de l'utilisateur correspond au déclencheur « bonjour bot », le bot doit répondre à l'utilisateur en disant « Bonjour, humain ! ».

Réponses aléatoires

Faire un bot qui répond toujours exactement de la même manière à ce que l'utilisateur dit va devenir très rapidement ennuyeux. Pour cette raison, RiveScript, facilite l'ajout des réponses aléatoires à un déclencheur !

Obtenir des réponses aléatoires est aussi simple que d'entrer plusieurs commandes réponses pour un même déclencheur. Pour le voir en action, ouvrez votre fichier hello.rive et ajouter les lignes suivantes à la suite de « Bonjour, humain ! » :

+ comment tu vas
- Je vais très bien, comment vas-tu ?
- Je vais bien et toi?
- Bien :) et toi ?
- Génial ! Et toi?
- Je vais bien, merci de l'avoir demandé !

Sauvegardez ça puis testez-le avec l’interpréteur RiveScript. Demandez à votre bot, « Comment tu vas » quelques fois et voyez comment il répond. Il dira une de ces cinq choses au hasard chaque fois que vous l'interrogerez !

Vous pouvez également utiliser des chaînes aléatoires dans une réponse en utilisant la balise {random} (voir les balises). Exemple :

+ dire quelque chose au hasard
- {random}Ce message|Cette phrase{/random} a un mot au hasard.  

Entre les balises {random} et {/random}, séparez les chaînes avec un symbole tube et l'un sera choisi au hasard.

Remarque à propos de style

Pour garder vos documents de RiveScript propre, en ordre et facile à lire (et à maintenir !), vous devez suivre ces guides de style :

Vous apprendrez à connaître cela plus tard dans ce tutoriel.

Ainsi, notre hello.rive devrait ressembler à ceci maintenant :

! version = 2.0                                                                                               
                                                                                                                 
+ bonjour bot                                                                                                    
- Bonjour, humain !                                                                                              
                                                                                                                 
+ comment tu vas                                                                                                 
- Je vais très bien, comment vas-tu ?                                                                            
- Je vais bien et toi?                                                                                           
- Bien :) et toi ?                                                                                               
- Génial ! Et toi?                                                                                               
- Je vais bien, merci de l'avoir demandé !                                                                       
                                                                                                                 
+ dire quelque chose au hasard                                                                                   
- {random}Ce message|Cette phrase{/random} a un mot au hasard. 

Parlons poids

Bien que les réponses aléatoires soient certainement utiles, il y aura des moments où vous préférez que certaines réponses soient choisies plus souvent que d' autres. Par exemple, vous pourriez écrire un bot dont la personnalité est qu'il soit secrètement un extraterrestre prétendant être un humain qui fait semblant d'être un bot et vous voulez que le bot répondre un certain charabia inintelligible de temps à autre.

Vous pouvez utiliser la balise {weight} dans une réponse pour augmenter la fréquence de la sélection de cette réponse par rapport aux autres. Dans notre exemple de charabia extraterrestre, vous pourriez écrire une réponse comme ceci :

+ salutations
- Salut à tous ! {weight = 20}
- Bonjour ! {weight = 25}
- Yos kyoco duckeb !

Ici, nous avons attribué un poids à chacune des réponses en français, et laissé le charabia seul. L'effet obtenu est que « Salut à tous ! » sera choisi 20 fois sur 46, « Bonjour ! » sera choisi 25 fois sur 46, et « Yos de la duckeb ! » sera choisi seulement une fois sur 46.

Vous pouvez tester cela en disant « salutations »à votre bot maintes et maintes fois. Il devrait très rarement choisir la réponse « Yos kyoco duckeb ! » par rapport aux deux autres.

La valeur du poids contrôle la probabilité que la réponse soit choisie. Les réponses qui ne comprennent pas explicitement une balise {weight} ont automatiquement un poids de un. La probabilité de chaque réponse choisie est le poids de la réponse divisée par la somme de tous les poids combinés (dans cet exemple, 20 + 25 + 1 = 46, de sorte que chaque réponse a son poids sur 46 chances d'être choisie).

Les valeurs de poids ne peuvent pas être à zéro et ne peuvent pas être négatives.

Vous ne pouvez pas utiliser des poids dans une balise {random}.

Saut de ligne

À certains moments vous écrirez une très longue ligne de code RiveScript et vous allez vouloir la répartir sur plusieurs lignes. Dans ce cas, vous pouvez utiliser la commande ^ (Continuation). La commande ^ étend automatiquement les données de la ligne précédente. Voici un exemple :

+ recite moi un poeme                                                           
- La petite demoiselle Muffet assise sur un tabouret, \n                        
^ D'une manière nonchalante. \n                                                 
^ Avec son champ de force autour d'elle, \n                                     
^ L'araignée, le malotru, \n                                                    
^ n'est pas dans l'image aujourd'hui.  

Notez que la commande de continuation n'insère pas automatiquement un espace entre la ligne précédente et la ligne de continuation. Prenons l'exemple suivant:

// Il n'y aura pas d'espace entre « programmé » et « en utilisant » !
+ qui etes vous   
- Je suis une intelligence artificielle programmée
^ en utilisant RiveScript.

Si vous avez demandé « qui etes vous » avec cette réplique, le bot répondra : « Je suis une intelligence artificielle programméeen utilisant RiveScript », sans espace entre « programmé » et « en utilisant ».

Pour garantir qu'il y aura un espace entre les continuations, utiliser la séquence d'échappement \s où vous voulez que l'espace apparaisse.

// Celui-ci disposera d'un espace.
+ qui etes vous   
- Je suis une intelligence artificielle programmée\s
^ en utilisant RiveScript.

Dans l'exemple « recite moi un poeme »,  la séquence d'échappement \n insère un saut de ligne à la place d'un espace.

Si vous souhaitez souvent utiliser les continuations et que vous voulez presque toujours avoir des espaces (ou des sauts de ligne) entre chacun d' eux, vous pouvez indiquer au parseur de toujours insérer ces symboles automatiquement quand il voit une commande ^.

Vous pouvez le faire avec une « option local du parseur » qui ne concerne que le fichier en cours et n'affecte les lignes qui viennent après l'option du parseur. Par exemple :

// Indique au parseur de joindre les lignes de continuation avec des sauts de ligne
! local concat = newline

// Maintenant, nous n'avons pas besoin d'écrire explicitement des caractères \n caractères à chaque fois !
+ recite moi un poeme                                                           
- La petite demoiselle Muffet assise sur un tabouret,                        
^ D'une manière nonchalante.                                                
^ Avec son champ de force autour d'elle,    
^ L'araignée, le malotru,                                      
^ n'est pas dans l'image aujourd'hui. 

// Maintenant, change le mode concat pour des espaces
! local concat = space

// Ici, nous n'avons pas utiliser \s comme dans l'exemple précédent.
+ qui etes vous   
- Je suis une intelligence artificielle programmée
^ en utilisant RiveScript.


// Retour au mode de concaténation par défaut (qui n'insère aucun
// caractère lors de l'assemblage des lignes)
! local concat = none

Sachant que le paramètre ! local concat modifie la façon dont le parseur gère les lignes de continuation, ce paramètre est « au niveau du fichier » et affecte uniquement le parseur dans le fichier actuel. Lorsque le parser en a terminé avec un fichier et commence à traiter le prochain, le réglage de concaténation est remis à la valeur par défaut (none) et aucun espace ou saut de ligne ne sera plus automatiquement ajouté dans les commandes continuations.

Les options supportées sont :

Anatomie d'un cerveau RiveScript

Le fichier begin

Vous savez maintenant quelques-unes des notions de base sur la façon dont les déclencheurs et les réponses se rapportent les uns aux autres. Avant de continuer, vous devez savoir comment les cerveaux RiveScript sont généralement organisés.