rivescript
Rivescript un peu plus
voila un fichier cerveau que j'ai fait pour tester les possibilités, il est loin d'être exaustif, mais permets d'éviter les soucis primaire rencontrés. probléme d'espace, test de renvois @ etc. Vous remarquerez que les commentaire sont précédé comment en php par // et non pas par <--
voici le fichier :
// tuto sur http://www.rivescript.com/docs/Tutorial.html
// pas de majuscule ni d accent ni d apostrophe ni de tiret dans les commandes
//pour faire une conversion avec l aiml
// avec un éditeur de texte
//chg <category><patern> -> +
//chg </patern>< template> -> -
//chg </template></category> -> rien
//chg <srai> <star/> </srai> -> <@>
//chg <srai>< star index=2>< /srai >-> {@<star2>}
+ mode admin
- mots de passe ?
+ mon mots de passe
% mots de passe*
- voila le lien<a href="admin/main.html" target="_top">Click Here</a>
+ salut
- coucou
+ tu vas bien
- oui merci
// les * pour tout les # pour les chiffres uniquement s'appele tous avec <star>
+ [*] femme [*]
- elles sont toutes belles
// [*] permet de detecter le mots femme n'importe ou dans la phrase
// inconveignant : ne capte que le premier [*]
// exemple :
+ [*] femmes [*]
- elles sont toutes belles
+ [*] hommes [*]
- sont tous matcho
/* donnera
You: et les femmes
Bot: elles sont toutes belles
You: et le hommes
Bot: sont tous matcho
You: les femmes et les hommes
Bot: elles sont toutes belles
You: les hommes et les femmes
Bot: elles sont toutes belles
*/
// les srai {@salut} attention pas d'espace apres les { ou les @ et les srai star <@>
+ salut *
- {@salut}, <@>
+ ciao
@salut
// pour la mise du sujet, prefere creer une variable sujet plutot qu utiliser topic
// car topic empeche toute reponse hors du topic
+ bonjour
- salut comment tu vas ? <set sujet=salutation>
+ sujet
- j ai mis <get sujet> en sujet
// les conditions on utilise * devant
+ alors
* <get sujet> == salutation => {random}
^ j ai mis, <get sujet> <get name>! |
^ le sujet est, <get sujet>!{/random}
- ben salutation
// le dernier - donne la reponse par defaut si la condition est fausse
// alors hors sujet salutation renvois ci dessous sinon si dessus
+ alors
- alors quoi ?
// le caractere ^ permet d aller a la ligne virtuellement mais fais comme si c etait une seule ligne
// % remplace le that, attention, mettre * a la fin car il prends en compte le ? mets ne l'accepte pas
+ bien merci
% salut comment tu vas *
- ho cool alors <set sujet=sante>
// mise en memoire attention pas d'espace avec le <star> et bien fermer le set donc 2 chevrons >>
+ je m appele *
- ok <set prenom=<star>> bienvenue <get prenom>
// <get appele la variable si elle n'existe pas il renvois undefined ce qui permets de tester son existance
// pour random attention aux espace ! bien mettre le | (sur le clavier alt Gr 6) a la fin precede d un espace)
+ hello
* <get prenom> != undefined => {random}
^ Hello there, <get prenom>! |
^ Nice to see you again, <get prenom>! |
^ Hey, <get prenom>!{/random}
- Hello there!
- Hi there!
- Hello!
// pour les reactions du robot, utiliser des frames bien sur !
// le delais dans setTimeout est en milliseconde
> object botnormal javascript
setTimeout(function(){parent.gauche.location="http://tungstene.free.fr/images/halsourie.gif"},200);
var dim = "";
return dim;
< object
// var dim et return dim sont uniquement la pour ne pas avoir d erreur de type undefined
+ botnormal
- je mets la photo d hallucinogene en normale a gauche <call> botnormal </call>
// on appel la fonction avec la balise <call> on ne peut pas appler une fonction dans une fonction donc pas de javascript de type fonction()
+ *
- Je ne comprends pas
+ isa
- ma femme
- ma cherie
+ * isa
@isa
+ * isa *
@isa
+ isa *
@isa
+ isa
% ma femme
- oui ta femme
// pour tester l abscence d accent et d appostrophe
+ l elephant
- ca trompe
Aiml versus Rivescript
Bon !
Jusqu'a présent, nous programmions les robots ou tchatter bot en aiml. Or, suite au gros bug de pandorabot, la confiance dans les systemes hebergés chez les autres nous pose un gros probléme de confiance.
Du coup, je chercher une solution pour m'auto héberger.
Dans un autre billet, je vous parlais du programE aiml même si son installation n'est pas des plus compliqué, elle n'en reste pas moins assez contraignante php, serveur apache, base de donnée et.. AIML
Pourquoi je dis AIML ?
Parceque justement, c'est la que la bas blesse ! Depuis le debut de ce blog, j'ai passé des pages et des pages à décrire, expliquer les differentes balises aiml. Or, (oui encore un or car je suis un gars en or ;) l'aiml même s'il est facile a apprendre et a mettre en oeuvre, prends des lignes et des lignes. exemple :
<category>
<pattern> BONJOUR </pattern>
<template>
salut toi
</template>
</category>
Bien sur on peut mettre ça sur une seule ligne, ça reteste quand même beaucoup de code !Alors je sais, j'ai programmer un générateur d'aiml qui permet d'accelérer grandement l'éditions des fichier mais voila, avec le programE, lorsque je fais une recharge du robot pour ne serais-ce même qu'une eptite modification, ça prends presque une minutes ! (80 fichiers a charger ). ET c'est long, on perd du temps, surtotu lorsqu'on tatone pour trouver le bon patern.
Bon, tu veux en venir où ? me direz vous.
Ben justement, comme c'est écrit dans le titre, au Rivescript !
Le rivescript c'est quoi ?
C'est un language plus que simplifié qui sert tout comme l'aiml a programmer des tchat bot.
si je reprend le même exemple que ci dessus, le code correspondant sera simplement
+ bonjour
- salut toi
C'est tout ! Pas de balise pas d'entête de fichier, rien, tout ça dans un fichier texte.
Comment fonctionne le rivscript et que peut on faire avec ?
L'interpreteur :
Comme pour l'aiml, il faut un interpreteur pour comprendre et afficher ce code. Il en existe en plusieurs langage, perl, pyton, etc.. mais un surtout un que je trouve particulièrement réactif et facile à utiliser, le javascript !
Avec lui, vous pourrez programmer des robots le plus simplement du monde, en local ou sur un site web tout simple. Pas besoin de php, de base de donnée ou de serveur. Et ça hyper rapidement !
Alors où trouver ce programe ? et bien ici !
Le program proposé par Kirsle à quelques bug avec les accents et les apostrophes, il ne les reconnait tout simplement pas. Pour régler ça, j'ai fait comme pour le program E, j'ai bosser (dur ! ) sur le truc et j'ai trouver quelques solutions.
voila c'est fait, vous pouvez telecharger le nouveau programe ici
il en résulte un programe rivscript modifier qui ne pose plus de soucis :) j'ai ajouter un generateur de code rivscript qui facilite la tache grandement en attendant que je le mettes en téléchargement, si vous voulez, vous n'avez qu'a aller dans le forum de rivscript, j'y ai posté le code a modifier, vous verrez, c'est pas compliqué )
Ensuite, comme pour program E, j'ai créer quelques petites améliorations (absolument pas obligatoires ) pour la gestions des fichiers et de l'administration online pour votre robot. Oui, je reste nostalique de pandorabot. Là, ça necessite d'avoir un site web supportant php.
Que peut on faire avec ? :
Tout ce que l'on peut faire avec aiml et même plus !
Voici un tableau comparatif des deux language (version original) :
Comparaison des fonctionnalités
Ce tableau répertorie toutes les fonctionnalités présentes dans la version 1.0.1 AIML, par rapport à la fonctionnalité équivalente dans RiveScript 2.0.
Couleur des touches:
- Jaune: implémentations AIML et de RiveScript de la fonction sont plus ou moins les mêmes.
- Cyan: Identique à jaune, à l'exception RiveScript également AIML 1up a d'une certaine manière (en général, RiveScript a des balises de raccourci, comme dans <uppercase>).
- Bleu: la mise en œuvre RiveScript d'une fonction est largement supérieure à la AIML.
- Rouge: AIML possède une caractéristique qui n'a pas RiveScript. Ceux-ci sont généralement inutiles ou, dans le cas de <date>, sont contre ce RiveScript est tout au sujet.
| AIML | RiveScript | Description |
|---|---|---|
<aiml version="X"> | ! version = X | Opening tag and version line. |
<topic name="X"> | > topic X | Topic declarations. |
< topic X inherits Y< topic A inherits B C | Topics inheriting replies from other topics. | |
<category> | AIML's wrapper for a trigger/response (useless for RiveScript). | |
<pattern> | + hello bot | Input pattern.
|
<template> | - Hello human! | A response to an input pattern.
|
<that>XXX</that> | % xxx | Match the user's input and also the bot's last message (to carry on short conversations, e.g. knock-knock jokes).
|
<star index="N"/> | <star>, <starN> | Binding of any wildcards in the pattern/trigger. |
<that index="N,M"> | <replyN> | Insert the bot's previous replies. |
<input index="N"> | <inputN> | Insert the user's previous messages. |
<thatstar index="N"> | <botstar>, <botstarN> | Binding of any wildcards in a <that>/%Previous. |
<topicstar index="N"> | Binding of wildcards in <topic> (useless so RiveScript didn't implement this). | |
<get name="XXX" /> | <get XXX> | Retrieve a user variable. |
<set name="XXX">YYY</set> | <set XXX=YYY> | Set a user variable.
|
<bot name="XXX" /> | <bot XXX> | Retrieve a bot variable. |
<env XXX> | Retrieve an environment/global variable. | |
<date /> | Insert the current date/time. This isn't implemented in RiveScript because the exact formatting of a date/time stamp is subjective and should be left to the writer, and handled through the use of objects instead. | |
<id /> | <id> | Insert the chatting user's ID. |
<size /> | Insert the number of loaded AIML categories. This isn't implemented in RiveScript because it's difficult to count how many things RiveScript can reply to, since triggers are much more complex than AIML's patterns. | |
<version /> | Inserts the AIML program version. This isn't implemented in RiveScript directly because of its implementation-agnostic specification. Any interpreter can define a <env version> if they'd like. | |
<uppercase>XXX</uppercase> | {uppercase}XXX{/uppercase},<uppercase> | Uppercasing a string of text. RiveScript has a shortcut tag for uppercasing <star>; AIML doesn't. |
<lowercase>XXX</lowercase> | {lowercase}XXX{/lowercase},<lowercase> | Lowercase a string of text. RiveScript has a shortcut tag for lowercasing <star>; AIML doesn't. |
<formal>XXX</formal> | {formal}XXX{/formal},<formal> | Formalize a string of text. RiveScript has a shortcut tag for formalizing <star>; AIML doesn't. |
<sentence>XXX</sentence> | {sentence}XXX{/sentence},<sentence> | Sentence-case a string of text. RiveScript has a shortcut tag for sentence-casing <star>; AIML doesn't. |
<condition name="X" value="Y"> | * X eq Y | Conditionals.
|
<condition name="X"> | Paired with <li value="Y">, runs multiple "equals" comparisons against "X". Useless. See above. | |
<conditon> | Paired with <li name="X" value="Y">, runs multiple conditionals involving multiple variables "equaling" multiple values. Still useless. See 2 above. | |
<random> | {random} | Insert sub-bits of random data into a reply. This is AIML's only method of randomness; RiveScript supports randomness at the level of the reply itself. This is just for smaller bits of randomness in the middle of another reply. |
<li> | This is only for AIML's XML-based method of conditionals and random tags; RiveScript has no need for this. | |
<gossip> | Append to a text file. What file? This wasn't implemented in RiveScript for the same reason as <date>. It's too ambiguous. Use objects instead. | |
<srai>XXX</srai>,<sr/> | @ xxx,{@XXX},<@> | Redirect one reply to another one. |
<person>XXX</person> | {person}XXX{/person}, <person> | Swap 1st and 2nd person pronouns. |
<person2>XXX</person2> | Swap 1st and 3rd person pronouns. Is this even useful? I could never imagine where this is useful. It wasn't ported to RiveScript. | |
<gender>XXX</gender> | Swap gender pronouns. Where is THIS ever useful? Not ported to RiveScript. | |
<think> | Hide the output of AIML operations (namely, <set>). Due to the difference in RiveScript's behavior, this tag is unnecessary. | |
<learn> | Load a new AIML file. This is entirely not useful at all. | |
<system> | <call> | Invoke some higher power for assistance (be it system commands or object macros). |
<javascript>,<perl>,etc. | > object XXX javascript,> object XXX perl,etc. | Invoking some higher power for assistance. |
RiveScript-Fonctions spécifiques
Voici toutes les choses que RiveScript peut faire et où l' AIML ne fonctionne tout simplement pas du tout:
- ! Définition de la commande, Alice robots besoin d'une poignée de fichiers de configuration, distinct des fichiers réels aiml, de définir les choses telles que le nom du bot et d'autres variables. Ces fonctionnalités sont intégrées à droite dans RiveScript lui-même.
- Pondérés des réponses aléatoires.
- Macros des objets.
- Les sujets peuvent hériter d'autres sujets.
- Tags que l'AIML n'a pas:
-
<add> (addition) -
<sub> (soustraction) -
<mult> (multiplication) -
<div> (division) -
<env> (variable d'environement) -
{!} (je ne sais pas :)
-
Vous pouvez donc remarquer que contrairement à l'aiml, on peut tester les variables suivant differente valeurs mathématiques, inferieur, superieur, different, egale, existe, mais l'on peut aussi, les additionner, diviser, multiplier etc.ce qui est impossible avec l'aiml !
Autre point fort, vous pouvez faire exécuter des bloc de commande relatif au code de l'interpreteur, perl, pyton javascript etc, sont integrations dans des applications et donc possible.
le <star> fait la difference entre les chiffres et les lettres ! * pour tout # pour les chiffres, tres pratique pour extraire directement les chiffres d'une réponse
Autre point fort du * il peut remplacer la fin ou le debut d'un mot, comme dans anticonsti* qui sera reconnut pour anticonstitutionelement anticonstitutionnellement etc etc.attention donc au espace !
Tutoriel rivscript :
Comment faire ?
teléchargez les fichiers (version javascript)
decompressez les sur votre discque dur ou sur votre site internet si vous voulez mettre votre robot a dispositions des autres.
Pour tchater avec lui,
ouvrez avec votre navigateur le fichier chat.html qui se situe dans le dossier eg
(pour du local, utiliser firefox, chrome bug, j'ai pas essayer internet exploreur, en ligne tous fonctionnent).
Pour parler avec lui et benéficier de la synthése vocale:
ouvrez le fichier index.html qui se situe toujours dans le dossier eg, avec firefox
Pour modifier le ou les cerveaux,:
utilisez un simple editeur de texte comme notpad, notpad2 (a préférer, on le trouve en téléchargement ici ).
les fichiers cerveaux à modifier se trouve dans le dossier : eg/brain et s'appelent :
activitepresente.rs",
age.rs",
cerveaudebase.rs",
depart.rs",
reactionbot.rs",
substitutions.rs",
variables.rs",
Bien sùr, il ne s'agit que de fichiers exemples, ce n'est pas un robot complet !
Si vous voulez en ajouter d'autres, rien de plus simple, vous nomez votre ficher en .rs le metez dans le repertoire brain.
Il vous faut aussi modifier le fichier chat.html pour lui indiquer votre fichier suplémentaire, en le rajoutant a la suite des autres ici :
// Load our files from the brain/ folder. Inscrire ici vos fichiers cerveaux a ouvrir,
// entre les crochets attention a ne pas oublier la virgule finale
rs.loadFile([
"brain/activitepresente.rs",
"brain/age.rs",
"brain/cerveaudebase.rs",
"brain/depart.rs",
"brain/reactionbot.rs",
"brain/substitutions.rs",
"brain/variables.rs",
"brain/votrenouveaufichier.rs"
], on_load_success, on_load_error);
// fin insertion fichiers cerveaux
Attention, pas d'espace pas de majuscule pour votre nom de fichier ! ça créer parfois des bugs
Autre façon de faire:
si vous avez copier les fichiers de ma version sur votre site internet, et que vous disposer sur celui-ci de php, vous pouvez utiliser l'administrateur en ligne qui se situe dans le repertoire
eg/admin/ et s'appele main.html
Je vous conceil de protéger votre répértoir admin avec un .htaccess
De là, vous pourrez modifier les fichiers que vous voulez et les tester facilement directement en ligne.
Vous aurez accés en plus au fichier log de votre robot en ligne (ne fonctione que pour la version heberger en ligne, pas en local sur disque dure ou clé puisqu'il faut php)
Vous pourrez aussi modifier le fichier chat.html pour ajouter suprimer des fichier a charger dans le robot.
Vous pouvez aussi intégrer une commande dans le cerveau qui vous redirigera automatiquement vers la page administration lorsque vous parler au robot
par exemple comme ça :
+ mode administration
- mots de passe ?
+ mot de passe choisi
% mots de passe*
- voila le lien<a href="admin/main.html" target="_top">Click Here</a>
vous n'aurez plus qu'a taper mode administration dans la fenetre de chat
qui une fois que vous aurez cliker sur le lien vous enverra sur la page ci dessous
Quelque précisions qui vous éviterons de vous casser la tête bêtement (comment moi :) avant de vous lancer dans le tuto en anglais .
Vos code rivescript doivent imperativement ne comporter ni majuscule ni accent ni apostrophe ni tiret dans les commandes !
meffiez vous des espaces ! la commande @ par exemple qui remplace le <srai> ne doit pas avoir d'espace
actualiser la page web dans votre navigateur pour que vos changement prenent effet.
google chrome ne fonctione pas en local, utilisez firefox.
Amusez vous bien.