• Aucun résultat trouvé

4.2 Le système CoCoA

4.2.2 Gestionnaire de prédicats et gestionnaire d’état

Cette section détaille le fonctionnement du gestionnaire de prédicats et du gestionnaire d’état de CoCoA.

Gestionnaire de prédicats Le gestionnaire de prédicats est le module de CoCoA responsable du calcul des prédicats à partir de l’état courant du tableau de conversation et des ressources du domaine qu’il a à sa disposition. Ces prédicats sont calculés à partir des formules données par le concepteur du système final implémenté à partir de CoCoA. Comme montré dans l’algorithme 1, le gestionnaire de prédicats ré-évalue les prédicats à

chaque pas de temps de l’interaction et écrit l’ensemble des prédicats vrais dans la partie privée de l’état d’information.

Gestionnaire d’état Le gestionnaire d’état a pour but de réaliser la contextualisation des actes de dialogue de l’utilisateur dans le contexte actuel de la tâche et éventuellement d’ouvrir des comportements possibles et de mettre à jour l’état courant en conséquence. L’algorithme 2 décrit le processus de contextualisation d’un acte de dialogue de l’utilisa-teur.

Un acte de dialogue de l’utilisateur peut être attendu dans le contexte dialogique actuel. Dans cette situation (l. 5), l’agent récupère le motif dialogique associé attendant cet acte de dialogue (l. 6). Trois cas sont ensuite possibles :

— soit l’acte de dialogue de l’utilisateur correspond à une réponse à un comportement proposé par l’agent (il a joué l’acte prop.in du jeu de communication de contex-tualisation associé, cf. définition 3.6). En d’autres termes, l’agent a pris l’initiative d’un comportement possible et l’utilisateur a répondu à cette initiative. Dans ce cas, le comportement associé au motif dialogique passe dans l’état ouvert (cf. dia-gramme 2.3) et on change d’état dans le cas où l’état associé au motif dialogique est différent de l’état courant (l. 10).

— soit l’acte de dialogue de l’utilisateur ferme un motif dialogique ouvert (il correspond à un prop.out ou acc.out du jeu de communication de contextualisation associé). Dans ce cas, le comportement associé au motif dialogique est fermé (l. 12).

— soit l’acte de dialogue correspond à un acte interne à un motif dialogique ouvert, sans fermer celui-ci. Dans ce cas, aucune modification n’est apportée à l’état d’information privé.

Une fois ce traitement réalisé, l’acte de dialogue est envoyé à Dogma pour être intégré au tableau de conversation (l. 13).

Si l’acte de dialogue n’est pas attendu dans le contexte dialogique actuel (l. 14 et suivantes), l’agent cherche dans l’état courant s’il est possible de trouver un comportement attendu ouvert par l’acte de dialogue de l’utilisateur (l. 14). S’il en trouve un, il l’ouvre et envoie l’acte de dialogue à Dogma.

Si l’état courant ne permet pas de contextualiser l’acte de dialogue de l’utilisateur, l’agent se tourne vers les états candidats (l. 18). S’il existe au moins un état candidat permettant de contextualiser l’acte de dialogue de l’utilisateur, l’agent sélectionne celui dont la maturité est maximale et le désigne comme nouvel état courant (l. 19). Il récupère ensuite le motif dialogique de cet état attendant le coup dialogique de l’utilisateur (l. 20) et l’ouvre (l. 21), puis envoie l’acte de dialogue à Dogma.

Si les états candidats ne permettent pas non plus de contextualiser le coup dialogique de l’utilisateur, l’agent applique la même stratégie mais en utilisant les états matures (l. 23 à 27).

Dans le cas où toutes les tentatives précédentes ont été infructueuses, le coup de l’utilisateur est ignoré (l. 29).

Il est important de noter qu’un changement d’état se fait toujours suite à une action de l’utilisateur. Celle-ci peut être en réaction d’une sollicitation de l’agent (cas où l’utilisateur

Algorithme 2 : Contextualisation d’un acte de dialogue de l’utilisateur Entrées :ad_u : acte de dialogue de l’utilisateur.

Sorties : ∅

1 ÉtatCourant ← GestionnaireDÉtat.ÉtatCourant ;

2 ComportementsOuverts ← GestionnaireDÉtat.ComportementsOuverts ; 3 ÉtatsCandidats ← GestionnaireDÉtat.ÉtatsCandidats ;

4 ÉtatsMatures ← GestionnaireDÉtat.ÉtatsMatures ;

// Si l’acte de dialogue est attendu dans un comportement possible ouvert ou proposé par l’agent

5 siComportementsOuverts.Attend(ad_u) alors

6 CP ← ComportementsOuverts.ObtenirComportementPossibleDestination(ad_u); // Si l’utilisateur répond à un comportement proposé par l’agent 7 siCP.EstOuvertPar(ad_u) alors

8 GestionnaireDÉtat.Ouvrir(CP);

9 siCP.Comportement.État 6= ÉtatCourant alors 10 GestionnaireDÉtat.NouvelÉtatCourant(CP.État); 11 siCP.EstFerméPar(ad_u) alors

12 GestionnaireDÉtat.Fermer(CP); 13 Dogma.NouvelActeDeDialogue(ad_u);

// Si l’acte de dialogue ouvre un comportement attendu de l’état courant 14 sinon siÉtatCourant.Attend(ad_u) alors

15 CP ← ÉtatCourant.ComportementAttenduOuvertPar(ad_u); 16 GestionnaireDÉtat.Ouvrir(CP);

17 Dogma.NouvelActeDeDialogue(ad_u);

// Si l’acte de dialogue ouvre un comportement attendu dans un état candidat 18 sinon siÉtatsCandidats.Attend(ad_u) alors

19 ÉtatCourant ← ÉtatsCandidats.ÉtatsAttendant(ad_u).PlusGrandParMaturité(); 20 CP ← ÉtatCourant.ComportementAttenduOuvertPar(ad_u);

21 GestionnaireDÉtat.Ouvrir(CP);

22 Dogma.NouvelActeDeDialogue(ad_u);

// Si l’acte de dialogue ouvre une comportement attendu dans un état mature dont les prérequis ne sont pas satisfaits

23 sinon siÉtatsMatures.Attend(ad_u) alors

24 ÉtatCourant ← ÉtatsMatures.ÉtatsAttendant(ad_u).PlusGrandParMaturité(); 25 CP ← ÉtatCourant.ComportementAttenduOuvertPar(ad_u);

26 GestionnaireDÉtat.Ouvrir(CP);

27 Dogma.NouvelActeDeDialogue(ad_u);

// En dernier ressort, l’agent ignore l’acte de dialogue de l’utilisateur 28 sinon

29 IgnorerActeDeDialogue(ad_u);

répond à un comportement proposé), mais c’est toujours suite à un acte de dialogue de l’utilisateur qu’une transition entre état est réalisée. Ce mécanisme a été délibérément conçu de cette manière pour laisser à l’utilisateur la main sur l’interaction et le déroulement

de la tâche. De cette manière l’agent peut proposer des évolutions mais ce sont, en définitive, les décisions de l’utilisateur qui priment.

Notons ici que c’est le gestionnaire d’état qui réalise l’accommodation (cf. section 3.2.2) de l’agent à une action de l’utilisateur. En effet, celui-ci peut faire évoluer la partie privée de l’état d’information en ouvrant un comportement attendu ou en changeant l’état courant afin de permettre la contextualisation correcte d’un acte de dialogue de l’utilisateur.