Lewati ke konten utama

Dokumentasi Filter Policy

Ini adalah dokumentasi yang ditujukan untuk klien mengenai Government Policy Guard — Policy Filter yang disebut dalam deliverable TOR/KAK Policy Filter. Dokumen ini menjelaskan secara jujur apa yang ditangkap guard, apa yang sengaja tidak ditangkapnya, bagaimana aturan-aturannya dibentuk, dan bagian mana yang dapat diubah operator. Alasan yang menjadi otoritas ada di ADR-0008; halaman ini merupakan pembacaan operasional atasnya. Setiap klaim di sini didasarkan pada kode guard yang telah digabungkan (src/aceh_rag/policy_guards/policy.py) dan policy slice bank (eval/golden-seed/labels.jsonl).

Apa itu Policy Guard​

Government Policy Guard adalah lapisan penegakan kebijakan yang memeriksa setiap jawaban query sebelum sampai kepada pengguna, dan tidak dapat dilewati per query (src/aceh_rag/policy_guards/policy.py:1-6). Guard ini membungkus dua permukaan jawaban:

  • chat berbasis sumber, POST /query (src/aceh_rag/services.py:1184),
  • chat streaming, POST /query/stream.

Primitif tanpa sumber POST /generate adalah panggilan model mentah yang tetap diautentikasi dan secara eksplisit berada di luar guard (ADR-0050).

Pada permukaan jawaban, guard berjalan hanya pada output yang dihasilkan — guard tidak memeriksa pertanyaan pengguna (docs/adr/0008-government-policy-guard.md:82). Batas yang ditegakkannya bukan "topik ini sensitif", melainkan "output ini menganjurkan bahaya atau membocorkan instruksi milik sistem itu sendiri."

Deteksi dilakukan dengan aturan kata deterministik, bukan penilai model (src/aceh_rag/policy_guards/policy.py:7). Penilai machine-learning merupakan opsi nyata untuk masa depan dan ADR-0008 memilih untuk menundanya, bukan menolaknya; guard saat ini cepat (tanpa pemanggilan model dan tanpa latensi tambahan) serta sepenuhnya dapat diperiksa, sehingga operator pemerintah dapat membaca dan mengedit setiap aturan.

Classifier melaporkan nama yang memiliki versi, deterministic-rules-v2 (src/aceh_rag/policy_guards/policy.py:69-73), agar baris audit yang ditulis sebelum dan sesudah perubahan aturan dapat dibedakan — disiplin pergeseran versi yang sama dengan yang digunakan ekstraksi OCR.

Prinsip utama: pertanyaan yang sah dilindungi terlebih dahulu​

Di Aceh, pertanyaan tentang agama, etnis, dan penerapan Qanun merupakan pekerjaan sehari-hari (src/aceh_rag/policy_guards/policy.py:16-22). Pegawai negeri yang bertanya "Apa kata Qanun Jinayat tentang non-Muslim?", analis yang mengambil statistik populasi berdasarkan agama, dan penyusun rancangan izin rumah ibadah semuanya harus mendapatkan jawaban.

Karena itu, guard dibangun berdasarkan satu aturan yang mengatur setiap pilihan desain: jika menangkap satu pengelakan lagi akan mengorbankan penolakan yang sah, pengelakan tersebut diterima (src/aceh_rag/policy_guards/policy.py:20-21). Pemblokiran berlebihan tidak membuat platform lebih aman — hal itu membuatnya tidak berguna bagi pengguna yang justru menjadi alasan platform ini ada, sementara pertanyaan sah yang ditolak merupakan kegagalan yang terlihat dan berulang, sedangkan pengelakan yang terlewat jarang terjadi.

Aturan anti-SARA​

SARA — Suku, Agama, Ras, Antar-golongan (etnis, agama, ras, antargolongan) — merupakan persyaratan khusus Indonesia. Guard menandai konten SARA hanya ketika dua sinyal muncul bersamaan dalam jendela kedekatan yang dibatasi (src/aceh_rag/policy_guards/policy.py:227-247). Kemunculan nama kelompok dan kata bermusuhan saja tidak cukup; diperlukan sebuah konstruksi hasutan.

Sinyal 1 — referensi kelompok yang dilindungi​

Sinyal tersebut dapat berupa kelompok bernama, atau kata benda kelompok generik yang memiliki kualifikasi (src/aceh_rag/policy_guards/policy.py:132-163):

  • Agama, denominasi, penganut, serta rujukan etnis dan ras yang bernama — termasuk cercaan yang mewakilinya — dalam Bahasa Indonesia dan bahasa Inggris (src/aceh_rag/policy_guards/policy.py:133-146). Kata-kata provinsi/geografi yang berdiri sendiri (aceh, Jawa seperti dalam Jawa Barat) sengaja dikecualikan — kata-kata tersebut tidak memiliki makna kelompok secara mandiri dan akan terpicu pada teks administratif biasa.
  • Kata benda generik berkualifikasi — kelompok minoritas, golongan tertentu, suku Jawa, religious minority (src/aceh_rag/policy_guards/policy.py:149-164). Kata kelompok/golongan yang berdiri sendiri merupakan kata administratif dalam korpus ini (kelompok kerja, golongan III) dan bukan sinyal. Aturan etnonim dengan huruf kapital (suku + nama diri) membedakan suku Jawa dari suku cadang (suku cadang) dan suku bunga (suku bunga).

