Comment Stage Whisper résout le problème du 'PNJ omniscient' : architecture d'isolation de contexte

Des PNJ capables de citer quelque chose que mon personnage avait dit trois sessions plus tôt, c'était plutôt cool à voir. Le système de mémoire fonctionnait. Les PNJ faisaient référence à des événements passés, citaient des choses que j'avais dites. MAIS, cela a aussi créé un problème différent : les PNJ sont devenus omniscients.

Voici un extrait d'une session récente, le passage pertinent est souligné :

« Alors, dit-elle, sa voix portant facilement par-dessus le bruissement des feuilles, quelle est la vraie raison pour laquelle tu es venu me chercher ? La curiosité, ou est-ce que tu essaies juste d'éviter de déballer le reste de ce bureau chaotique qui est le tien ? »

Cela faisait référence à quelque chose qui s'était passé dans une scène complètement différente, à laquelle ce personnage n'avait pas participé. Le personnage n'aurait dû avoir aucun moyen de le savoir.

De petites incohérences comme celle-ci brisent l'immersion. Mais dans d'autres cas, cela peut carrément casser le jeu. Par exemple, j'ai une campagne où mon personnage est un vampire secret naviguant dans un monde d'humains qui ne se doutent de rien. Les PNJ ont commencé à suggérer nonchalamment qu'ils connaissaient mon secret, ce qui rendait soudainement très difficile de passer la journée sans être soupçonné. Ou dans d'autres exemples, si je volais un artefact pendant un cambriolage, un personnage sans rapport faisait des commentaires suspicieux.

L'IA décidait tout simplement d'utiliser tous les secrets disponibles dans le contexte pour un effet dramatique, ce qui ne devrait vraiment arriver que très occasionnellement pour des raisons d'intrigue.

Alors pourquoi ne puis-je pas simplement dire à l'IA de ne pas faire ça ?

Le problème est que vous essayez d'obtenir un résultat négatif. « N'utilise pas cette information. » C'est une tâche fondamentalement différente et bien plus difficile que le cas positif : utilise l'information qui est là. Pour entraîner un modèle à ignorer un contexte pertinent, il faudrait des milliers d'exemples de situations où l'information était clairement disponible mais où le résultat ne l'a délibérément pas utilisée. C'est presque l'antithèse de ce qu'une IA est conçue pour faire. Pour la plupart des tâches, ignorer un contexte utile serait un échec.

On pourrait concevoir qu'un modèle soit entraîné avec plus d'exemples de non-utilisation des secrets. Mais le récit et le jeu de rôle n'ont pas été un axe majeur pour les créateurs de modèles jusqu'à présent, donc ce problème n'a pas reçu l'attention qu'il mérite.


J'ai réalisé que je devais résoudre cela sur cette campagne de vampire secret. La campagne était configurée pour que mon personnage puisse passer pour un humain normal la plupart du temps, et tout l'enjeu était de naviguer cette tension sans se faire prendre. Ce serait un grand moment narratif quand un PNJ découvrirait le secret, car il faudrait alors le persuader de garder le silence.

Ce que j'ai découvert, c'est que pratiquement chaque antagoniste potentiel savait, d'une manière ou d'une autre. Même si je n'avais rien révélé. Et cela cassait immédiatement l'intrigue. C'était comme s'il y avait un grand panneau au-dessus de ma tête annonçant que j'étais un vampire. Mon personnage passait son temps à faire du contrôle de dégâts, ou à avoir l'impression que chaque personnage avait un levier sur le mien.

J'ai expérimenté avec les prompts pendant longtemps. J'ai fini par réaliser que je devrais tout simplement ne pas inclure l'information dans le contexte du tout.

La solution est donc l'isolation de contexte. Si l'IA ne peut pas s'empêcher d'utiliser tout ce qu'elle voit, alors l'information doit vraiment ne pas être là. C'est réalisable dans Stage Whisper parce que chaque scène et mémoire est déjà étiquetée avec les PNJ qui y apparaissent, nous pouvons donc facilement filtrer pour n'inclure que les personnages qui étaient effectivement présents.

Mais voilà le hic. Certains secrets sont des moteurs majeurs de l'intrigue. Vous ne pouvez pas simplement les supprimer entièrement, parce que l'histoire doit encore en tenir compte. Qu'il s'agisse d'un cambriolage ou d'un vampire secret, ces secrets sont au cœur du récit, et ce ne serait pas la même histoire sans eux.

