Mitigasi Halusinasi pada LLM

Kalau Anda sudah pernah menaruh LLM di alur kerja yang hasilnya dipakai orang lain untuk mengambil keputusan, Anda pasti pernah kena halusinasi: model menjawab dengan sangat percaya diri, kalimatnya rapi, tapi isinya salah atau bahkan mengarang fakta yang tidak ada di sumber mana pun. Ini bukan bug yang bisa ditambal sekali lalu selesai. Halusinasi adalah konsekuensi langsung dari cara LLM bekerja — model memprediksi token yang paling mungkin secara statistik, bukan mencari kebenaran. Karena itu, mitigasinya bukan soal mencari prompt ajaib, tapi soal membangun sistem di sekeliling model yang membatasi ruang geraknya untuk mengarang.

Di bawah ini tiga teknik yang menurut saya paling berdampak dan paling praktis diterapkan, urutannya dari yang paling mendasar.

Grounding lewat retrieval

Cara paling efektif menekan halusinasi adalah tidak membiarkan model menjawab dari "ingatannya" sendiri. Alih-alih bertanya langsung ke model dan berharap jawabannya benar, kita cari dulu potongan data yang relevan dari sumber terpercaya — dokumentasi internal, basis pengetahuan, hasil query database — lalu sisipkan potongan itu ke dalam prompt sebagai konteks. Pola ini yang biasa disebut RAG (retrieval-augmented generation).

Prinsipnya sederhana: model jauh lebih andal saat tugasnya adalah merangkum atau menjawab berdasarkan teks yang ada di depannya, dibanding saat tugasnya mengingat fakta dari parameter internalnya. Secara kasar, alurnya begini:

1. Ubah pertanyaan user jadi query pencarian
2. Ambil beberapa dokumen/potongan paling relevan (embedding + vector search, atau full-text search biasa juga bisa)
3. Susun prompt: "Jawab HANYA berdasarkan konteks berikut. Jika tidak ada di konteks, katakan tidak tahu."
4. Sisipkan potongan dokumen sebagai konteks
5. Kirim ke LLM

Poin penting yang sering dilewatkan: instruksi eksplisit di langkah 3 itu wajib. Tanpa instruksi tegas untuk menolak menjawab kalau konteksnya tidak cukup, model tetap akan mengarang dari pengetahuan umumnya begitu retrieval gagal menemukan dokumen yang pas — dan itu justru lebih berbahaya karena terlihat seperti jawaban yang grounded padahal tidak.

Meminta sumber (citation)

Teknik kedua yang saya anggap murah tapi berdampak besar: minta model menyertakan rujukan ke sumber untuk tiap klaim yang dia buat, misalnya dengan menandai potongan konteks mana yang dipakai ("[dok-2]", nomor halaman, atau ID record). Ini punya dua manfaat sekaligus.

Pertama, secara praktis ini memudahkan manusia memverifikasi — pembaca tinggal cek sumber yang ditunjuk, tidak perlu percaya buta. Kedua, dan ini yang lebih menarik, meminta model untuk mengutip sumber cenderung membuat jawabannya sendiri lebih hati-hati, karena instruksi ini memaksa model "menempel" ke teks yang benar-benar ada di konteks, bukan menjawab bebas. Kalau model tidak bisa menunjuk sumber untuk sebuah klaim, itu sinyal kuat klaim tersebut kemungkinan hasil karangan.

Saya biasa membuat format output terstruktur agar sumber ini bisa dicek program, bukan cuma dibaca manusia — misalnya keluaran JSON dengan field terpisah untuk jawaban dan daftar id sumber yang dipakai. Dengan begitu validasi di langkah berikutnya bisa otomatis, bukan manual.

Validasi output sebelum dipercaya

Grounding dan citation mengurangi peluang halusinasi, tapi tidak menghilangkannya. Lapisan terakhir yang tidak boleh dilewati adalah validasi sebelum output benar-benar dipakai. Beberapa pola yang biasa saya pakai, tergantung seberapa kritikal keputusannya:

  • Validasi terhadap sumber: cek program apakah id/nomor yang dikutip model benar-benar ada di dokumen yang dikirim, dan apakah klaimnya cocok dengan isi dokumen tersebut, bukan sekadar terdengar masuk akal.
  • Validasi struktur/skema: kalau output diharapkan berupa data terstruktur (kode diagnosis, nilai numerik, format tanggal), validasi terhadap skema atau daftar nilai yang valid akan menangkap banyak kesalahan sebelum sampai ke pengguna.
  • LLM-as-judge: panggilan model kedua (bisa model yang sama atau lebih kecil) yang tugasnya khusus mengecek apakah jawaban pertama konsisten dengan konteks yang diberikan. Ini bukan solusi sempurna karena model kedua juga bisa keliru, tapi sebagai lapisan tambahan cukup efektif menangkap kasus yang jelas menyimpang.
  • Human-in-the-loop untuk keputusan berisiko tinggi: untuk domain yang konsekuensinya besar — misalnya rekomendasi klinis atau apa pun yang menyentuh keselamatan — output LLM sebaiknya diposisikan sebagai draft atau saran yang tetap direview manusia, bukan keputusan final otomatis.

Sebagai ilustrasi saja, bukan angka hasil pengukuran nyata: kombinasi retrieval yang baik plus validasi terhadap sumber biasanya menurunkan tingkat halusinasi jauh lebih signifikan dibanding hanya mengandalkan prompt engineering di model tanpa konteks eksternal sama sekali.

Takeaway

Halusinasi bukan masalah yang selesai dengan satu trik. Yang bekerja di praktik adalah kombinasi tiga lapisan: batasi model supaya menjawab dari konteks yang benar (retrieval), paksa model menunjuk sumbernya (citation), dan jangan percaya output mentah — validasi dulu sebelum dipakai, terutama untuk keputusan yang berisiko. Anggap LLM sebagai komponen dalam sistem, bukan oracle yang selalu benar, dan desain sistem di sekelilingnya sesuai itu.