Bot yang tidak berbicara dengan gaya seragam
Setiap kalimat yang pernah ditulis para pemain tetap adalah salah satu dari enam kalimat. Kini ada ratusan, tiap persona menulis dengan gayanya sendiri, dan tidak ada yang berulang selama masih tampil di layar.

Dengan bahasa sederhana
Dua hari setelah para pemain tetap muncul di lobi, keluhannya langsung terlihat begitu diperhatikan: mereka mengatakan hal yang sama. Salah satunya menulis "quick game anyone", "lets play", "quick game anyone", "need one more", "need one more" dalam satu malam. Yang lain mengucapkan "anyone up for a game" tiga kali dalam sembilan puluh menit.
Basis data menegaskannya: setiap kalimat yang pernah mereka tulis adalah salah satu dari enam kalimat. Di dalam permainan polanya sama — satu nama panggilan mengucapkan "had to have it" sembilan kali. Ada pula petunjuk ketiga yang tak seorang pun melaporkannya: kedua belas persona menulis dengan gaya yang persis sama — huruf kecil, kalimat terpotong, tanpa tanda baca — sementara manusia di ruangan yang sama mengetik "Hi guys!", "Someone wanne play?" dan "Let’s goooooooooo!".
Kini setiap pemain tetap punya suaranya sendiri, diturunkan dari siapa dia, bukan dipilih acak setiap kali. Di seluruh jajaran, itu berarti:
- sebagian menulis dengan huruf kecil, sebagian dengan kalimat utuh — dan tetap begitu;
- sebagian gemar tanda baca, sebagian tidak pernah memakainya;
- masing-masing punya dua atau tiga emoji yang benar-benar dipakai, bukan kumpulan bersama;
- sebagian memanjangkan kata, sebagian menyingkat, sebagian sesekali salah ketik;
- dan yang mereka katakan cocok dengan ruangan: tak ada yang meminta "satu lagi" saat empat kursi masih kosong.
Mereka menulis hanya dalam bahasa Inggris, di mana pun, mengikuti keputusan yang sama seperti perilaku bot lainnya dalam permainan.
Untuk yang ingin tahu teknisnya
Korpusnya disusun menurut maksud — menyapa, mencari permainan, butuh satu orang lagi, baru bergabung, mengomentari mode, menunggu, bercanda, menyemangati, minta tanding ulang — dan dua di antaranya diisi dari ruangan yang sedang berjalan, sehingga kalimatnya tidak mungkin bertentangan dengan yang dilihat pemain.
Suara sebuah persona diturunkan dari nama panggilannya, bukan disimpan, jadi tidak perlu bidang baru pada tipe persona dan tetap sama setelah proses dimulai ulang:
// 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,
};Pengulangan ditangani oleh memori kecil yang cakupannya sekaligus ruangan dan persona, sehingga kalimat yang sama tidak bisa kembali selagi masih tampil di layar, dan dua persona dalam satu ruangan tidak bisa saling menggemakan.
Bug yang menarik ada pada transformasi salah ketik. Obrolan bot ditulis dengan peran layanan, yang langsung melewati penyaring kata kasar yang harus dilalui pesan manusia — sehingga salah ketik yang "realistis" bisa mengeja kata terlarang ("and" yang salah ketik menjadi "nad" ada dalam daftar). Uji dengan 2.600 sampel lolos dengan mulus; butuh sekitar 68.000 undian agar masalahnya muncul. Kini ujinya adalah enumerasi menyeluruh atas sekitar 260.000 kemungkinan string dalam 1,4 detik, dan memanggil generator yang sama dengan lapisan obrolan alih-alih menulis ulang — percobaan pertama menulis ulang dan langsung melenceng.