Nous avons donc dû diviser notre génération de texte en deux.

La première partie, je l'appelle le Directeur Narratif. Il dirige l'histoire globale : l'intrigue, les temps narratifs. Il a tous les secrets, et peut décider de la meilleure façon de faire avancer l'histoire compte tenu de ces secrets. Il comprend le tableau complet, y compris les choses qu'aucun personnage ne devrait encore savoir.

La seconde partie, je l'appelle le Directeur de Scène. Il « joue » la scène que lui transmet le Directeur Narratif. Il a accès à tous les souvenirs et personnalités pertinents des PNJ, donc il a suffisamment d'informations pour jouer tous les PNJ et fournir une narration interstitielle, mais il ne connaît véritablement pas les secrets.

Certaines informations doivent passer de l'un à l'autre, pour qu'ils puissent travailler sur la même histoire sans travailler l'un contre l'autre.


Le Directeur Narratif produit un synopsis qui indique au Directeur de Scène tout ce qu'il doit savoir. Cela ressemble à ceci :

<synopsis>
  Elian retourne à la Chambre 314 avec Maeve, les protections de confidentialité familières offrant un bref répit après l'attention suscitée par leur démonstration spectaculaire. Sentant que Maeve a besoin d'étudier après une journée inhabituelle, Elian décide de quitter leur chambre pour une exploration solitaire
  <npc_list>maeve-corwin</npc_list>
  <location>chambre-314</location>
  <new_scene/>
</synopsis>

Cela indique au Directeur de Scène ce qui se passe dans la scène, où elle se situe, qui est présent, et s'il s'agit d'une nouvelle scène. La présence du personnage joueur est présumée. Le Directeur Narratif peut également émettre optionnellement des messages hors personnage au joueur, et prendre des notes de performance détaillées pour son propre usage futur.

Les deux directeurs ne voient pas le même contexte. Voici la répartition :

Le Directeur Narratif voit :

C'est tout ce dont le Directeur Narratif a besoin pour prendre des décisions d'intrigue intéressantes et cohérentes. C'est beaucoup de données, mais le cache KV maintient les coûts gérables.

Le Directeur de Scène voit :

C'est une vue délibérément réduite. Le Directeur de Scène a tout ce dont il a besoin pour jouer la scène, et rien qu'il ne devrait pas avoir.

Deux fiches de personnage

La distinction entre fiche publique et fiche complète du personnage joueur est cruciale. Le Directeur Narratif a besoin de connaître tous les détails et tous les secrets pour produire l'histoire. Mais le Directeur de Scène ne devrait pas connaître ces détails. Il a tout de même besoin de savoir qui est physiquement le personnage joueur, à quoi il ressemble, sa réputation publique, les choses que n'importe quel PNJ remarquerait naturellement en étant à ses côtés. Maintenir une fiche publique séparée signifie que le Directeur de Scène a toujours ce contexte sans jamais avoir besoin d'accéder aux secrets.

Filtrage des souvenirs par scène

Chaque scène est étiquetée avec les PNJ présents. Cela signifie que nous savons exactement quelles scènes récentes sont pertinentes pour chaque PNJ, et nous les ajoutons au contexte du Directeur de Scène. L'hypothèse est que les scènes de la session en cours sont hautement pertinentes. Pour les souvenirs plus anciens, la recherche sémantique fait remonter ceux qui pourraient compter.

Le résultat est un Directeur de Scène qui ne peut véritablement pas savoir des choses que les personnages de la scène ne savent pas. Non pas parce qu'on lui a dit de ne pas le faire, mais parce que cette information n'est tout simplement pas là.


J'ai mené une campagne où mon personnage est une femme humaine qui doit se déguiser en homme pour garantir le titre de noblesse mineure de sa famille, en raison des lois d'héritage. C'est une campagne de comédie légère, avec quelques scénarios comiques qui découlent de cette confusion de genre.

Sans ce système en place, il n'y a généralement aucun moyen de surprendre les PNJ. Ils se comportent tous comme s'ils soupçonnaient quelque chose. Peut-être pas directement, mais leur façon de vous parler a toujours ce petit ton de savoir. C'est difficile à décrire, mais on le sent. La tension dramatique d'une identité secrète n'est tout simplement pas là.

