Démo - Agent dialogue

Ceci est un exemple de dialogue

Bonjour, je me nomme Ava.

Je suis un agent de dialogue et cette présentation est destinée à vous apprendre ce que je sais faire.

Je souhaite commencer par dissiper tout malentendu : le dialogue que nous allons avoir ici, même si il est interactif, est entièrement écrit à l'avance.

Autant pour le libre arbitre... Désolée !

Dialogue sous forme de langage balisé (XML)

Ce dialogue est écrit en langage XML, c'est à dire eXtensible Language Markup.

C'est un langage balisé qui vous rappellera beaucoup le HTML.

Avant de démarrer, veuillez ouvrir le fichier index.html avec notepad++ afin de voir de quelle manière est "écrit" ce dialogue dans la balise <xml>

Contrairement à du HTML, ici tout n'est pas affiché en même temps, mais de manière chronologique...

...ce qui semble normal pour un dialogue.

L'ensemble est appelé une scène, et la scène contient différents éléments...

des agents de dialogue, comme moi même !...

des diapos, c'est ce que vous pouvez appercevoir en arrière plan...

et des messages. Il s'agit du texte défilant que vous lisez et sur lequel vous pouvez cliquer à tout moment.

Chacun de ces éléments possède des options, et les messages peuvent même être un peu plus interactifs. D'ailleurs...

Dialogue sous forme de langage balisé (XML)


Téléchargez ici, la démonstration

...avez vous ouvert le fichier index.html de l'archive dont je vous ai parlé ?

  • Oui
  • Non

    Ben, alors ? Ca devrait être fait depuis un moment !

  • Heu... de quoi on parle là ?

    Mais si, souvenez vous : quand vous avez lu méticuleusement l'énoncé du TD qui proposait de télécharger une archive agent-dialogue-demo.zip contenant la présente démonstration.

    Cette archive contient tout le dialogue que nous sommes en train d'avoir. Si vous la dézippez et éditez le fichier index.html, vous aurez de meilleures chances de comprendre comment je fonctionne.

    Bien sûr, il est souvent nécessaire de relancer de nombreuses fois ce dialogue et de comparer ce qui est dit avec le contenu du fichier pour être sûr de bien comprendre.

    Allez, je vous aide un peu : en arrière plan, cliquez sur télécharger ici, et enregistrez la.

    Ensuite, il faut aller chercher cette archive et recopier son contenu (ou la dézipper) dans votre dossier de travail.

    Une fois les fichiers en place, faites clic-droit sur index.html et ouvrir avec notepad++. Le dialogue se trouve dans la balise <xml>

    Alors ?....

Très bien ! On va pouvoir continuer.

Balises de base

Vous pouvez voir dans la balise XML que le premier élément est une <scene> et qu'elle contient tous les autres.

La première balise qu'on y trouve est une <diapo>. Elle sera affichée en fond et est décrite simplement en HTML.

D'ailleurs, les diapos utilisent une feuille de style CSS appelée diapos.css

Ensuite, votre humble interlocutrice avec la balise <agentDialogue>.

N'oubliez pas de remplir l'attribut name avec mon nom pour que j'apparaisse.

Et enfin, les <messages> qui se trouvent à l'intérieur des balises <agentDialogue> et qui contiennent eux-même d'autres balises...

Pour faire simple, les balises <p> sont des phrases prononcées, et les balises <ul> contiennent des choix de dialogue <li>.

Avez-vous suivi jusque là ?

  • Spendide ! Continuons

  • Je suis une incorrigible bavarde, désolée.

    Allez, un peu de courage, c'est bientôt fini !

Variables et Conditions

En toute modestie, je possède une petite intelligence artificielle, puisque je suis capable de m'adapter à un dialogue en mémorisant certaines informations dans des variables.

Un petit exemple : préférez vous la montagne ou la mer ?

Eh oui, la montagne ça vous gagne !

La beauté des fonds marins....

Variables et Conditions

Voyez-vous, il est possible d'affecter une variable à l'aide de <set>

Et de placer un attribut condition="..." sur n'importe quel élément. Il ne sera affiché que si la condition est validée.

Bien, une dernière chose par rapport aux conditions...

Il est également possible de réaliser des test <if>, <then>, <else>, ce qui est très pratique pour des changements plus importants dans le dialogue.

Variables et Conditions

Variables et Conditions

Bon, à ce stade, vous avez dû remarquer que les balises possédaient des attributs

Attributs

Mais si ... vous voyez, ces informations supplémentaires à l'intérieur même d'une balise comme name, transition ou encore type...

