Pencarian dan Penjawaban
Pencarian menggabungkan pencarian vektor semantik dengan pencarian kata kunci leksikal, memadukan kedua pemeringkatan dengan RRF, melakukan pemeringkatan ulang pada kandidat, lalu meneruskan chunk yang memiliki sitasi ke sintesis. Pencarian yang hanya mengandalkan semantik sengaja tidak digunakan karena dokumen hukum dan administrasi pemerintah bergantung pada nomor undang-undang yang tepat, entitas bernama, dan istilah resmi.
Halaman ini menjelaskan arsitektur pencarian dan pembuatan jawaban. Untuk field request /search, /query, dan /query/stream yang tepat, body response, bentuk sitasi, perilaku status/error, urutan event SSE, perintah curl, dan contoh TypeScript, gunakan Referensi API Query dan Search.
Alur pencarian
Model sitasi
Setiap chunk hasil pencarian membawa metadata sitasi: identitas dokumen, judul dokumen, identitas dan ordinal chunk, nomor halaman, jalur bagian, referensi hukum, dan rentang karakter. Halaman arsitektur ini hanya menyebutkan model provenance; objek sitasi lengkap dan field kontrol akses kondisional didefinisikan dalam Referensi API Query dan Search.
Gerbang kesesuaian
Synthesizer memeriksa apakah setiap klaim yang dihasilkan didukung oleh chunk yang disitasi. Klaim yang tidak didukung dihapus, atau sistem mengembalikan jawaban fallback yang menyatakan bahwa sistem tidak dapat memverifikasi jawaban yang sesuai dari sumber hasil pencarian.
Pemeriksaan dukungan memperhatikan angka, bukan hanya tumpang tindih kata. Nilai angka, mata uang, persentase, atau rasio yang sama dan telah dinormalisasi antara klaim dan chunk yang disitasi dapat menjadi dasar jawaban angka yang singkat dan lintas bahasa, misalnya jawaban berbahasa Inggris atas chunk berbahasa Indonesia, yang akan ditolak oleh pemeriksaan tumpang tindih kata karena angka sering kali menjadi satu-satunya token yang sama di antara kedua bahasa. Nilai dinormalisasi menurut konvensi pengelompokan digit Bahasa Indonesia dan Bahasa Inggris sebelum perbandingan, dan angka yang diperkenalkan oleh kata kunci struktural (Pasal, Nomor, Tahun, ayat, Lampiran) diperlakukan sebagai referensi klausul/undang-undang, bukan kuantitas yang dapat menjadi dasar, sehingga 2 saja tidak pernah menjadi dasar untuk Pasal 2. Rasio hanya menjadi dasar dalam orientasi yang ditulis, dan konflik negasi atau polaritas tetap menjadi acuan terlepas dari kecocokan angka. Lihat src/aceh_rag/services.py _claim_supported_by_chunk/_figure_values.
Pemilihan tool dan sumber yang dikonfigurasi
Pencarian berjalan melalui tool yang dipilih Planner berdasarkan maksud kueri, dengan Vector Search hibrida sebagai default dan fallback. Legal Check, Summarizer, Cross-Reference, dan Excel Query menggunakan data dokumen yang diindeks atau diunggah. Tool sql_query yang hanya dapat dibaca hanya didaftarkan ketika sumber SQL terstruktur diaktifkan, sehingga pertanyaan berbentuk kuantitas atas konten PPID berupa prosa dijawab dari chunk hasil pencarian, bukan diarahkan ke sumber SQL yang belum dikonfigurasi lalu ditolak. Lihat src/aceh_rag/orchestration.py.
Pembacaan langsung OpenData, SatuData, dan BPS
Jika diaktifkan dengan daftar izin egress, tool Open Data membaca angka yang dipublikasikan secara langsung dari resource CKAN OpenData atau SatuData yang sesuai dengan kueri, lalu menjadikannya dasar dengan identitas dataset dan metadata waktu pembacaan. Tool BPS Statistics membaca BPS WebAPI yang otoritatif untuk indikator seperti populasi, kemiskinan, inflasi, atau PDB; tool ini menggunakan maksud open_data_lookup yang sama dan dapat beralih ke portal Open Data jika dikonfigurasi. Tool-tool ini dinonaktifkan secara default dan harus turun dengan jujur menjadi catatan tidak tersedia/tidak diaktifkan, bukan mengarang angka. Lihat src/aceh_rag/open_data.py dan src/aceh_rag/bps.py.
Policy Guard
Government Policy Guard membungkus jawaban yang dihasilkan sebelum sampai ke pengguna. Guard ini menyaring anti-SARA, upaya jailbreak, dan pelanggaran kebijakan komunikasi pemerintah. Guard ini tidak dapat dilewati per kueri.
Permukaan kueri dan pencarian
POST /search menyediakan chunk pencarian yang telah diperingkat untuk diagnostik dan pratinjau hasil. POST /query menjalankan pencarian dan sintesis lalu mengembalikan jawaban dengan sitasi, sedangkan POST /query/stream mengalirkan siklus hidup jawaban yang sama melalui SSE. Bagian ini adalah ringkasan arsitektur; Referensi API Query dan Search adalah acuan otoritatif untuk field payload, kode status, error standar, perilaku terminal SSE, dan contoh frontend.