Lima lapis sistem temu-balik melapor sukses. Jawaban hukum yang mereka hasilkan terdengar yakin, bisa dicek, dan salah.
FD Iskandar · Rekayasa integrasi dan otomasi AI
Ini audit satu pertanyaan terhadap korpus hukum pemerintah yang nyata. Pipa proses yang saya bedah bukan boneka jerami: ia menyaring status, menjalankan pencarian vektor, mengutip apa adanya, dan mencantumkan sumbernya. Semua tahap melapor sukses. Jawaban yang keluar merujuk pasal nyata, dari peraturan nyata, yang memang masih berlaku. Pasal yang ia kutip lenyap dari hukum setahun lalu.
Tiap klaim di bawah ini bisa diulang siapa saja dengan perintah di lampiran, memakai dokumen yang siapa pun boleh unduh. Korpusnya peraturan pengupahan Indonesia. Pola kegagalannya struktural, dan tidak terikat pada korpus itu.
Dua puluh menit sesudah mulai mengumpulkan bahan untuk tulisan ini, saya menjalankan
satu ekspresi reguler pada sebuah PDF hasil unduhan, sekadar untuk menebak peraturan apa
isinya. Skripnya menjawab UU 25/1992. Ia menjawab tanpa ragu sedikit pun,
sebab ekspresi reguler memang tidak mengenal ragu.
Dokumen itu PP 7/2021. Yang tertangkap pola saya adalah peraturan yang
tercantum di bagian menimbang: pembuka tempat sebuah peraturan menyebut dasar
hukum yang lebih tua. Semua dokumen hukum di korpus ini membuka dirinya dengan menyebut
dokumen hukum lain. Pengekstrak yang mencari untaian mirip-kutipan di dekat awal berkas
akan langsung menemukan satu, dan yang ia temukan biasanya keliru.
Saya membuka dengan cerita ini karena seluruh isi tulisan ini sudah ada di dalamnya. Kegagalannya tidak acak. Ia bukan halusinasi. Ia program benar, yang mengerjakan persis apa yang saya perintahkan, di atas dokumen yang strukturnya membuat perilaku benar itu jadi salah. Menguji dengan masukan yang rapi tidak akan pernah menangkapnya, sebab masukannya memang rapi. Ia cuma tidak berarti seperti yang program saya kira.
Kegagalan yang mahal pada sistem temu-balik bukan yang tampak seperti galat. Ia yang tampak seperti jawaban.
Andai seseorang harus memilih satu ranah untuk membuktikan bahwa retrieval bekerja, ia akan memilih yang ini. Korpus hukum adalah data paling ramah yang akan pernah dihadapi sebuah sistem temu-balik. Dokumennya otoritatif; teks resminya cuma satu. Ia stabil; sebuah peraturan tidak berubah antara Selasa dan Rabu. Ia terstruktur, bernomor sampai ke ayat. Ia terbuka, terbit di alamat permanen milik pemerintah sendiri.
Metadatanya bahkan seolah sudah menuntaskan bagian tersulit untuk kita. Basis data
hukum pemerintah mencetak status pada tiap dokumen: Berlaku atau
Tidak Berlaku. Saring di kolom itu, urusan kebasian beres.
Pertanyaan yang saya pakai sepanjang tulisan ini sengaja sempit dan faktual: bagaimana cara menghitung penyesuaian upah minimum tahunan? Jawabannya tunggal, berbentuk rumus, di satu pasal dari satu peraturan. Penyedia payroll, employer of record, dan perkakas kepatuhan sama-sama memerlukannya. Inilah kasus termudah itu.
Peraturan yang mengatur pengupahan adalah PP 36/2021. Entri basis
datanya berbunyi Berlaku. Itu benar.
Halaman yang sama mencatat dua perubahan atasnya: PP 51/2023 dan
PP 49/2025. Keduanya juga berlaku. Tidak ada yang bertentangan, tidak ada
yang usang.
Perhatikan apa yang sebenarnya kolom status itu sampaikan. Ia menyatakan dokumennya belum pernah dicabut. Ia tidak menyatakan apakah pasal yang hendak Anda kutip masih teks yang berlaku. Sebuah peraturan berlaku sebagai satu kesatuan, sementara pasal demi pasal di dalamnya berganti, bernomor ulang, atau lenyap karena instrumen yang lebih baru.
Status melekat pada dokumen. Keberlakuan melekat pada pasal. Tidak ada kolom status di basis data hukum mana pun yang menjawab pertanyaan yang sesungguhnya diajukan sistem temu-balik.
Ada persoalan kedua yang lebih halus. Pada peraturan lain di basis data yang sama, saya pernah menemukan kolom ini menyatakan sebuah instrumen berlaku padahal pencabutnya sudah terbit. Di sini kolomnya benar. Ketidakkonsistenan semacam itu lebih berbahaya ketimbang salah secara konsisten: pemeriksaan sekilas menemukan kolomnya bekerja, menyimpulkan ia layak percaya, lalu satu kasus yang menentukan lolos begitu saja. Kolom yang benar hampir sepanjang waktu melatih orang berhenti memeriksanya.
Pipa proses mengunduh PP 36/2021 lalu mengekstrak teksnya. Ekstraksi
berhasil dan mengembalikan 3.045 karakter. Tahap itu mencatat sukses, lalu meneruskan
dokumennya ke hilir.
Dokumen itu setebal 75 halaman. Teks cuma ada di dua di antaranya.
| Dokumen | Halaman | Halaman berteks | Cakupan |
|---|---|---|---|
| PP 36/2021 (induk, berlaku) | 75 | 2 | 3% |
| PP 51/2023 (perubahan pertama) | 27 | 27 | 100% |
| PP 49/2025 (perubahan kedua) | 22 | 22 | 100% |
| PP 78/2015 (pendahulu, sudah dicabut) | 49 | 49 | 100% |
Halaman 2 sampai 56 memuat pasal-pasalnya, seluruh isi hukum itu. Semuanya citra pindaian. Begitu pula lampirannya. Dua halaman yang membawa teks adalah halaman 1 dan halaman 57: sampul, dan halaman tanda tangan.
Yang mendarat di indeks adalah dokumen tanpa satu pun bunyi hukum di dalamnya. Dan teks yang paling menonjol di sana justru bagian menimbang, yang menyebut tiga peraturan lain. Kegagalan di bagian 01 bukan pengandaian. Ia sedang duduk di dalam indeks, menempel pada dokumen terpenting di seluruh korpus.
Kegagalan ini tidak bersuara. Ia mengembalikan 3.045 karakter, jadi tiap pemeriksaan yang berbentuk "apakah ekstraksi berhasil?" menjawab ya. Uji dangkal atas keberadaan lapisan teks juga menjawab ya, sebab halaman 1 dan halaman 57 membawa tujuh fonta yang berkas itu laporkan. Kedua sinyal itu benar. Keduanya tidak berguna.
Pemeriksaan cakupan akan menangkapnya seketika: 75 halaman masuk, 2 halaman teks keluar. Hampir tidak ada yang menulis pemeriksaan itu, sebab ia baru berguna untuk dokumen yang sudah rusak, dan orang tidak tahu dokumen mana yang rusak sebelum menulis pemeriksaannya.
Pencarian vektor kini berjalan di atas rantai itu. Tiga dari empat dokumen terbaca
penuh; induknya praktis kosong. Temu-balik mengembalikan padanan terbaiknya:
PP 51/2023, Pasal 26A, yang memuat rumus penyesuaian upah lengkap dengan
koefisien serta batas atas dan bawahnya. Sebagai padanan atas pertanyaan tadi, ia memang
sangat baik.
Ia menang bukan karena paling mutakhir, melainkan karena satu-satunya dokumen di rantai itu yang bisa dibaca. Kemiripan embedding tidak mengenal kebaruan hukum. Pasal yang sudah lenyap dan pasal yang masih hidup sama-sama bisa terpanggil bila keduanya ada di indeks, dan yang sudah lenyap selalu menang setiap kali teks yang berlaku berwujud foto.
PP 49/2025, angka 8, selengkapnya:
8. Pasal 26A dihapus.
Tiga kata. Bukan diubah, bukan berganti versi baru. Dicoret. Pasal yang hendak dikutip sistem tadi tidak ada di hukum yang berlaku hari ini.
Enam pasal di rantai ini mengalami perubahan dua kali: Pasal 5, 26A, 28, 34, 34A, dan 35. Sistem yang melangkah satu jengkal dari induk ke perubahan pertama sudah bekerja lebih keras ketimbang kebanyakan sistem temu-balik, dan ia tetap salah untuk keenamnya. Penelusuran rantai harus berjalan sampai titik tetap, berhenti hanya ketika tidak ada lagi yang mengubah si pengubah. Kurang dari itu cuma pertunjukan.
Dokumen sisanya memang punya teks, tapi teks itu lahir dari pengenalan karakter optis, dan galatnya sistematis, bukan acak.
| Di lapisan teks | Yang sebenarnya |
|---|---|
| Pasal 268 | Pasal 26B |
| Pasal 7l | Pasal 71 |
| ayat (21 | ayat (2) |
Di satu dokumen, Pasal 7l dan Pasal 71 sama-sama muncul dua
kali. Itu satu pasal, terbelah jadi dua entitas, tanpa satu pun sinyal bahwa ada yang
keliru. Penggabungan tabel yang mengandalkan kecocokan persis nomor pasal akan kehilangan
separuh barisnya tanpa bersuara.
Ia sampai juga ke jawabannya. Rumus penyesuaian upah, sebagaimana ia hidup di teks hasil ekstraksi:
Nilai Penyesuaian UMlt+l) : PE x o x UMttt
Huruf Yunani alfa berubah jadi huruf o. Tanda kurung berubah jadi angka. Terkutip apa adanya, yang justru merupakan perilaku sopan sebuah sistem yang menjaga keutuhan kutipan, rumus itu bukan sekadar kurang tepat. Ia bukan matematika.
Rangkai satu putaran penuh. Satu pertanyaan, lima tahap, lima sukses:
| Tahap | Melapor | Yang sebenarnya |
|---|---|---|
| Saringan status | lolos | Benar dan tak berguna; status melekat pada dokumen |
| Ekstraksi teks | lolos | 3.045 karakter dari 75 halaman; nol pasal |
| Pencarian vektor | lolos | Mengurutkan satu-satunya yang terbaca, bukan yang berlaku |
| Uji kebaruan | lolos | Pasal yang ia rujuk lenyap pada 2025 |
| Kesetiaan kutipan | lolos | OCR merusak rumus yang sedang ia kutip |
Keluarannya adalah jawaban yang merujuk pasal nyata, dari peraturan nyata, yang memang berlaku, terkutip apa adanya dari PDF resmi, lengkap dengan pranala hidup ke basis data pemerintah sendiri. Ia akan lolos telaah seorang insinyur yang cakap. Ia akan lolos telaah seorang ahli hukum yang memastikan peraturannya masih berlaku. Ia hanya gugur di tangan orang yang membaca perubahan kedua baris demi baris.
Tidak ada pengecualian yang terlempar. Tidak ada skor keyakinan yang turun. Tidak ada apa pun untuk dijadikan alarm, sebab dari dalam, tiap komponen mengerjakan tugasnya dengan benar.
Tidak ada satu pun di atas yang melibatkan model bahasa berkelakuan buruk. Tidak ada halusinasi di sini. Tiap fakta di dalam jawaban yang salah itu berpangkal pada dokumen nyata, dan modelnya setia pada sumber yang orang berikan kepadanya. Ia menerima pandangan yang sudah rusak atas korpus, lalu melaporkannya dengan akurat.
Artinya obat yang biasa orang resepkan tidak berlaku. Model yang lebih besar tidak menyembuhkannya: ia membaca 3.045 karakter yang sama. Suhu yang lebih rendah juga tidak, sebab kegagalannya bukan stokastik, dan jawaban salah yang sama kembali setiap kali. Susunan perintah yang lebih cermat tidak menyembuhkannya, sebab model tidak bisa meminta teks yang tidak pernah terekstrak. Kutipan tidak menyembuhkannya, sebab kutipannya nyata dan pranalanya hidup. Telaah manusia pun tidak, kecuali penelaahnya menyusuri sendiri rantai perubahan itu, yaitu justru pekerjaan yang sistem ini dibeli untuk menghapusnya.
Begitu sistem temu-balik keliru tentang sumbernya sendiri, semua kendali di hilir sedang mengukur hal yang salah.
Ini cacat penyerapan dokumen dan asal-usul. Keduanya harus tertangkap di titik dokumen masuk, dan yang menegakkannya harus sesuatu yang sanggup menolak.
Bukan model yang lebih pintar. Serangkaian syarat yang wajib terpenuhi sebelum sebuah jawaban boleh keluar, dan tiap syarat itu gagal-tertutup:
Yang kelima itu yang paling sering orang coret. Penolakan terlihat seperti kegagalan di semua papan pantau, berskor buruk terhadap metrik tingkat-jawab, dan mengecewakan pengguna dalam jangka pendek. Ia juga satu-satunya kendali yang masih bekerja ketika keempat sisanya belum pasti, dan belum pasti adalah keadaan normal tiap korpus nyata. Saya percaya kendali kelima inilah yang memisahkan sistem yang bisa dipakai dari sistem yang cuma bisa dipamerkan.
Yang diperagakan demo adalah sistem yang berbuat persis begitu: menolak menjawab pertanyaan yang tidak bisa ia sumberkan, sambil memperlihatkan kerjanya. Rantai yang ia telusuri, pasal yang ia temukan sudah lenyap, dokumen yang tidak sanggup ia baca. Keluaran semacam itu lebih berguna ketimbang sebuah rumus, sebab ia bisa ditindaklanjuti dan ia benar.
Semua di atas berasal dari dokumen publik. Tanpa kredensial, tanpa mengeruk apa pun di balik gerbang masuk, tanpa data pribadi.
# rantai perubahan, ditelusuri dari sumber hidupnya curl -s "https://peraturan.bpk.go.id/Details/161909/pp-no-36-tahun-2021" \ | grep -oE 'href="/Details/[0-9]+/[a-z0-9-]+"' | sort -u # peraturan induk: 75 halaman, teks cuma di 2 di antaranya curl -sL -o pp36.pdf "https://peraturan.bpk.go.id/Download/154587" pdfinfo pp36.pdf | grep Pages pdftotext -layout pp36.pdf - | tr -d '[:space:]' | wc -c # halaman 5 nihil teks dan berisi satu citra; ia foto sebuah halaman pdftotext -f 5 -l 5 pp36.pdf - pdfimages -list -f 5 -l 5 pp36.pdf # satu pasal, dua token, sebab OCR membaca angka 1 sebagai huruf l curl -sL -o pp51.pdf "https://peraturan.bpk.go.id/Download/328142" pdftotext -layout pp51.pdf - | grep -c 'Pasal 7l' pdftotext -layout pp51.pdf - | grep -c 'Pasal 71' # penghapusannya curl -sL -o pp49.pdf "https://peraturan.bpk.go.id/Download/402111" pdftotext -layout pp49.pdf - | grep -A1 'Pasal 26A dihapus'
Satu hal yang layak Anda amati sambil menjalankan perintah di atas. Tiap unduhan
tersaji sebagai application/octet-stream, apa pun isi aslinya. Di rentang
nomor yang sama saya menemukan satu pengenal yang mengembalikan arsip ZIP dari URL yang
berakhiran .pdf. Sistem yang percaya pada jenis konten tidak belajar apa pun;
sistem yang percaya pada akhiran nama berkas menyuapkan arsip ke pengurai PDF. Tidak ada
satu pun dari keduanya yang mendapat kabar bahwa ia keliru.