Des bots qui ne parlent plus tous pareil
Chaque phrase publiée par les habitués était l’une de six. Il y en a désormais des centaines, chaque personnage écrit dans son propre registre, et rien ne se répète tant que c’est encore à l’écran.

En clair
Deux jours après l’arrivée des habitués dans le hall, le reproche sautait aux yeux : ils disaient tous la même chose. L’un a publié « quick game anyone », « lets play », « quick game anyone », « need one more », « need one more » en une seule soirée. Un autre a dit « anyone up for a game » trois fois en quatre-vingt-dix minutes.
La base de données a été catégorique : chaque phrase qu’ils avaient jamais publiée était l’une de six. En partie, même constat — un pseudonyme a dit « had to have it » neuf fois. Et il y avait un troisième indice que personne n’avait signalé : tous les douze écrivaient exactement dans le même registre — minuscules, phrases tronquées, aucune ponctuation — alors que les humains dans la même salle tapaient « Hi guys! », « Someone wanne play? » et « Let’s goooooooooo! ».
Chaque habitué a maintenant une voix qui lui est propre, dérivée de son identité plutôt que tirée au sort à chaque fois. Sur l’ensemble du groupe, cela donne :
- certains écrivent en minuscules, d’autres en phrases complètes — et ils s’y tiennent ;
- certains ponctuent beaucoup, d’autres jamais ;
- chacun a deux ou trois émojis qu’il utilise vraiment, au lieu d’un répertoire commun ;
- certains étirent les mots, d’autres abrègent, quelques-uns font une faute de frappe de temps en temps ;
- et ce qu’ils disent colle à la salle : personne ne réclame « un de plus » quand quatre places sont libres.
Ils écrivent uniquement en anglais, partout, conformément à la décision qui régit le reste du comportement des bots.
Pour les curieux techniques
Le corpus est organisé par intention — saluer, chercher une partie, demander un joueur de plus, venir d’arriver, commenter le mode, attendre, plaisanter, encourager, proposer une revanche — et deux de ces intentions sont remplies à partir de la salle réelle, si bien que la phrase ne peut pas contredire ce que le joueur a sous les yeux.
La voix d’un personnage est dérivée de son pseudonyme plutôt que stockée : aucun champ supplémentaire n’est nécessaire, et elle survit inchangée au redémarrage du processus.
// botChat.voice.ts — the voice is a pure function of the nickname
const rng = createRng(`voice:${persona.nickname}`);
return {
sentenceCase: rng.float() < 0.34,
punctuation: pick(rng, ['none', 'light', 'heavy']),
emoji: pickN(rng, EMOJI_POOL, rng.int(2, 3)), // habitual, not shared
elongation: rng.float() * 0.2,
typoRate: rng.float() * 0.06,
};La répétition est gérée par une petite mémoire dont la portée couvre à la fois la salle et le personnage : la même phrase ne peut pas revenir tant qu’elle est encore à l’écran, et deux personnages d’une même salle ne peuvent pas se faire écho.
Le bug intéressant venait de la transformation qui introduit des fautes de frappe. Le chat des bots est écrit avec le rôle de service, qui passe directement outre le filtre de grossièretés par lequel transitent les messages humains — une faute « réaliste » pouvait donc écrire un mot bloqué (« and » mal tapé en « nad » figure dans la liste). Un test de 2 600 échantillons est passé sans broncher ; il a fallu environ 68 000 tirages pour que le problème apparaisse. Le test énumère désormais exhaustivement quelque 260 000 chaînes possibles en 1,4 seconde, et il appelle les mêmes générateurs que la couche de chat au lieu de les réimplémenter : la première version les avait réimplémentés et a immédiatement divergé.
