Page suivante Page précédente Table des matières

5. Mode d'interrogation des bots

5.1 Bases

Il est question ici de spécifier le mode d'interrogation des bots. Il a été choisi un mode d'interrogation par mots-clés. Chaque bot est associé à un ensemble de couples (mot-clé, réponse). Ex.~: Pour un bot qui s'appelle Raoul et qui est boulanger.

        Name -> My name is Raoul.
        Job  -> I am the baker.
Chaque bot devra ainsi répondre aux mots-clés suivants~: Si les réponses aux deux premiers mots-clés sont statiques, elles sont dynamiques pour les autres et dépendent du bot. Il faut néanmoins nuancer la staticité des deux premiers~: une créature peut mentir ou changer de métier. Ex.~: Raoul est un boulanger qui vit au nord de la ville de Midgaard.
        >Raoul
        Bot: Raoul the baker is a vile enemy of mine.
              You can find it in the vicinity of North Midgaard.
        >Marcel
        Bot: I don't know that.
Les mots-clés doivent aussi permettre d'élargir la conversation~:
        >Job
        Raoul: I am the baker.
        >baker
        Raoul: I cook breads, pies and cakes.
        >cakes
        Raoul: My cakes are the best of Midgaard.
Mais ils peuvent aussi servir de fil rouge dans une quête~:
        >treasure
        Old Pirate: I had a map but I sold it to an adventurer named Raoul.
        (...)
        >treasure
        Raoul: I have only 1 half of the map. Robert has the other part.
        (...)
        >treasure
        Robert: I have the other part of the map.

5.2 Bots actifs

