3 poin oleh GN⁺ 2026-01-18 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2026-01-18
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 kecil

    • Saya penasaran apa yang terjadi saat model ingin menghasilkan output lain, dan apakah lebih baik ditangani di dalam llamafile atau lewat wrapper eksternal. Saya juga ingin tahu bagaimana pengaturan retry atau pembatasan rentang JSON dilakukan
  • Panduan 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

    • Saya kurang paham Outlines berperan persis seperti apa di dalam stack. Apakah mirip dengan structured output API yang disediakan penyedia model besar, atau bisa dibandingkan dengan proyek seperti BAML?
    • Bagian canonical filtering di paper DFybOGeGDS tampaknya tidak mempertimbangkan pretokenization. Saya ingin tahu apakah ada riset tentang canonical generation yang benar-benar mencerminkan regex pretokenization di dunia nyata
    • Katanya “referensi lain”, tetapi rasanya hanya mengulang daftar library yang sudah ada di panduan
    • Benar-benar seperti tambang emas. Constraint berbasis automata adalah topik yang menarik
  • Panduan yang tersusun rapi. Jika ingin tahu lebih banyak tentang optimisasi Guidance & llguidance, ada baiknya melihat paper singkat yang kami tulis

    • Saya salah satu penulis paper itu. Saya sangat terkesan khususnya dengan implementasi slicing untuk dense token mask
  • 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

    • Pendekatan hibrida juga memungkinkan. Coba dulu generasi tak dibatasi (unconstrained), dan hanya jika gagal baru terapkan generasi dibatasi (constrained)
  • 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

    • Semakin kompleks skemanya, semakin berguna fitur ini karena LLM lemah dalam counting. Meskipun modelnya membaik, sifat probabilistiknya berarti tetap tidak akan sempurna
    • Bahkan model terbaru pun kadang masih menambahkan token tak perlu seperti json\n, jadi tetap lebih aman menentukan JSON response schema
  • Memaksakan 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 salah satu penulisnya. Saya akan cek masalah tautannya. Semua penyedia model komersial sedang menambahkan fitur structured output, jadi kami akan terus memperbarui panduan ini
  • 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 menggunakan format TOON untuk tujuan itu
    • Seperti manusia yang merasa menulis JSON itu merepotkan, untuk LLM mungkin lebih baik membiarkannya menghasilkan hasil dalam bentuk kode seperti TypeScript. Namun, demi keamanan tetap perlu sandboxing dan pembatasan sumber daya
    • Kami sedang mengembangkan pipeline transformasi konten berbasis Markdown + YAML front matter. Tooling JSON memang kurang memadai, tetapi validasinya tidak sulit
    • Saya menerapkan schema XML dengan regex, lalu mendekodenya menggunakan parser XML. Khususnya untuk code block, saya membungkusnya dengan CDATA agar lebih leluasa. Structured output regex di OpenAI API lebih cocok untuk kode daripada JSON
    • Sebaiknya lakukan evaluation sendiri. Dalam eksperimen saya, XML selalu memberi hasil lebih baik daripada JSON pada tugas out-of-distribution
  • Saya penasaran dengan tech stack untuk halaman dokumentasi/cookbook ini. Tidak terlihat seperti MkDocs atau GitBook, jadi saya ingin tahu apa yang dipakai

    • Kami menggunakan Docusaurus