← Back to blog

Cara aku menghentikan AI Discord kami berhalusinasi

Illia Cherviakovby Illia C.8 min read
AI AgentDiscordCommunityLLM GuardrailsWeb3
Cara aku menghentikan AI Discord kami berhalusinasi

Aku ngurusin komunitas Discord bernama Inner Circle. Ini cohort buat creator, puluhan member aktif, satu admin. Aku.

Setiap hari pertanyaan yang sama muncul di chat. Rank aku berapa? Poin aku ada berapa? Kenapa dia lebih banyak dari aku? Apa yang masih kurang? Kapan leaderboard di-reset? Bonus itu jalannya gimana? Gak ada yang susah. Semuanya bisa dijawab dari data yang sudah kami track. Tapi menjawabnya manual, satu per satu, seharian, gak bakal scale lewat satu orang. Dan memang cuma satu orang.

Jadi aku bikin AI assistant yang menjawabnya buat aku. Dia hidup di Discord sebagai slash command, /ask, plus trigger reply supaya member bisa quote pesan apa pun dan bertanya soal itu. Member ngetik /ask rank aku berapa dan apa yang masih kurang, dan dia menjawab, langsung di channel, dalam beberapa detik, dari data cohort asli.

Bagian itu gampang. Bagian yang menarik adalah semua hal yang aku lakukan supaya dia gak ngarang.

Kenapa assistant faktual, bukan chatbot

Keputusan pertama soal scope. Aku gak mau "coach" yang ngasih tahu cara memperbaiki post kamu. Aku mau petugas administrasi yang membosankan dan faktual yang hafal angkanya luar kepala: posisi kamu, task kamu, submission kamu, leaderboard, perbandingan kamu dengan member lain, apakah kamu masih bisa mencapai #1 kalau menyelesaikan semuanya.

Membosankan itu justru intinya. Assistant komunitas yang sesekali mengarang aturan atau angka lebih buruk daripada gak ada assistant sama sekali, karena sekarang orang jadi berdebat dengan bot soal payout mereka. Di cohort di mana poin terhubung ke reward asli, angka hasil halusinasi bukan kesalahan lucu. Itu jadi tiket support dan masalah kepercayaan.

Jadi tujuannya sempit dan jelas: mengalihkan beban repetitif "apa status aku" dari aku ke sesuatu yang benar setiap saat.

Guardrail itu bukan "tolong bersikap baik"

Ini yang paling sering salah dipahami orang saat mereka menempelkan LLM ke produk mereka. Mereka menulis system prompt panjang yang bilang "cuma jawab pertanyaan soal X, jangan pernah bocorin Y, jangan ngarang," lalu menyebut itu guardrail. Bukan. Itu cuma saran. User yang gigih, atau sekadar frasa yang sial, bisa menembusnya dengan mudah.

Guardrail yang asli adalah capability boundary. Kamu gak minta model bersikap baik. Kamu bikin perilaku buruk jadi mustahil.

Assistant tidak pernah dapat koneksi database. Dia gak bisa menulis query. Yang bisa dia lakukan cuma memanggil function dari daftar tetap yang aku tulis: get_my_standing, get_my_tasks, get_leaderboard, compare_to, dan sekitar selusin lagi. Semuanya read-only, dan semuanya cuma mengembalikan field yang sudah publik di komunitas. Bagian "siapa aku" gak pernah diserahkan ke model. Saat seseorang bertanya soal posisi mereka, server menyisipkan identitas pemanggil ke dalam tool call. Model gak pernah menyelesaikan "aku," jadi dia gak bisa ditipu untuk menarik data pribadi orang lain. Memang gak ada data pribadi yang bisa dijangkau sejak awal.

Begitu boundary dibangun seperti itu, system prompt berhenti menjadi hal yang berdiri di antara user dan database kamu. Dia cuma ada supaya jawabannya enak dibaca.

GUARDRAIL: PROMPT vs BOUNDARY A SYSTEM PROMPT "only answer about X, never make things up" a suggestion. a user walks right through it. A CAPABILITY BOUNDARY no DB access. fixed read-only tools. the server does the math. misbehaving is physically impossible.
Guardrail yang asli bukan sebuah paragraf. Itu adalah hal yang secara fisik gak bisa dijangkau model.

LLM buruk soal matematika, jadi aku berhenti menyuruhnya

Pelajaran kedua ini menyebabkan beberapa bug produksi yang memalukan sebelum akhirnya nyantol.

Awal-awal, seseorang minta assistant membandingkan dirinya dengan member lain. Dia memanggil tool, dapat dua profil, lalu dengan pede menjelaskan bahwa orang lain itu unggul karena "biweekly task yang bernilai poin lebih banyak." Gak ada biweekly task. Dia mengarangnya untuk mengisi celah dalam kalimat yang terasa butuh alasan.

Di lain waktu dia menjawab "kamu melewatkan 0 task" padahal member itu sebenarnya melewatkan hampir semuanya, karena task-nya sudah diarsipkan dan model cuma melihat potongan yang terlihat.

Solusinya di kedua kasus itu sama, dan ini aturan yang sekarang aku terapkan di mana-mana: model tidak menghitung, dia menceritakan. Aritmetika sungguhan apa pun, membandingkan dua orang, menjumlahkan batas atas poin, menghitung task yang terlewat, terjadi di kode server yang bisa aku test. Tool mengembalikan rincian yang sudah jadi dan benar, dan satu-satunya tugas model adalah menyampaikannya dengan bahasa sederhana. Kalau server gak bisa menghasilkan rincian yang bersih, tool mengembalikan flag yang menyuruh model bilang "aku bisa tunjukkan totalnya tapi aku gak bisa merinci selisihnya" alih-alih mengarangnya.

