Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
Le blog du CRRIAM

Aiml versus Rivescript

16 Mars 2013 , Rédigé par crriam Publié dans #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) :

 

RiveScript vs AIML

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
</pattern>
+ hello bot Input pattern.
  • AIML's:
    • Must be uppercase
    • Only supports wildcards * and _
  • RiveScript's:
    • Must be lowercase
    • Supports wildcards *, _, and #
    • Supports optional words
    • Supports alternative words
    • Supports named arrays of words
<template>
   Hello human!
</template>
- Hello human! A response to an input pattern.
  • AIML's:
    • Can only have random replies with <random>
    • Can only have conditions with <condition> inside the template.
  • RiveScript's:
    • Can use multiple -'s for random replies.
    • Can apply {weight} to random replies.
    • Doesn't need to mix reply data with conditionals.
<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).
  • AIML's has the same limitations as <pattern>
  • RiveScript's has the same capabilities as +Trigger.
<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.
  • AIML's <set> tag also returns the value set after setting it, and needs <think> to suppress it.
  • RiveScript's <set> sets the variable silently with no echo, and needs <get> to also echo it.
<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.
  • AIML's:
    • Only supports an "equals" comparison.
  • RiveScript's:
    • Supports numerous comparison operators:
      • ==, eq
      • !=, ne, <>
      • <, >
      • <=, >=
<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

 

Capture-du-2013-03-16-22-55-05.png

 

qui une fois que vous aurez cliker sur le lien vous enverra sur la page ci dessous

 

Capture-du-2013-03-16-22-52-26.png

 

 

 

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 . 

  ou traduit par google

 

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.

 

 

 

 

 

 

 

 

 

Partager cet article

Repost 0

Commenter cet article