Par exemple, l'attribut name dans la balise <agentDialogue name='ava' transition='fade'> précise que je suis l'agent de dialogue à afficher, et qu'a la fin je disparaît progressivement (fade en anglais).

Tandis que l'attribut transition='stay' m'aurait permis de rester...

Il existe pas mal d'attributs, et il ne faut pas les connaître par coeur. Donc pas de panique, ils seront rappelés à la fin de la présentation.

Attributs de dialogue


Les attributs sont importants pour bien faire fonctionner les dialogues...

Par exemple, si vous voulez poser une question avec une seule réponse possible, il faut utiliser l'attribut "type=once" sur le menu de choix <ul type='once'>

Aussi, si vous voulez que les questions possibles ne puissent être posées qu'une seule fois chacune, il faut mettre ce même attribut sur la question <li type='once'>. Un petit exemple :

J'ai une bonne et une mauvaise nouvelle...

  • Quelle est la bonne nouvelle ?

    Ben en fait il n'y a pas vraiment de bonne nouvelle, c'est juste pour l'exemple.

  • Quelle est la mauvaise nouvelle ?

    Alors il n'y a pas vraiment de mauvaise nouvelle, ce n'est qu'un exemple de dialogue après tout...

Et quand les lignes de dialogue sont épuisées, ça continue.

Attributs de dialogue

Si on ne met aucun attribut type, les choix restent disponibles et peuvent être répétés. Il faut juste penser à mettre un choix de sortie <li type='quit'>.

D'ailleurs, j'ai une bonne et une mauvaise nouvelle !

  • Quelle est la bonne nouvelle ?

    La présentation est bientôt finie, ça commençait à faire un peu long...

  • Quelle est la mauvaise nouvelle ?

    La présentation est bientô finie, vous allez pouvoir commencer à bosser !

  • Ca ne m'intéresse pas

    Cette ligne de dialogue ne sera pas lue parce qu'il s'agit d'un choix type='quit'

Ok, ok, j'arrête...

Enfin, sachez qu'il est possible d'encapsuler des <ul> dans des <ul>,pour faire des dialogues très profonds.

Debug

debug analyseur XML (ignorer si position correspond à une condition='... <...') : Erreur d’analyse XML : balise ne correspondant pas. Attendu : </scene>. Emplacement : http://192.168.0.11/agent-dialogue-demo/scene-demo.xml?dummy=0.7208741285050339 Numéro de ligne 382, Colonne 4 : </diapo> ----------^

On pourrait continuer encore longtemps, mais le but de la manoeuvre est aussi de vous laisser décortiquer le code XML, de trouver des attributs ou des balises dont je n'ai pas parlé.

Si le code XML n'est pas bien formé, le dialogue ne démarrera pas et un message d'erreur s'affichera à sa place. Le message donnera la ligne et la colonne à laquelle se trouve l'erreur pour vous aider à débugguer.

Je pense que je n'oublie rien... Sinon n'hésitez pas à relancer le dialogue ou à poser des question au prof.

Bon exercice et bon travail !

Résumé des attributs :

<diapo>
transition
  • stay : la diapo reste affichée jusqu'à la prochaine diapo
  • fade : disparaît progressivement au bout de quelques secondes
<agentDialogue>
name
  • ava : charge le personnage Ava (seule disponible)
transition idem que pour les diapos
peut contenir les balises <p> (paragraphes) ou <ul> (choix de dialogue)
<message>
dt temps de défilement entre deux caractères.
peut contenir les balises <p> (paragraphes) ou <ul> (choix de dialogue)
<message> <p>
peut contenir les balises d'humeur <neutre /> <explique /> etc...
qui animent l'agent de dialogue
<message> <ul>
type
  • once : Une seule réponse admise parmi toutes
DOIT contenir les balises <li> (choix)
<message> <ul> <li>
type
  • once : La réponse disparaît des choix après lecture
  • quit : réponse de sortie ("au revoir")
peut contenir d'autres balises <ul>
<set>
var le nom de la variable à modifier (exemple : "x")
val la valeur à donner (exemple : "0", "true", "x+1", etc...)
peut contenir d'autres balises <ul>
<goto>
target redirige le dialogue vers la cible (par exemple
target='#id1' si id1 et l'id d'un élement de la scene)
<if>
condition un test (ex : "x==1" )
peut contenir <then> et <else>
<while>
condition Un test. Attention, si il reste
vrai la boucle peut être infinie
Attention, if et while ne fonctionnent pas dans une diapo
tout élément
id un identifiant unique (id='1', id='reponse3')
condition Une condition

Pour relancer le dialogue, rechargez la page