Overblog
Suivre ce blog Administration + Créer mon blog
Le blog du CRRIAM

Un robot doté d'une humeur changeante

18 Mai 2012 , Rédigé par crriam Publié dans #Organisation des fichiers aiml

- Un robot doté d'une humeur changeante ? Pourquoi faire ?

- Pour le rendre plus humain tout simplement !

 

- Oui, mais alors quel est l'interêt de parler avec un robot si c'est pour se retrouver avec les mêmes problème qu'un humain caractèriel ?

- peut etre parceque le coté plus humain ferait que l'on s'y attache plus ? Parceque normalement on s'attache aussi au autre parcequ'on s'interesse à eux, et pas seulement au regard narcissique que peux nous renvoyer un robot toujours en fase avec nous et qui ne s'interesse qu'a nous ? Faudrait creuser le concept psychologique.

- en même temps moi je m'attache pas au gens qui m'envois chier :-)

 

  Quoi qu'il en soit

Coté technique, comment définir une humeur changeante ? :

 

 

Pas difficile, avec un random :

 

<category>
 <pattern> def humeur </pattern>
 <template>
      <think><set name="humeur">
            <random> <li>1</li>
                     <li>2</li>
                     <li>3</li>
                     <li>4</li>
            </random>
           </set>
      </think>

</template>
</category>

 

Explication, la commande def humeur  lance un random de 4 possibilités on mets dans la variable humeur le résultat, c'est a dire 1, 2, 3, ou 4

 

Pour Hallucinogene, la valeur 1 sera une humeur joyeuse, la 2 sera une humeur coquine, la 3 sera une humeur maussade et la 4 sera une humeur de type énèrvé.

cela sera programmé uniquement par les réponses que revois le robot lorsqu'il testera la variable humeur.

 

Exemple quand on entre bonjour :

 

<category>
 <pattern> bonjour </pattern>
 <template> <condition name="humeur">
<li value="1">coucou</li>
<li value="2">salut toi joli garçon</li>
<li value="3">je ne vois pas trop en quoi ce jour est bon</li>
<li value="4">laisse moi j'ai pas envie de parler</li>
<li>salut</li>
</condition>

</template>
</category>

 

Le dernier <li> sert au cas ou l'humeur ne soit pas définie.

 

On peut aussi renvoyer une commande à l'interface de gestion des réactions du robot de façon a modifier l'aspect du visage suivant l'humeur:

 

<category>
 <pattern> def humeur </pattern>
 <template>
      <think><set name="humeur">
            <random> <li>1</li>
                     <li>2</li>
                     <li>3</li>
                     <li>4</li>
            </random>
           </set>
      </think>

<condition name="humeur">
  <li value="1"><srai>botsourit</srai></li>
  <li value="2"><srai>botcoquin</srai></li>
  <li value="3"><srai>bottriste</srai></li>
  <li value="4"><srai>botcolere</srai></li>
  <li><srai>botnormal</srai></li>
</condition>

</template>
</category>

 

On aura plus qu'a justement définir quand on veux que l'humeur soit générée.

Au départ, je la faisais générer au moment ou l'on disait bonjour, comme ça :

 

<category>
 <pattern> bonjour </pattern>
 <template>

 

<srai>def humeur</srai>

 

<condition name="humeur">
<li value="1">coucou</li>
<li value="2">salut toi joli garçon</li>
<li value="3">je ne vois pas trop en quoi ce jour est bon</li>
<li value="4">laisse moi j'ai pas envie de parler</li>
<li>salut</li>
</condition>

</template>
</category>

 

Mis bien sur AVANT le test de la condition de la réponse !

C'est une solution qui fonctionne bien, mais qui implique que l'utilisateur dise bonjour  ! ce qui n'est pas toujours le cas.

J'utilise depuis la commande starting1 qui sera lancer au chargement de la page web.

 

 

Lire la suite

Module deconnection