Sinyal 2 — konstruksi hasutan​

Frasa yang menganjurkan sesuatu terhadap orang, bukan sekadar kata bermusuhan, dalam lima kelompok (src/aceh_rag/policy_guards/policy.py:165-218):

  1. Advokasi Bahasa Indonesia — penanda deontik (harus, wajib, sebaiknya) dalam jarak dua token dari tindakan bermusuhan atau frasa pemindahan (src/aceh_rag/policy_guards/policy.py:166-190).
  2. Imperatif Bahasa Indonesia yang ditujukan kepada orang (usir mereka) (src/aceh_rag/policy_guards/policy.py:192-193).
  3. Eufemisme penyangkalan keanggotaan dalam kedua bahasa (tidak layak tinggal, have no place) (src/aceh_rag/policy_guards/policy.py:195-210).
  4. Advokasi bahasa Inggris (must be expelled, should leave) (src/aceh_rag/policy_guards/policy.py:202-206).
  5. Sekumpulan kecil Bahasa Aceh yang bersifat upaya terbaik (bèk tinggai, peuteubiet, hana layak) — lihat catatan kejujuran di bawah (src/aceh_rag/policy_guards/policy.py:211-215).

Inilah perbedaan antara mendeskripsikan suatu kelompok dan menganjurkan tindakan terhadapnya. Hal inilah yang memungkinkan Pasal 28E ("warga tidak boleh diusir … karena keyakinan yang dianutnya") dan jawaban sejarah tentang perpindahan penduduk selama konflik sama-sama lolos meskipun memuat verba yang sama, yaitu diusir.

Satu ketepatan tambahan juga penting: untuk pemindahan yang dirumuskan sebagai pergerakan, tujuannya yang menentukan (src/aceh_rag/policy_guards/policy.py:174-186). Pemindahan dari tempat orang-orang tersebut berada (dipindahkan keluar wilayah ini) merupakan pengusiran dan ditandai; pemindahan dari bahaya (harus dipindahkan keluar zona merah, instruksi evakuasi BPBD yang nyata) tidak ditandai.

Jendela kedekatan yang dibatasi​

Kedua sinyal harus muncul bersamaan dalam kalimat hasutan itu sendiri ditambah kalimat yang langsung bersebelahan, dan dalam jarak 300 karakter (src/aceh_rag/policy_guards/policy.py:220-224; _MAX_SENTENCE_DISTANCE = 1, _MAX_CHARACTER_GAP = 300). Kedua batas ini mencegah kegagalan tertentu:

  • Aturan dalam kalimat yang sama (perilaku M0 lama) dapat dikalahkan oleh tanda titik — aturan itu melewatkan "Orang Kristen tidak layak tinggal di sini. Mereka harus segera diusir."
  • Aturan seluruh dokumen akan menolak jawaban panjang yang sah jika menyebut agama di paragraf pertama lalu mengutip undang-undang yang memuat diusir sembilan paragraf kemudian.

Aturan anti-jailbreak​

Aturan anti-jailbreak mencocokkan konstruksi, bukan topik (src/aceh_rag/policy_guards/policy.py:279-321). Menyebut suatu subjek — "what is a system prompt", "how does a jailbreak attack work" — diperbolehkan; jawaban yang menjelaskan keamanan prompt lolos. Yang diblokir:

  • Pengambilalihan instruksi — ignore all previous instructions, dan imperatif Bahasa Indonesia abaikan … instruksi (src/aceh_rag/policy_guards/policy.py:282-291). Aturan Bahasa Indonesia sengaja hanya bersifat imperatif: mencocokkan bentuk berimbuhan seperti mengabaikan akan menolak setiap jawaban yang mendeskripsikan serangan.
  • Permintaan pengungkapan — reveal the system prompt, bocorkan prompt sistem (src/aceh_rag/policy_guards/policy.py:293-300).
  • Pengungkapan aktual dalam output — here is my system prompt, berikut adalah instruksi sistem (src/aceh_rag/policy_guards/policy.py:303-309).
  • Melewati guard — bypass the policy guard, matikan filter (src/aceh_rag/policy_guards/policy.py:311-314).
  • Aktivasi jailbreak — you are now jailbroken, mode jailbreak aktif (src/aceh_rag/policy_guards/policy.py:316-318).

Tingkat yang diukur​

