Mengapa Agen Coding Bekerja dan Mengapa Gagal

Model yang sama. Model yang berhalusinasi di web chat itu, di Claude Code mampu mengunggah fitur 200 baris sekaligus. /goal di Codex menyelesaikan satu issue secara utuh. Bukan modelnya yang tiba-tiba menjadi lebih pintar. Yang berubah adalah strukturnya.

Mengapa Bekerja

Loop AI percakapan seperti ini:

LLM → manusia → LLM → manusia

Semua feedback berupa bahasa alami. Generasi probabilistik diikuti evaluasi probabilistik. Akurasi terdegradasi secara perkalian.

Loop coding agent berbeda:

LLM → generasi kode → simpan file → jalankan test → pass/fail → LLM
LLM → modifikasi kode → build → sukses/gagal → LLM
LLM → type check → pesan error → LLM

Di dalam loop terdapat gate deterministik. Filesystem menyimpan persis seperti yang ditulis. Test hasilnya pass atau fail. Compiler memberitahu jika salah. Secara tidak sengaja, mereka berperan sebagai ratchet.

LLM adalah unreliable component. Tetapi membangun reliable protocol di atas unreliable component adalah dasar rekayasa. TCP menciptakan reliable delivery di atas unreliable network. RAID menciptakan reliable storage di atas unreliable disk. ECC menciptakan reliable computation di atas unreliable memory.

Alasan coding agent bekerja sama persis. Karena deterministic verifier (test, build, linter, type checker) diletakkan di atas unreliable LLM. Bukan performa model, melainkan topology yang menjadi penyebab keberhasilan.

Tetapi Mengapa Runtuh

Dikatakan bekerja. Tetapi kadang runtuh. Mengapa?

Karena ratchet yang kebetulan ada dan ratchet yang dirancang secara sadar itu berbeda.

Ada Segmen Tanpa Ratchet

Ketika agent memodifikasi kode tanpa test? Build lolos, lint lolos, tetapi fungsionalitas rusak. Di segmen tanpa gate deterministik, LLM menilai secara probabilistik, dan penilaian probabilistik terdegradasi secara perkalian.

Dari 200 endpoint, 180 memiliki test dan 20 tidak. Agent menangani 180 dengan sempurna, dan diam-diam menanam bug di 20 sisanya. Itulah mengapa terjadi “hampir selesai tapi ada yang aneh.”

Kandungan Informasi Feedback Tidak Cukup

Sebuah eksperimen mengurutkan 1000 kata. CPU menyelesaikannya dalam 0,08ms dengan akurasi 100%. LLM membutuhkan 438 detik dengan 97,7%. Itu sendiri mengagumkan – 97,7% dengan kognisi murni. Namun penemuan sesungguhnya ada di tempat lain.

Untuk hasil yang sama, hanya level feedback yang divariasikan:

FeedbackHasil
Tidak ada6 error (99,4%)
“Ada error”10 error (99,0%) – memburuk
“Ada 23 error”1 error (99,9%)
“6 error, di sini”0 error (100%)

Jika hanya diberitahu “salah,” koreksi berlebihan justru memperburuk. Jika diberitahu jumlah error, target terbentuk dan pencarian menjadi gigih. Jika diberitahu juga lokasinya, perbaikan sempurna.

Sebagian besar agent saat ini berada di level kedua. Ketika test gagal, mereka tahu “ada yang salah,” tetapi tidak menyampaikan alasan struktural mengapa salah. Pesan error memang ada, tetapi itu adalah gejala, bukan penyebab.

Blind Spot Ada dan Tidak Terselesaikan dengan Pengulangan

Dalam eksperimen pengurutan, LLM meninggalkan 6 error di R2. Di R3 melaporkan “tidak ada error.” Di R4b juga melaporkan “tidak ada error.” Melewatkan 6 yang sama dengan cara yang sama.

Tanpa petunjuk, berapa kali pun diulang tetap konvergen di 99,4%. Ketika diberitahu “masih tersisa 6,” barulah mencapai 100%.

Hal yang sama terjadi pada coding agent. Agent membuat bug, menilai “tidak ada masalah” melalui self-review, dan ketika disuruh memperbaiki lagi, melewatkan tempat yang sama. Itulah mengapa retry bukan solusi. Blind spot adalah keterbatasan struktural yang berasal dari sifat probabilistik model, bukan kurangnya usaha.

Perkalian Bekerja pada Skala

Akurasi 97,7% yang di-chain dua kali menjadi 0,977^2 = 95,4%. Tiga kali menjadi 93,2%. Sepuluh kali menjadi 79,2%.

Agent bagus dalam memodifikasi satu file. Tetapi jika diminta refactoring yang mencakup 100 file? Meskipun setiap langkah 97%, setelah 100 langkah menjadi 0,97^100 = 4,8%. Kegagalan praktis terjamin.

Inilah penjelasan matematis dari “vibe coding runtuh di 200 endpoint.” Di proyek kecil, jumlah chaining sedikit sehingga probabilitas bertahan. Di proyek besar, perkalian bekerja secara destruktif.

Apa yang Diperlukan

Alasan bekerja dan alasan runtuh menunjuk ke tempat yang sama: ada atau tidaknya gate verifikasi deterministik.

Agent saat ini bergantung pada ratchet yang kebetulan ada (test, build, linter). Jika ini dirancang secara sadar, akan menjadi lebih kuat.

Merancang ratchet secara sadar berarti:

Pertama, identifikasi segmen tanpa ratchet. Kode tanpa test, API tanpa schema, data tanpa type. Setiap tempat di mana agent menilai secara probabilistik adalah titik rentan.

Kedua, tingkatkan kandungan informasi feedback. Jika hanya mengembalikan pass/fail, koreksi berlebihan terpicu. “Di mana, mengapa, dan apa yang berbeda dari ekspektasi” harus disampaikan secara terstruktur.

Ketiga, sisipkan gate deterministik di tengah chaining. Jika 10 langkah dijalankan sekaligus, perkalian menjadi destruktif. Tetapi jika setiap langkah dikunci dengan ratchet, degradasi di-reset.

LLM adalah generator yang menakjubkan. Mengurutkan 1000 kata dengan pemikiran murni hingga akurasi 97,7%. Bahkan manusia belum tentu bisa. Tetapi segala sesuatu yang bukan 100% akan runtuh jika diulang. 0,977 dikuadratkan menjadi 0,954.

Coding agent bekerja bukan karena modelnya pintar. Melainkan karena ada gate deterministik di dalam loop. Runtuh karena gate itu tidak ada.

Generasi boleh probabilistik. Verifikasi harus deterministik.


Artikel Terkait