Apa itu structured outputs pada LLM?
Structured outputs adalah balasan model yang dijamin mengikuti format tetap, misalnya JSON yang cocok dengan schema tertentu. Metode yang umum adalah constrained decoding: di setiap langkah, token apa pun yang akan merusak format mendapat logit −∞ sebelum sampling. Schema dikompilasi menjadi state machine, dan mesin itulah yang menentukan token mana yang sah berikutnya.
Program yang memanggil model bahasa biasanya butuh data, bukan prosa. Mengekstrak field dari dokumen, mengisi formulir, mengklasifikasikan tiket, dan memanggil tool atau fungsi semuanya mengharapkan balasan yang bisa dibaca parser pada percobaan pertama. Constrained decoding menghapus putaran parse dan retry, menjaga tipe field tetap benar, dan membuat model lokal kecil mampu menghasilkan output yang bisa dipercaya kode berikutnya.
Ide utama
- Sampling bebas dari model bahasa menghasilkan JSON valid hampir setiap saat, tetapi tidak pernah selalu.
- Constrained decoding mengatur logit setiap token yang merusak format menjadi −∞, sehingga token itu mendapat probabilitas nol.
- Regex atau schema JSON sederhana dikompilasi menjadi finite-state machine yang mencantumkan karakter sah berikutnya di setiap state.
- Token sering mencakup beberapa simbol grammar, jadi token yang diizinkan per state dicari dengan menelusuri setiap token lewat mesin, sekali, sebelum dipakai.
- Mask nyaris tidak berbiaya per langkah, tetapi urutan field dalam schema bisa mengubah kualitas jawaban.
- JSON mode hanya menjamin sintaks yang valid, sedangkan decoding dengan batasan schema juga menjamin field dan tipenya.
Pertanyaan umum
Apakah constrained decoding menjamin jawaban yang benar?
Tidak. Yang dijamin adalah bentuk output, bukan kebenaran nilainya. Field bertipe integer akan berisi integer, tetapi integernya tetap bisa salah. Validasi isi, seperti cek rentang atau pencocokan dengan sumber, tetap diperlukan.
Apa bedanya JSON mode dan structured outputs?
JSON mode membatasi balasan agar menjadi JSON yang valid secara sintaks, dengan key dan tipe nilai apa pun. Structured outputs membatasinya pada satu schema tertentu: key yang wajib, tipenya, dan nilai enum yang diizinkan. Kode yang memakai JSON mode tetap harus memeriksa schema sendiri.
Apakah constrained decoding memperlambat generation?
Per token, tambahan bebannya kecil setelah indeks atau grammar dikompilasi, karena mask hanya berupa lookup ditambah satu operasi atas vocabulary. Kompilasi schema yang besar atau rumit bisa memakan waktu yang terasa pada request pertama. Itu sebabnya library menyimpan grammar hasil kompilasi di cache.
Apakah constrained decoding bisa dipakai dengan model apa pun?
Bisa dengan model apa pun yang membuka logit token berikutnya, karena caranya hanya mengubah token mana yang boleh di-sample. Itu termasuk model open-weight lokal. Pada model hosted, tergantung apakah penyedianya menjalankan batasan itu di sisinya.
Penjelasan terkait
- Sampling: Temperature, Top-k, dan Top-p · Cara model bahasa memilih token berikutnya
- Tokenization & BPE · Cara teks menjadi angka, dari karakter sampai subword token lewat byte-pair encoding
- Softmax, Logit, dan Temperature · Mengubah skor mentah menjadi probabilitas
- Decoder-Only Transformer · Arsitektur di balik GPT dan LLM modern
- Retrieval-Augmented Generation · Mendasarkan output model bahasa pada dokumen yang diambil untuk mengurangi halusinasi
- KV Cache · Kenapa LLM menyimpan key dan value di cache, dan berapa biayanya
Referensi
- Willard and Louf (2023), "Efficient Guided Generation for Large Language Models"
- Dong et al. (2024), "XGrammar: Flexible and Efficient Structured Generation Engine for Large Language Models"
- Tam et al. (2024), "Let Me Speak Freely? A Study on the Impact of Format Restrictions on Performance of Large Language Models"
Terakhir diperbarui