- Large Language Model (LLM): panduan praktis untuk developer guna mengatasi ketidakstabilan saat menghasilkan format terstruktur seperti JSON, XML, dan kode
- Karena sifat probabilistiknya, output dapat rusak secara nondeterministik; dokumen ini membahas teknik struktur deterministik untuk mengatasinya
- Mencakup seluruh proses, termasuk cara kerja internal, pemilihan alat dan teknik, deployment, skalabilitas, dan optimasi biaya, serta peningkatan kualitas output
- Menyediakan informasi terbaru di bidang generasi terstruktur yang berubah cepat dalam bentuk dokumen yang terus diperbarui
- Referensi penting bagi developer yang memanfaatkan LLM secara terprogram untuk ekstraksi data, pembuatan kode, dan pemanggilan alat
Pentingnya output LLM terstruktur
- LLM umumnya dapat menghasilkan output yang valid secara sintaksis seperti JSON, XML, dan kode, tetapi karena sifat probabilistiknya, kesalahan format atau hasil yang tidak lengkap tetap bisa terjadi
- Hal ini menimbulkan masalah dalam proses otomatis seperti ekstraksi data, pembuatan kode, dan pemanggilan alat
- Untuk mengatasi masalah tersebut, dibutuhkan metode output terstruktur yang deterministik
- Buku panduan ini membahas berbagai alat dan teknik agar developer dapat mengimplementasikan output terstruktur secara andal
Isi utama buku panduan
- Mencakup topik yang berfokus pada praktik, seperti cara kerja internal, alat dan teknik terbaik, kriteria pemilihan alat, metode membangun, melakukan deployment, dan menskalakan sistem, optimasi latensi dan biaya, serta peningkatan kualitas output
- Setiap bagian disusun dengan pendekatan bertahap yang bisa langsung diterapkan developer
- Mengintegrasikan riset terbaru dan alat open source terkait output terstruktur dalam satu dokumen
Kebaruan dan pembaruan
- Karena teknologi generasi terstruktur berkembang sangat cepat, materi yang ada mudah sekali menjadi usang
- Buku panduan ini dipertahankan sebagai living document yang diperbarui secara berkala
- Developer dapat mengakses informasi terbaru di satu tempat tanpa harus menelusuri banyak paper, blog, dan repositori GitHub
Cara penggunaan
- Dapat dibaca secara berurutan dari awal hingga akhir, atau digunakan seperti buku referensi untuk langsung mencari topik yang dibutuhkan
- Disusun dengan fokus pada developer praktis, sehingga dapat dijadikan rujukan cepat saat menyelesaikan masalah tertentu
Pembuat dan komunitas
- Buku panduan ini dibuat oleh tim Nanonets
- Melalui newsletter komunitas developer LLM, mereka membagikan insight terbaru, terobosan, serta alat dan teknik berguna setiap dua minggu sekali
1 komentar
Komentar Hacker News
Panduan yang benar-benar indah. Saya sangat menyukai animasi perpindahan tab di beberapa halamannya
Saya pikir saya sudah cukup memahami grammar-constrained generation (bahkan pernah berkontribusi beberapa hal pada implementasi grammar di llama.cpp), tetapi tetap saja saya mendapat wawasan baru dari panduan ini
Saya rasa structured output adalah salah satu fitur yang paling diremehkan dari mesin LLM. Berkat constraint grammar, LLM bisa digunakan secara andal sebagai bagian dari pipeline yang lebih besar, misalnya tool-calling agent
Output-nya bisa saja salah secara semantik, tetapi secara tata bahasa akan selalu benar. Ini sangat penting terutama saat menggunakan model lokal
Misalnya seperti contoh filter spam berbasis Raspberry Pi dari Jart, jika grammar diterapkan agar model TinyLlama hanya mengeluarkan
"yes"atau"no", maka sistem bisa berjalan stabil bahkan di perangkat keras kecilPanduan yang sangat bagus. Saya meneliti structured generation saat menempuh PhD, jadi saya membagikan beberapa referensi untuk yang tertarik
Untuk library, ada Outlines, Guidance, dan XGrammar
Untuk paper, saya merekomendasikan Efficient Guided Generation for Large Language Models, Automata-based constraints for language model decoding, dan Pitfalls, Subtleties, and Techniques in Automata-Based Subword-Level Constrained Generation
Untuk tulisan blog, ada LLM Decoding with Regex Constraints dan Coalescence: making LLM inference 5x faster
Panduan yang tersusun rapi. Jika ingin tahu lebih banyak tentang optimisasi Guidance & llguidance, ada baiknya melihat paper singkat yang kami tulis
Panduan ini membahas dengan baik dua pendekatan yang paling sering dipakai orang. Namun, constrained generation pada dasarnya bisa menyimpang dari distribusi asli LLM
Misalnya, saat LLM menghasilkan objek terstruktur yang panjang, model mungkin lebih menyukai pola seperti ‘…’, tetapi generasi yang dibatasi memaksanya menutup dengan tanda kutip atau token lain, dan justru bisa menghasilkan keluaran yang keliru
Sebaliknya, resampling lebih stabil karena terus mengulang sampai mendapatkan hasil yang valid
Selain itu, daripada terus menambah panjang konteks dengan memasukkan error schema, saya rasa lebih baik cukup melakukan retry dari sisi kualitas maupun biaya
Saya penasaran apakah model SoTA (Opus, Gemini, dan sebagainya) masih memerlukan output schema enforcement
Belakangan ini model-model tampak hampir tidak membuat kesalahan sintaks saat menghasilkan JSON atau kode, jadi saya ingin tahu apakah mereka masih melakukan validasi schema secara internal
Saya paham bahwa model kecil memang membutuhkan generasi terstruktur
json\n, jadi tetap lebih aman menentukan JSON response schemaMemaksakan structured output memang menimbulkan penurunan performa. Dalam beberapa kasus bisa 2–3 kali lebih lambat. Perlu dinilai apakah biaya itu layak untuk situasinya
Panduan yang benar-benar luar biasa. Saya berharap materi seperti ini sudah ada setahun lalu. Saya pasti akan membagikannya ke orang-orang sekitar saya
Panduan yang bagus. Saya terutama menyukai diagram masked decoding
Saya penasaran apakah ada format output yang lebih andal dan mudah diparse daripada JSON. YAML atau TOML masing-masing punya kekurangan, tetapi mungkin lebih baik dari sisi jumlah token atau biaya
Saya penasaran dengan tech stack untuk halaman dokumentasi/cookbook ini. Tidak terlihat seperti MkDocs atau GitBook, jadi saya ingin tahu apa yang dipakai