Temperature diset ke nol. Prompt-nya bilang, dengan sejelas-jelasnya, jangan pernah mengarang angka, jawab hanya dari yang dikembalikan tool. Antara dua hal itu dan aturan narasikan-jangan-hitung, "pengisian kreatif" tadi sebagian besar hilang.

Hal-hal kecil yang membuatnya bisa dipakai

Beberapa detail berkontribusi lebih banyak ke pengalaman daripada pilihan model itu sendiri.

Sebagian besar pertanyaan dijawab tanpa satu pun tool call, karena sebelum model dijalankan aku sudah pre-load rank dan poin pemanggil serta puncak leaderboard ke dalam context. Pertanyaan umum terjawab seketika dan murah.

Aturan program tersimpan dalam sekumpulan catatan pendek yang dikurasi, dan model bisa menarik tepat satu potongan relevan sesuai kebutuhan. Aku belajar dengan cara yang pahit bahwa menempelkan seluruh buku aturan ke setiap prompt malah bikin dia lebih banyak berhalusinasi, bukan berkurang. Context lebih sedikit, grounding lebih baik.

Komunitas kami punya dua mata uang dengan nama yang mirip membingungkan, dan model terus mencampuradukkannya. Jadi prompt-nya membawa glosarium yang tegas yang mendefinisikan masing-masing dan melarang memperlakukannya sebagai hal yang sama. Satu paragraf itu membunuh satu kategori penuh jawaban salah.

Dan karena model yang aku pakai mengikuti instruksi formatting dengan longgar, ada langkah cleanup deterministik setelah generasi yang membuang apa pun yang di-render buruk oleh Discord. Model boleh berulah soal formatting sesukanya. User gak pernah melihatnya.

Apa yang sebenarnya berubah

Assistant menjawab pertanyaan yang dulu aku jawab sendiri. Itu saja, dan itu segalanya. Member mengecek posisinya sendiri tanpa ping aku. Seseorang menyelesaikan perdebatan "siapa yang unggul" dengan bertanya ke bot alih-alih ke aku. Member baru mendapat jawaban soal program jam 3 pagi di zona waktu saat aku sedang tidur.

Ini memungkinkan satu orang menjalankan komunitas yang seharusnya butuh tim support kecil, tanpa ada yang merasa sedang berbicara dengan tembok. Bot menangani pertanyaan repetitif supaya energi manusia diarahkan ke tempat yang benar-benar menjaga komunitas tetap hidup. Setiap jawaban di-ground pada data asli, jadi gak ada yang berdebat dengan angka karangan.

Ini juga bukan satu-satunya AI tool yang aku bikin untuk komunitas itu. Yang satunya me-review draft member dengan suaraku sebelum mereka posting, supaya post yang lemah diperbaiki sebelum sampai ke antrian review-ku.

Kalau kamu menempelkan LLM ke sesuatu

Tiga hal yang akan aku bilang ke siapa pun yang membangun ini:

Bikin guardrail-nya jadi capability boundary, bukan paragraf instruksi. Kalau model secara fisik gak bisa menjangkau sesuatu, kamu gak perlu percaya dia untuk tidak melakukannya.

Jangan pernah biarkan model melakukan aritmetika yang kamu pedulikan. Hitung di kode, serahkan jawabannya, biarkan dia menceritakan. Beri dia cara yang jujur untuk bilang "aku gak tahu" alih-alih alasan untuk menebak.

Beri makan lebih sedikit, bukan lebih banyak. Insting untuk menumpahkan semua context ke prompt justru terbalik.

Ini jenis hal yang aku bangun saat sebuah komunitas atau produk perlu scale melampaui yang bisa dijawab satu orang secara manual. Itu juga alasan aku lebih memilih membangun tool sendiri daripada menyewanya. Kalau itu masalah yang kamu punya, book a call dan ceritakan ke aku.

Pertanyaan yang sering diajukan

Apa itu AI community manager?

AI community manager adalah bot yang menangani pertanyaan repetitif yang seharusnya dijawab manusia seharian: rank, poin, task, posisi leaderboard. Punyaku berjalan sebagai slash command Discord dan menjawab dari data cohort asli dalam hitungan detik, jadi satu orang bisa menjalankan komunitas yang seharusnya butuh tim support kecil.

Bagaimana cara menghentikan AI assistant berhalusinasi?

Bikin guardrail-nya jadi capability boundary, bukan instruksi sopan. Model gak pernah menyentuh database; dia cuma bisa memanggil function read-only yang aku tulis. Dia juga gak pernah melakukan aritmetika. Server yang menghitung, model yang menceritakan. Temperature nol, dan dia disuruh menjawab hanya dari yang dikembalikan tool.

Haruskah LLM melakukan matematika di aplikasi kamu?

Tidak. LLM buruk soal aritmetika dan akan mengarang alasan untuk mengisi celah dalam kalimat. Perhitungan sungguhan apa pun, membandingkan dua member atau menjumlahkan batas atas poin, terjadi di kode server yang bisa kamu test. Tool mengembalikan rincian yang sudah jadi dan benar, dan satu-satunya tugas model adalah menyampaikannya dengan bahasa sederhana.