Penguji Adversarial Menolak Separuh Tulisan AI Medis Saya

Beberapa minggu terakhir saya coba tambahkan satu fitur baru di luar inti medcoder: bukan lagi soal usul kode diagnosis, tapi menulis materi edukasi medis untuk pembaca awam — penjelasan klinis yang enak dibaca. Prosesnya pakai satu agen AI untuk menulis draf. Tapi yang menarik justru bagian sesudahnya: saya bikin agen AI kedua yang terpisah sepenuhnya dari agen penulis, dan tugasnya bukan menyetujui atau mengonfirmasi tulisan itu — tugasnya secara eksplisit mencari cacat.

Saya sebut ini "penguji adversarial". Bedanya dengan reviewer biasa: reviewer biasa sering condong ke arah "ya, ini kelihatan oke", karena secara implisit tugasnya mengonfirmasi. Penguji adversarial saya desain berlawanan kepentingan dari penulisnya — dia dapat instruksi untuk mencari alasan menolak, bukan alasan meloloskan. Kalau tidak ketemu cacat, baru lolos.

Angka yang bikin saya kaget: separuh ditolak

Setelah empat gelombang pengujian berturut-turut, tingkat penolakan konsisten di angka 48-50%. Hampir separuh dari materi yang ditulis agen penulis ditolak oleh agen penguji. Awalnya saya pikir ini tanda ada yang salah dengan salah satu agennya — terlalu galak atau terlalu longgar. Tapi setelah saya baca satu per satu alasan penolakannya, saya berubah pikiran.

Yang tertangkap bukan soal gaya tulisan atau tata bahasa sama sekali. Beberapa contoh nyata: kesalahan dosis obat yang tidak sesuai dengan indikasi kliniknya, jendela waktu terapi untuk kasus stroke yang terlewat disebutkan — padahal ini krusial secara medis — dan kontradiksi dalam penjelasan elektrofisiologi jantung yang kalau dibaca sekilas kedengaran meyakinkan, tapi sebenarnya saling bertentangan secara klinis.

Yang paling menarik buat saya: beberapa tulisan melanggar aturan yang sudah ada, tertulis di dalam kode proyek ini sendiri — aturan koding/klinis yang sudah didokumentasikan sebelumnya. Tapi agen penulisnya tidak "tahu" aturan itu, atau tidak mengeceknya saat menulis draf. Jadi bukan cuma soal fakta medis eksternal yang salah, tapi juga konsistensi dengan keputusan yang sudah saya buat sendiri di proyek ini.

Kenapa ini penting: yang lolos begitu saja tidak kelihatan salah

Kalau materi-materi yang salah ini lolos tanpa lapisan penguji adversarial, dampaknya bukan cuma statistik. Materi itu akan mengajarkan hal yang keliru secara medis ke setiap pengguna yang membacanya, tanpa ada yang curiga sama sekali — karena keluarannya tetap terbaca wajar, rapi, dan meyakinkan secara bahasa. Ini yang bikin saya insaf bahwa untuk konten berisiko tinggi seperti kesehatan, satu lapis "agen menulis, agen lain menyetujui" itu tidak cukup. Reviewer yang tugasnya mengonfirmasi cenderung ikut arus kefasihan bahasa si penulis.

Temuan bonus: diminta umum, tetap saja spesifik

Ada satu pola kegagalan yang saya temukan berulang di proses pengujian ini, dan uniknya muncul di dua konteks yang sama sekali tidak berhubungan. Ketika agen AI diminta secara eksplisit menulis contoh untuk kategori "tidak spesifik/umum", agen itu berkali-kali tetap menuliskan detail-detail yang sangat spesifik — sampai akhirnya contoh yang dihasilkan malah lebih cocok masuk kategori lain yang lebih spesifik daripada kategori umum yang diminta.

Yang bikin saya berhenti sejenak: pola kegagalan yang persis sama ini juga saya lihat di medcoder, pada tugas coding diagnosis yang sama sekali tidak berhubungan dengan penulisan materi edukasi. Model diminta bersikap umum, tidak menyebut detail spesifik — tapi tetap saja mengisi detail spesifik. Dua model AI berbeda, dua tugas berbeda total, gejala yang sama. Ini bikin saya curiga ini bukan bug satu model, tapi kecenderungan yang lebih umum pada cara model bahasa menangani instruksi "jangan spesifik".

Yang saya bawa pulang

Tingkat penolakan sekitar separuh itu, setelah saya renungkan, justru tanda proses ini bekerja sebagaimana mestinya — bukan tanda ada yang salah dengan prosesnya. Kalau penguji saya desain untuk cari alasan menolak, wajar kalau dia menolak banyak. Yang jadi ukuran keberhasilan bukan angka penolakannya rendah, tapi apakah yang lolos benar-benar sudah diperiksa dengan niat mencari cacat, bukan niat meloloskan. Proyek ini masih berjalan, dan lapisan penguji adversarial ini baru satu bagian dari yang saya coba perbaiki.