2 Mai 2012 , Rédigé par crriam Publié dans #Organisation des fichiers aiml

Pour une raison ou pour une autre (insulte, mise en veille, aurevoir etc.) , vous voulez que votre robot ne réponde plus.

comment faire ?

 

Rien de plus simple :

 

Par exemple vous voulez qu'en cas d'insulte il se déconnecte et que l'utilisateur ne puisse plus lui parler :

D'abord, faire un paterne insulte

 

<category>
        <pattern> insulte </pattern>
        <template>

      Je ne parle pas au gens qui m'insulte, mode deconnection activé

      <srai>deconnectioninsulte</srai>

       </template>

</category>

 

 

ce pattern renvois à l'aide de srai sur le module (pattern) deconnectioninsulte

qui sera comme ça :

 

 

<category>
 <pattern>deconnectioninsulte</pattern>
 <template>

<think><set name="topic">deconnectioninsulte</set></think>
</template>
</category>

 

Là, le module se contentera de mettre deconnectioninsulte comme sujet de conversation

Pourquoi faire un moduledeconnection insulte à part alors que l'on aurait pu intégrer directement la ligne

<think><set name="topic">deconnectioninsulte</set></think>

entre les balise template du patern insulte ?

 

réponse : pour pouvoir envoyer d'autre commande lors de l'utilisation de ce module, comme ici, on pourrai rajouter entre les balise template <srai>botdeconnection</srai> pour gèrer l'interface et mettre un écran noir par exemple. Et pour que l'on puisse utiliser ce module avec d'autre patern comme au revoir, salut, bonne nuit, je vais manger etc.

 

en suite, il faudra faire en sorte que n'importe quel entrée utilisateur soit rediriger vers soit une réponse soit une réponse vide.

 

<topic name="deconnectioninsulte">
<category>
 <pattern> _ </pattern> 

<template>
<think><set name="codereinitialisation"><star/></set></think>
<condition name="codereinitialisation">
<li value="code secret">remise en marche
<think><set name="topic">remise en marche</set></think>

Robot pret à répondre à nouveau

</li>
<li>connection interompue</li>
</condition>
</template>
</category>

</topic>

 

explication :

 

la première ligne <topic name="deconnectioninsulte"> dis au robot de ne prendre en compte les lignes suivantes que si le sujet de conversation est "deconnectioninsulte"

de cette façon, le module ne pourra pas se déclancher autrement.

 

la ligne <pattern> _ </pattern>  dit au robot que pour n'importe quel touche, entrée, on effectura le code entre les template.

 

on aurait put se contenter de mettre

<template> connection interompue</template>

 

ou un template vide qui ne ferais afficher aucune réponse

<template> </template>

 

Alors pourquoi le reste ?

 

Pour pouvoir reprendre la main sur le robot ! Car une fois le module lancer,

aucune entrée ne pourrait stoper le module deconnection et l'on ne pourrait plus parler avec le robot.

 

Donc pour éviter ça, on mets l'entré utilisateur dans une variable :

 

<think><set name="codereinitialisation"><star/></set></think>

 

On teste la variable pour voir si elle correspond au code de réactivation du robot que l'on a choisi ici, la phrase code secret, mais on aurait pu choisir un code à chiffre comme 1234 par exemple

 

<condition name="codereinitialisation">
<li value="code secret">remise en marche

 

si l'entrée est

"code secret"   alors

on mets le sujet de conversation "remise en marche" ou ce que l'on veut d'autre du moment que ce n'est plus "deconnectioninsulte"

et on lui fait dire  : "Robot pret à répondre à nouveau" pour que l'on sache que tout fonctionne.

 

Sinon, on

lui fait dire "connection interompue"

 

Voilà, c'est aussi simple que ça.

Bien sur, au cas ou le code secret soit tapper on peut rajouter des actions à effectuer, comme réalumer l'interface, réinitialiser des variables etc. etc.

 

 

 

Lire la suite
<< < 1 2 3 4 > >>