Kalimat “buatkan JSON dari teks ini” sering menghasilkan objek yang rapi dibaca, tetapi kuncinya berubah-ubah atau nilainya ditebak. Panduan ini memisahkan tiga pekerjaan: merancang skema, meminta keluaran terstruktur, lalu memvalidasi hasil dengan alat yang tidak bergantung pada model. Alur dan contoh di bawah adalah rancangan editorial; ini bukan laporan uji sebuah layanan.
JSON Schema adalah bahasa deklaratif untuk mendefinisikan struktur dan batasan data JSON.[2] Bahasa itu sendiri tidak memvalidasi apa pun. Dokumentasi JSON Schema menyatakan bahwa memeriksa sebuah instans JSON terhadap skema membutuhkan validator.[2]
1. Tulis skema sebelum membuka chatbot
Contoh orisinal rekaan: catatan toko buku Cempaka berbunyi, “Pesanan 29 Oktober, pelanggan Rina, 2 buku Laskar, 1 buku atlas anak, ambil di toko, belum bayar.” Sasaran ekstraksi adalah objek dengan kunci tanggal, nama_pelanggan, item (larik objek judul dan jumlah), metode (enum ambil_toko atau kurir), dan status_bayar (enum belum atau lunas).
Pada JSON Schema biasa, properti yang didefinisikan properties tidak otomatis wajib; daftar required harus ditulis terpisah.[3] OpenAI, untuk Structured Outputs, mensyaratkan semua bidang atau parameter fungsi ditetapkan sebagai required.[1] Jangan menyamakan kedua aturan itu. JSON Schema juga memperingatkan bahwa properti bernilai null tidak sama dengan properti yang tidak ada.[3]
Batasi kunci tambahan. Pada JSON Schema, additionalProperties: false menolak properti yang tidak tercantum.[3] OpenAI mensyaratkan pengaturan yang sama agar Structured Outputs dapat digunakan, karena fitur itu hanya menghasilkan kunci yang ditentukan.[1]
Jangan memasukkan data pelanggan nyata ke layanan yang belum disetujui organisasi. Gunakan catatan rekaan atau cuplikan yang sudah diizinkan.
2. Bedakan JSON yang valid dari JSON yang sesuai skema
Dokumentasi resmi OpenAI membedakan Structured Outputs dan JSON mode: keduanya dapat menghasilkan JSON yang valid, tetapi hanya Structured Outputs yang menjamin kesesuaian skema.[1] JSON yang lolos json.loads di Python belum tentu memiliki kunci yang Anda butuhkan. Pustaka standar Python akan menaikkan JSONDecodeError jika dokumen JSON tidak valid, bukan jika skema dilanggar.[4]
Contoh prompt orisinal: “Ekstrak HANYA dari CATATAN. Gunakan skema terlampir. Jika sebuah bidang tidak ada di catatan, jangan mengarang nilai. Setelah JSON dihasilkan, saya akan memvalidasinya dengan validator terpisah. Jangan menambah kunci di luar skema.”
Jika masukan sama sekali tidak terkait skema, OpenAI memperingatkan bahwa model tetap berusaha menyesuaikan skema dan itu dapat menghasilkan halusinasi.[1] Sertakan instruksi untuk menandai ketidakcocokan, misalnya status tidak_dapat_diekstrak, daripada memaksa objek palsu.
3. Validasi di luar percakapan
Simpan skema sebagai berkas, bukan hanya di dalam chat. Validasi keluaran dengan validator JSON Schema di lingkungan Anda.[2] Periksa juga aturan bisnis yang tidak masuk skema: jumlah harus bilangan bulat positif, judul tidak boleh kosong, dan jumlah item harus sesuai catatan.
Contoh orisinal pemeriksaan: jika model mengembalikan jumlah: 2 untuk atlas padahal catatan menulis 1, objek itu bisa lolos skema tipe integer. Structured Outputs tidak menghapus kesalahan isi; dokumentasi OpenAI menyatakan keluaran terstruktur masih dapat mengandung kesalahan.[1]
Bandingkan JSON dengan teks sumber secara manual untuk nama, angka, dan kata negasi. Jika catatan tidak menyebut kurir, jangan terima metode: "kurir" hanya karena enum itu tersedia. Jika validator menolak kunci tambahan seperti catatan_model, itu keberhasilan skema, bukan kegagalan model yang harus diakali dengan menghapus additionalProperties.
4. Simpan jejak, bukan hanya objek akhir
Simpan catatan asli, skema, keluaran mentah, hasil validator, dan koreksi manusia. Jika skema diubah, validasi ulang arsip lama. Langkah ini adalah saran kerja, bukan jaminan bahwa setiap chatbot memiliki Structured Outputs. Periksa dokumentasi layanan yang Anda pakai sebelum mengandalkan klaim “selalu sesuai skema”.
Sumber
[1] OpenAI Structured model outputs





Komentar & Diskusi