Cara Merancang Game Bot AI dengan Aturan yang Jelas, Memori, dan Pilihan Pemain
Untuk merancang game bot AI yang dapat dimainkan, tentukan putaran kecil yang dapat diulang, simpan status game di luar percakapan, dan berikan konsekuensi yang jelas pada setiap tindakan pemain. Biarkan bot menafsirkan permintaan dan mendeskripsikan peristiwa; biarkan aturan eksplisit menentukan biaya, progres, dan akhir cerita. Panduan ini ditujukan bagi pembuat game yang sedang membangun game berbasis teks dengan karakter atau narator AI. Tugasnya adalah menciptakan satu sesi singkat yang dapat diuji di mana pemain memahami pilihan mereka, melihat keputusan mereka berpengaruh, dan mencapai akhir cerita yang valid. Game pengiriman di bawah ini adalah sebuah rancangan ilustratif, bukan produk yang sudah teruji atau studi kasus yang dilaporkan.
Mulailah dengan putaran inti yang dapat Anda mainkan tanpa AI
Tuliskan putaran tersebut dalam satu kalimat: Tunjukkan situasi → terima tindakan → periksa aturan → perbarui status → tunjukkan konsekuensi dan opsi berikutnya. Setiap giliran harus menyelesaikan putaran tersebut atau menjelaskan mengapa proses tidak dapat dilanjutkan.
Sebelum menulis prompt kepribadian, tentukan tujuan, tindakan yang tersedia, biaya tindakan, dan kondisi akhir. Anda harus dapat menjalankan game tersebut menggunakan kartu indeks atau lembar bentang (spreadsheet). Hal ini memungkinkan mekanika game diperiksa sebelum dialog yang dihasilkan AI menambahkan variasi.
Bayangkan sebuah game kecil bernama *Festival Parcel*. Pemain memiliki lima unit waktu untuk mengantarkan paket. Mereka dapat memilih rute langsung atau rute taman dan dapat memilih untuk mengambil pita dekoratif sebelum berangkat. Sebuah bot berperan sebagai kurir festival yang menjelaskan rute dan mengomentari pengiriman.
Aturan yang diusulkan sengaja dibuat ringkas:
Tunjukkan aturan-aturan ini sebelum pilihan pertama. Jelaskan bahwa tindakan pengiriman akan mengakhiri sesi, jadi pemain harus mengambil pita terlebih dahulu. Pengiriman yang menghabiskan unit waktu terakhir tetap berhasil karena pemeriksaan keberhasilan dilakukan lebih dulu.
Prototipe ini memiliki awal, ruang keputusan, dan akhir yang lengkap. Karakter atau lokasi tambahan harus membuktikan kegunaannya dengan menambahkan keputusan yang bermanfaat ke dalam putaran tersebut.
Jadikan status eksplisit sebagai otoritas penentu hasil
Perlakukan status sebagai catatan game mengenai apa yang sebenarnya terjadi. Teks percakapan dapat menjelaskan catatan tersebut, tetapi tidak boleh mengubahnya secara diam-diam.
Bab Status karya Robert Nystrom dalam *Game Programming Patterns* (https://gameprogrammingpatterns.com/state.html) mendeskripsikan mesin status hingga (finite state machine) melalui status, input, dan transisi yang diizinkan. Bab ini juga mendemonstrasikan bagaimana penggabungan bendera Boolean yang longgar dapat menghasilkan kombinasi yang tidak valid. Terapkan prinsip tersebut pada siklus hidup game Anda: gunakan satu status sesi, seperti aktif, terkirim, atau terlewat, dengan transisi yang telah ditentukan.
Untuk prototipe pengiriman, spesifikasi status yang kecil sudah cukup:
Dapatkan kartu pos taman berdasarkan rute yang dipilih alih-alih menyimpan nilai kedua yang berpotensi bertentangan. Demikian pula, hitung tindakan yang saat ini tersedia dari status dan aturan.
Gunakan urutan pemrosesan yang tetap: tafsirkan permintaan, validasi tindakan dan parameternya, hitung hasilnya, tetapkan perubahan status, lalu narasikan. Berikan hasil yang sudah ditetapkan dan tindakan lanjutan yang diizinkan kepada narator. Narator tidak boleh membuat perhitungan kedua sendiri.
Misalnya, setelah mengambil pita, hasil otoritatifnya adalah: tersisa empat unit waktu, pita telah diambil, dan kedua rute biayanya mencukupi. Bot dapat mendeskripsikan warna pita tersebut, asalkan warna itu tidak memiliki pengaruh mekanis. Bot tidak dapat menambahkan biaya waktu yang tidak diumumkan atau memberikan pita kedua.
Anda dapat membuat prototipe kondisi-kondisi ini dengan alat fiksi interaktif yang sudah ada. Tutorial resmi fiksi interaktif Inkle (https://www.inklestudios.com/ink/web-tutorial/) menjelaskan pilihan bersyarat, pelacakan konten yang telah dikunjungi sebelumnya, variabel, dan akhir cerita yang eksplisit. Fitur-fitur tersebut menawarkan fondasi yang berguna untuk menguji game yang dirancang sebelum menambahkan narasi AI.
Beri pemain pilihan yang dapat mereka pahami dan pengaruhi
Untuk desain ini, nilailah agensi berdasarkan apakah pemain dapat mengantisipasi perbedaan yang bermakna lalu mengamatinya pada hasil akhir. Beberapa tombol dengan susunan kata berbeda yang mengarah pada hasil yang identik tidak banyak membantu menguji hal tersebut.
Dalam *Festival Parcel*, keputusan rute mendukung preferensi pemain yang berbeda:
Ini adalah perhitungan ilustratif dari aturan yang dinyatakan. Perhitungan ini memberikan bantuan keputusan sederhana: pilih pengiriman langsung untuk selesai lebih awal, ambil pita untuk hiasan, atau ambil rute taman untuk mendapatkan kartu pos. Waktu yang tersisa di sini hanyalah detail akhir cerita; waktu tersebut tidak memberikan poin secara rahasia.
Jika game nantinya memberikan hadiah untuk hasil tertentu, ungkapkan penilaian tersebut sebelum keputusan diambil. Jika tidak, pemain tidak dapat mengevaluasi konsekuensi pertukaran (tradeoff) yang Anda maksudkan.
Dukung teks bebas di samping tindakan yang terlihat. "Ayo lewat jalan yang berpemandangan indah" dapat dipetakan ke pengiriman lewat taman. "Buat jadi istimewa" bermakna ambigu: bisa berarti mengambil pita, mengambil rute taman, atau keduanya. Mintalah klarifikasi singkat tanpa menghabiskan waktu.
Untuk prototipe pertama, terima satu tindakan alur game per pesan. Jika pemain meminta serangkaian tindakan, tunjukkan langkah-langkahnya dan minta mereka memilih tindakan pertama. Ini menghindari eksekusi sebagian dari rencana yang langkah-langkah selanjutnya ternyata tidak tersedia.
Jadikan respons untuk permintaan yang tidak didukung tetap informatif. Jika pemain meminta untuk terbang, jelaskan bahwa rute yang tersedia adalah rute langsung dan taman, beserta biayanya. Teks bebas dapat memperluas ekspresi sementara sistem tindakan mempertahankan serangkaian kapabilitas yang dapat diprediksi.
Tentukan apa yang diingat bot dan apa yang dapat diketahuinya
Pisahkan memori menjadi tiga lapisan, masing-masing dengan tujuan yang berbeda.
Status sesi otoritatif menyimpan sumber daya, progres, rute yang dipilih, dan akhir cerita. Status ini bertahan saat disimpan dan dimuat ulang, serta hanya berubah melalui tindakan yang divalidasi.
Log peristiwa sesi mencatat tindakan yang telah ditetapkan dan konsekuensinya. Suatu entri mungkin menyatakan bahwa tindakan 2 mengambil pita dan mengurangi waktu dari lima menjadi empat. Hal ini mendukung proses penelusuran kesalahan (debugging) dan rekapitulasi yang akurat. Simpan pengidentifikasi tindakan agar permintaan yang berulang tidak dapat menerapkan peristiwa yang sama dua kali.
Konteks naratif berisi dialog terkini dan rekap ringkas yang digunakan untuk mempertahankan nada dan kontinuitas. Konteks ini dapat dipersingkat tanpa menghapus status game yang sebenarnya.
Panduan Anthropic untuk rekayasa konteks yang efektif (https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents) membahas perangkuman riwayat percakapan sekaligus penyimpanan catatan persisten di luar jendela konteks. Panduan tersebut juga memperingatkan bahwa perangkuman yang terlalu agresif dapat menghilangkan detail penting. Implikasi desain di sini adalah menyimpan fakta mekanis yang pasti dalam penyimpanan terstruktur dan menggunakan ringkasan untuk kontinuitas percakapan.
Tetapkan batasan pengetahuan serta batasan penyimpanan. Karakter hanya boleh menerima fakta yang diizinkan untuk diketahuinya. Jika versi selanjutnya menyertakan rute tersembunyi, jauhkan rute tersebut dari konteks karakter itu hingga syarat penemuannya terpenuhi. Status yang tersedia untuk mesin game tidak semuanya perlu disediakan bagi narator.
Untuk game kecil ini, pertahankan progres dalam sesi tersimpan dan hapus saat memulai putaran baru. Hindari menyimpulkan preferensi pemain yang bertahan lama hanya dari satu pilihan rute. Jika Anda menambahkan preferensi yang tersimpan, seperti deskripsi yang lebih singkat, buatlah preferensi tersebut eksplisit dan dapat diedit.
Uji memori dengan urutan konkret: ambil pita, simpan, muat ulang, tanyakan status, dan pilih pengiriman lewat taman. Pita harus tetap berstatus diambil, sisa waktu harus empat unit sebelum pengiriman, dan waktu akhir harus nol.
Rancang respons terpisah untuk kegagalan game dan kegagalan sistem
Tujuan yang gagal dicapai adalah bagian dari game. Permintaan generasi yang gagal adalah masalah implementasi. Berikan konsekuensi yang berbeda untuk keduanya.
Untuk kegagalan game, sebutkan aturan yang mengakhiri sesi tersebut. Setelah tiga kali menunggu, hanya tersisa dua unit waktu, sehingga kedua rute pengiriman tidak lagi mencukupi sisa waktu. Akhiri segera dengan penjelasan yang jelas dan opsi mulai ulang alih-alih membiarkan pemain berada dalam sesi aktif yang mustahil untuk dimenangkan.
Untuk kegagalan implementasi, tentukan perilaku pemulihan sebelum menambahkan narasi yang rumit:
Jangan mengganti data simpanan yang tidak terbaca dengan game baru secara diam-diam. Hal itu menyembunyikan progres yang hilang dan membuat respons berikutnya menyesatkan.
Buat pesan hasil polos untuk setiap tindakan: apa yang terjadi, apa yang berubah, dan apa yang tersedia selanjutnya. Narasi ekspresif bot dapat menyertai hasil ini. Selama terjadi batas waktu habis (timeout) atau respons yang kontradiktif, pesan polos tersebut tetap memungkinkan pemain untuk melanjutkan.
Selesaikan akhir cerita dengan rekapitulasi yang akurat. Sebutkan pita hanya jika diambil dan kartu pos hanya untuk rute taman. Prosa yang dihasilkan AI harus mempertahankan perbedaan yang telah dipilih pemain sepanjang sesi.
Uji main (playtest) aturannya, lalu uji penafsiran bot
Pertama, uji game dengan teks tetap. Cakup setiap tindakan, akhir cerita, dan kondisi batas. Kemudian tambahkan bot dan ulangi pengujian tersebut menggunakan variasi kata. Hal ini memisahkan antara aturan yang rusak dan permintaan yang salah dipahami.
Undang pemain yang representatif untuk menyelesaikan pengiriman tanpa arahan langsung. Minta mereka menjelaskan apa yang mereka harapkan sebelum memilih dan apa yang mereka yakini telah berubah setelahnya. Panduan Nielsen Norman Group tentang uji kegunaan berpikir nyaring (thinking-aloud usability testing) (https://www.nngroup.com/articles/thinking-aloud-the-1-usability-tool/) merekomendasikan partisipan dan tugas yang representatif sambil membiarkan partisipan yang berbicara; panduan ini juga mengingatkan bahwa pancingan fasilitator dapat memengaruhi perilaku.
Gunakan observasi bersamaan dengan log tindakan. Catat percobaan tindakan, permintaan klarifikasi, hasil yang tidak terduga, dan ketidakcocokan apa pun antara narasi dan status yang telah ditetapkan. Tanyakan apakah pemain memahami opsi-opsi tersebut secara terpisah dari apakah mereka menikmati memilih di antara opsi-opsi itu.
Daftar periksa uji main yang ringkas. Perbaiki kegagalan pada aturan dan penanganan status sebelum memperluas dunia game. Jika pemain memahami pilihan tetapi menganggapnya tidak menarik, ubah konsekuensi pertukarannya (tradeoffs). Jika mereka menikmati keputusannya tetapi tidak dapat memprediksi biayanya, tingkatkan penyajiannya. Perluas prototipe ketika pilihan-pilihan yang ada tetap dapat dipahami di berbagai variasi kata, sesi tersimpan, dan jalur kegagalan.
