====== Tutorial RiveScript ======
Traduction de la page « [[https://www.rivescript.com/docs/tutorial|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 [[https://wiki.gnome.org/Apps/Gedit|gedit]] sous GNU/Linux, [[https://notepad-plus-plus.org/fr/|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 [[https://www.rivescript.com/docs/tutorial#windows-troubleshooting|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 :
* Utiliser des lignes vides pour séparer des groupes logiques de code. Par exemple, une ligne déclencheur et ses réponses doivent être regroupées, et une ligne vide devrait les séparer d'un déclencheur différent et de ses réponses.
* Indentez le code à l'intérieur ou commencer un bloc.
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 :
* ''none'' : la valeur par défaut, rien est ajouté lorsque les lignes de continuation sont assemblées entre elles.
* ''space'' : les lignes de continuation sont jointes par un espace (''\s'').
* ''newline'' : les lignes de continuation sont jointes par un caractère de saut de ligne (''\n'').
===== 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.