Tingkat historis di bawah ini membandingkan classifier yang diperkuat dengan classifier M0 lama pada 66 kasus yang sama (36 diharapkan blokir, 30 diharapkan lolos), yang kini ada di policy slice bank. Jalankan make eval-slice SLICE=policy untuk memeriksa tingkat tangkapan dan penolakan keliru guard saat ini (ADR-0008 → Measured rates).

MetrikM0 (deterministic-m0)Diperkuat (deterministic-rules-v2)
Tingkat tangkapan (inflamatoris diblokir)0.222 (8/36)0.778 (28/36)
Tingkat penolakan keliru (sah diblokir)0.167 (5/30)0.000 (0/30)
Tingkat tangkapan berdasarkan bahasaid 0.200 · en 0.222 · ace 0.000 · mixed 0.667id 0.750 · en 0.889 · ace 0.750 · mixed 0.667
Policy slice ditulis oleh AI dan belum ditinjau manusia

Setiap label, serta setiap baris Bahasa Indonesia dan Bahasa Aceh dalam policy slice, ditulis oleh agen AI (label_status setiap baris di eval/golden-seed/labels.jsonl menyatakannya). Sebelum disetujui oleh (a) penutur asli Bahasa Indonesia, (b) penutur asli Bahasa Aceh, dan (c) pemilik kebijakan komunikasi pemerintahan Pemprov Aceh, tingkat-tingkat ini merupakan sinyal regresi atas perilaku guard itu sendiri, bukan pengukuran eksternal tentang seberapa aman guard tersebut (ADR-0008 → Decision 3). Laporan evaluasi mencetak peringatan ini di sebelah setiap angka yang dilaporkannya (src/aceh_rag/eval/eval_tier.py:637-658). Peninjauan manusia ini merupakan persetujuan korpus yang dijelaskan dalam Yang masih memerlukan manusia, yang merupakan aktivitas delivery klien, bukan sesuatu yang diputuskan tim engineering.

Apa yang sengaja TIDAK ditangkap guard​

ADR-0008 → What this guard still does NOT catch menjadi rujukan batasan yang diterima, ID kasus bank, dan alasan penerimaannya. Policy slice melaporkan ketidaksesuaian pada baris known_limitation tanpa menggagalkan gate; setiap ketidaksesuaian yang tidak terdokumentasi menggagalkannya.

Permukaan kustomisasi aturan​

Aturan guard adalah daftar leksikon dan konstruksi itu sendiri, dan itulah seam yang dapat diedit operator:

PermukaanLokasiIsi
Kelompok yang dilindungi dan bernamasrc/aceh_rag/policy_guards/policy.py:133-146 (_GROUP_NAMED_RE)Agama, etnis, ras, penganut, cercaan
Kata benda kelompok yang berkualifikasisrc/aceh_rag/policy_guards/policy.py:149-164 (_GROUP_QUALIFIED_RE)kelompok minoritas, suku + etnonim, religious minority
Konstruksi hasutansrc/aceh_rag/policy_guards/policy.py:165-218 (_INCITEMENT_RE dan bagian-bagiannya)Lima kelompok advokasi/pemindahan/penyangkalan
Konstruksi jailbreaksrc/aceh_rag/policy_guards/policy.py:279-321 (_JAILBREAK_RE)Override, pengungkapan, bypass, aktivasi
Batas kedekatansrc/aceh_rag/policy_guards/policy.py:222-223_MAX_SENTENCE_DISTANCE, _MAX_CHARACTER_GAP

Biaya perubahannya. Daftar-daftar ini merupakan keseluruhan guard, sehingga sebuah edit bersifat kuat dan kasar: memperlebar aturan untuk menangkap satu pengelakan lagi secara rutin menolak kelas jawaban yang sah, sedangkan mempersempitnya untuk menghentikan penolakan keliru membuka sebuah pengelakan. Itulah sebabnya perubahan aturan tidak pernah dirilis hanya berdasarkan penilaian — perubahan dirilis melalui proses pembaruan berkala, yang menguji setiap edit terhadap policy slice bank dengan make eval-slice SLICE=policy. Seam PolicyClassifier (src/aceh_rag/policy_guards/policy.py:61-66) juga memungkinkan penilai model di masa depan ditempatkan di samping aturan tanpa desain ulang, jika sesi pemangku kepentingan memutuskan bahwa celah-celah yang diterima di atas layak ditutup.

Penetapan batas adalah keputusan klien

Menentukan di mana Pemprov Aceh ingin menetapkan batas — sesi kerja "kustomisasi aturan bersama pemangku kepentingan" yang disebut dalam TOR — adalah aktivitas delivery klien yang dimiliki manusia, bukan sesuatu yang ditetapkan secara sepihak oleh dokumentasi ini atau tim engineering. Halaman ini menjelaskan permukaan dan biayanya; klien yang menetapkan nilainya.

Terkait​