Jusqu'à présent, nous avons considéré les bots comme étant complètement passifs, répondant uniquement aux interrogations des joueurs. Mais il n'y aucune raison, et même au contraire, que les bots ne puissent pas être plus actifs dans la conversation. Ils peuvent proposer des sujets de discussion (parler de la pluie et du beau temps, de l'actualité locale), entamer une discussion avec un passant (joueur ou non), notamment si le bot à quelque chose à vendre. Ex.~: Un garde aborde Janselmeer. Il ne le connaît pas, donc il l'interroge pour savoir qui il est.

        A guard is approaching.
        Guard: What's your name, stranger?
case 1: >Janselmeer
        Guard: I am watching you, Janselmeer.
case 2: >Oumph
        Guard: I am watching you, Oumph.
Janselmeer peut dire son véritable nom (1) ou mentir (2). Les deux réponses seront acceptées par le garde. Janselmeer sera alors connu sous le nom qu'il a donné à ce garde (Janselmeer ou Oumph), et aussi par les autres personnes en ville de manière potentielle.

Maintenant, reprenons à nouveau cet exemple mais cette fois-ci le garde connaît déjà Janselmeer.

        A guard is approaching.
        Guard: What's your name, stranger?
case 1: >Janselmeer
        Guard: I am watching you, Janselmeer.
case 2: >Oumph
        Guard: You lie! I know that you are not Oumph.
        A guard attacks you.
Ici, le garde attendait 'Janselmeer' comme réponse. Toute autre réponse , 'Oumph' par exemple, peut être considérée comme un mensonge par le garde.

Cet exemple permet d'effleurer deux nouveaux aspects. Le premier, c'est l'ajout de nouveaux mots-clés (ici 'Janselmeer' a été rajouté). Le deuxième, plus intéressant, est l'intégration des réponses du joueur à la mémoire du bot. Sur l'exemple, le garde va associer le nom du joueur Janselmeer à son apparence. Bien sûr, rien n'empêche de mentir mais l'exemple montre de façon simplifiée les risques encourus. Il peut arriver que l'on ne désire pas répondre aux questions. Dans ce cas, une créature peut utiliser le mot-clé JOKER pour le signifier. Une absence de réponse (au bout d'un temps limité) pourra aussi être considérée comme un refus de communiquer. Les joueurs préféreront peut être la deuxième solution tandis que les bots utiliseront la première. Si les joueurs doivent utiliser JOKER, il serait mieux de lui donner un alias comme '...' pour l'interface utilisateur, ce qui est plus explicite.

5.3 Communication entre bots

Appliquons ce que l'on a défini précédemment à la communication entre 2 bots. Reprenons l'exemple du garde. Vu par le joueur, cela devrait donner ça~:

        Guard to Bot: What's your name, stranger?
        Bot to Guard: My name is Bot.
        Guard to Bot: I am watching you Bot.
Vu par un bot~:
        Guard to Bot: Name
        Bot to guard: Bot
        Guard to Bot: ""
La principale difficulté pour réaliser ceci est que le garde ne sait pas qu'il parle à un bot. Celui à qui il parle doit pouvoir comprendre qu'il soit bot ou joueur. Pour être certain de se faire comprendre, le garde doit donc s'adresser à son interlocuteur de manière compréhensible par les joueurs et les non-joueurs. De plus, s'il y a d'autres créatures qui écoutent la conversation, elles pourront aussi comprendre qu'il s'agisse de joueurs ou non. La solution que suggère l'exemple est d'intégrer dans un message à la fois une version courte interprétable par les bots (correspondant aux mots-clés), et une version longue du message pour les joueurs. Exemple du garde, vu par le jeu~:
        Guard to Bot: ("Name", "What's your name, stranger?")
        Bot to Guard: ("Bot", "My name is Bot.")
        Guard to Bot: ("", "I am watching you Bot.")
Lorsqu'un bot ou un joueur envoie un message qui ne peut être compris ou qui ne nécessite aucune réponse, la version courte sera vide. Aucun traitement ne sera alors fait pour interpréter le message. Par contre il pourra être répété. Ex.~:
      Guard: Now you die, Raoul !
      Message ("", "Now you die, Raoul !")
Ex.~:
      Épicier: Elles sont belles mes outres ! Achetez-les !
(a priori destiné uniquement aux joueurs, ou alors les bots sont 
sacrement intelligents)
      Message ("", "Elles sont belles mes outres ! Achetez-les")

5.4 Application au niveau de l'interface utilisateur

Le joueur peut envoyer des messages de 2 façons~:

classique

Ex~: tell Oumph "Ou étais-tu passe?" Ceci générera ce message ("", "Ou étais-tu passe?"). Il ne sera compris par aucun non-joueur~; néanmoins n'importe quelle créature est capable de rapporter les paroles qu'elle entend (espion, commère, etc).

avec des alias

Ex~: tell Oumph Job Ceci générera ce message ("Job", "What's your job?") qui pourra être compris par les bots et les joueurs. Une liste d'alias devra être implémentée dans le contrôleur. Le joueur aura bien sûr la possibilité de les modifier à sa guise. Si l'alias n'existe pas, 'tell Oumph cloporte' générera le message ("cloporte","cloporte").

5.5 Les codes de contrôle

Pour que les bots puissent mieux se comprendre, nous rajoutons les codes de retour NONE, ANS, WRONG_ANS et BAD_ANS. Ces codes ne sont pas lisibles par les joueurs et ces derniers ne peuvent pas non plus en utiliser directement (la commande 'answer' permettra d'envoyer un message avec le code de contrôle ANS). Leur usage est donc limité aux bots. NONE est le code de contrôle par défaut. Il ne signifie rien. Il est employé quand aucun autre code de contrôle n'est utilisé. Le code ANS signifie que le message est une réponse à une précédente question. WRONG_ANS sert à indiquer que la réponse est considérée comme fausse et mensongère. L'interlocuteur peut donner ainsi une autre chance de dire la vérité (ou plutôt ce que le bot considère comme la vérité), changer de sujet de conversation ou bien rompre la discussion avec des conséquences fâcheuses (combat, baisse de la réputation...). Ex.~: un garde interroge un joueur.

        A guard is approaching.
        Guard: What's your name, stranger?
        (name, "What's your name, stranger?",NONE)
        >Janselmeer
        ("Janselmeer", "Janselmeer",ANS)
        Guard: You lie! I know you are not Janselmeer.
        ("", "You lie! I know you are not Janselmeer.", WRONG_ANS)
        >Oumph
        ("Oumph", "Oumph", ANS)
  cas 1 :
        Guard: You lie! I know that you are not Oumph. 
        ("", "You lie! I know that you are not Oumph.", WRONG_ANS)
        A guard attacks you.
  cas 2 :
        Guard: I'm watching you Oumph.
        ("", "I'm watching you Oumph.", NONE)
Il convient bien sûr de limiter le nombre d'essais possibles... BAD_ANS indique que la réponse est incorrecte, non conforme au type de réponse souhaité. Ex.~:
        A guard is approaching.
        Guard: What's your name, stranger?
        (name, "What's your name, stranger?", NONE)
        >43
        ("43", "43", ANS)
        Guard: "I said 'What's your name?'."
        ("", "I said 'What's your name?'." BAD_ANS)
Un code BAD_ANS généré par un bot est une erreur grave dans le code du jeu ou du bot. Un enregistrement de l'erreur doit être effectué pour débogage et correction. Un code BAD_ANS généré par un joueur signifie une faute de frappe, une mauvaise compréhension de la question, un mensonge volontaire, une tentative pour perturber le bot, etc. Le codeur est libre de faire réagir son bot comme bon lui semble (poli et compréhensif, énervé et agressif, etc). Le bot peut donc ou non reposer sa question. Note~: le bot ne peut et ne doit pas savoir s'il parle à un autre bot ou à un joueur. Pour cette raison, le nombre de réponses BAD_ANS doit être limité, afin qu'aucun bot bogué ne provoque de boucles infinies...

5.6 Les modificateurs d'expression.

Un modificateur d'expression est une information contextuelle qui accompagne le message. Cette information est signifiante pour le bot qui reçoit le message et lui permet de réagir de manière plus appropriée.

Par exemple, il y a plusieurs façons de demander son nom à quelqu'un.

Dans chaque cas, seul le modificateur d'expression a changé. Voici ci-dessous les mêmes messages entendus par un bot : POLITE, NEUTRAL et INSULTING sont des modificateurs d'expression. Voici une liste de modificateurs d'expressions : Cette liste n'est figée.

L'exemple suivant explique comment les modificateurs d'expressions peuvent être utilisés. Janselmeer rencontre Robert le boucher (le frère de Raoul) et lui demande des informations sur Raoul le boulanger.

        Janselmeer: (RAOUL, "Do you know RAOUL?", NONE, NEUTRAL)
        Robert:  ("", "I am not concerned with that RAOUL.", ANS, RUDE)
        Janselmeer: (RAOUL, "O MIGHTY ONE, may I beg you a little of your
                     knowledge about Raoul?", NONE, OBSEQUIOUS)
        Robert: ("", "RAOUL? This thing exists only in your sick mind.",
                 ANS, INSULTING)
        Janselmeer: (RAOUL, "Tell me something about Raoul or I'll kill you!",
                     NONE, THREATENING)
        Robert: ("", "I swear I don't know Raoul.", ANS, NEUTRAL)
        Janselmeer punches at Robert.
        Janselmeer: (RAOUL, "Tell me something about Raoul or I'll kill you!",
                     NONE, THREATENING)
        Robert: ("", "Raoul is the baker. He lives North of here. Please don 't
                 kill me!", ANS, POLITE)

Il n'y a aucune obligation d'utiliser un modificateur d'expression plutôt qu'un autre. C'est purement une question de comportement. Certaines personnes sont plutôt insolentes tandis que d'autres se montrent polies tout simplement parce qu'elles sont comme cela. Mais évidemment, les créatures n'auront pas les mêmes réactions avec les premiers qu'avec les seconds. Cela dépend d'elles. Par exemple, un seigneur est normalement habitué à ce qu'on s'adresse à lui de manière obséquieuse et pourrait s'offusquer de quelqu'un qui ne le ferait pas. Le choix du modificateur d'expression dépend donc à la fois de la personnalité du du personnage qui parle et de la réaction attendue de celui qui écoute.

5.7 Extensions futures du langage des bots

Le système des mots-clés a été choisi pour des raison de simplicité de mise en oeuvre. Néanmoins, cela devrait évoluer et tendre vers un vrai dialogue avec des phrases (sujet verbe complément). La première extension aux mots-clés pourrait être l'utilisation des pronoms et adverbes interrogatifs~: what, who, where, why, how, how many, which, when. Ex.~:

        >Who Raoul
        Bot: Raoul is the baker.
        >Where Raoul
        Bot: You can find it in the vicinity of North Midgaard.
        >What Raoul
        Bot: I've never heard of this.

Page suivante Page précédente Table des matières