Mais avec ce système en place, les PNJ jouent complètement franc jeu. Ils n'en ont aucune idée. Et les scènes où la grande révélation a lieu font vraiment mouche, parce que jusqu'à ce moment-là, il n'y a absolument aucune allusion. La comédie fonctionne parce que le public, les PNJ, ne voient vraiment rien venir.

Il y a un cas limite. Comme le Directeur de Scène ne connaît pas le secret exact, il produit occasionnellement des détails anatomiquement incorrects. C'est difficile à éviter, puisque le Directeur de Scène travaille à partir d'une fiche de personnage publique qui n'inclut pas ces détails. La solution serait d'ajouter une troisième étape : le Directeur Narratif révise la scène générée avant qu'elle ne sorte, pour détecter toute divergence de ce type. Cela ajoute du coût et de la latence, donc c'est sur la feuille de route mais pas encore implémenté.

Une chose qui m'a surpris : quand un secret est révélé en jeu, il se propage naturellement. Le Directeur de Scène conserve les scènes générées précédemment, donc une fois qu'un PNJ apprend quelque chose dans une scène, cela devient une partie de son contexte pour le tour suivant. À la fin des scènes, ces scènes forment des souvenirs pour le PNJ. À la fin des sessions, les fiches de PNJ sont mises à jour. Ces deux mécanismes signifient que la connaissance individuelle d'un secret par un PNJ est enregistrée, et l'histoire peut continuer avec ce PNJ désormais réellement au courant.


Le compromis

Cette approche n'est pas gratuite. Le coût augmente, mais sans tout à fait doubler, puisque le contexte du Directeur de Scène est relativement léger. Le cache de prompt aide aussi considérablement. Au fur et à mesure que la scène se déroule, de nouveaux tours sont ajoutés à la fin du contexte, ce qui signifie que 90% du prompt peut provenir du cache plutôt que d'être régénéré à chaque fois.

Actuellement, c'est activé pour toutes les campagnes. Les changements architecturaux sont suffisamment significatifs pour qu'il n'ait pas de sens de fournir un chemin qui contourne cette configuration. Pour la plupart des campagnes, le compromis en vaut la peine, même si votre histoire n'a pas de secrets majeurs, parce que la cohérence des PNJ compte dans tous les cas.

Ce que cela débloque : le Directeur de Jeu

Le pipeline à deux étapes démontre quelque chose d'utile : diviser les tâches entre des IA plus spécialisées avec des contextes optimisés donne de meilleurs résultats qu'une seule IA faisant tout. Cela conduit naturellement à une troisième étape.

Je l'appelle le Directeur de Jeu. Son travail est de gérer les mécaniques de JdR : jets de dés, tests de compétence, suivi de statut. Son contexte peut être optimisé différemment des autres, puisqu'il se soucie moins de l'historique narratif et plus des règles et de l'état du jeu.

L'ajout d'un Directeur de Jeu a un avantage inattendu. Comme il s'exécute à chaque tour au cas où le joueur tenterait quelque chose qui justifie un test de compétence, il peut aussi décider si l'entrée du joueur est une continuation de la dernière scène ou quelque chose de nouveau. Si le joueur ne fait que discuter avec un PNJ sans faire avancer l'intrigue, le Directeur de Jeu peut sauter entièrement le Directeur Narratif et laisser le Directeur de Scène continuer la scène seul. Le Directeur de Scène a les fiches de PNJ et peut faire des recherches de mémoire, donc il peut poursuivre un dialogue comme celui-ci sans la surcharge d'un appel complet au Directeur Narratif.

C'est la direction que prend l'architecture : un pipeline à trois étapes qui devient progressivement plus spécialisé, avec des optimisations de réduction des coûts intégrées à chaque niveau.


Stage Whisper est conçu pour les personnes qui veulent jouer à des JdR en solo avec la profondeur et la cohérence d'une campagne longue durée. Le système de mémoire, y compris cette architecture d'isolation de contexte, est ce qui rend cela possible. Lancez-vous ou rejoignez notre Discord pour voir comment cela fonctionne en pratique.

Pour en savoir plus sur le système de mémoire de Stage Whisper, consultez Partie 1 : Cohérence narrative et Partie 3 : Les PNJ qui rêvent.