2 poin oleh GN⁺ 2024-12-09 | 1 komentar | Bagikan ke WhatsApp

Output terstruktur

6 Desember 2024

Ollama kini mendukung output terstruktur yang dapat membatasi keluaran model ke format tertentu yang didefinisikan dengan skema JSON. Library Ollama untuk Python dan JavaScript telah diperbarui agar mendukung output terstruktur.

  • Kasus penggunaan output terstruktur:
    • Parsing data dari dokumen
    • Mengekstrak data dari gambar
    • Menstrukturkan semua respons model bahasa
    • Memberikan keandalan dan konsistensi yang lebih tinggi dibanding mode JSON

Memulai

  • Unduh versi terbaru Ollama
  • Upgrade library Ollama Python atau JavaScript ke versi terbaru
cURL
  • Anda dapat meneruskan output terstruktur ke model menggunakan parameter format
Output
  • Respons dikembalikan dalam format yang didefinisikan oleh skema JSON pada permintaan
Python
  • Gunakan library Ollama Python untuk meneruskan skema sebagai objek JSON ke parameter format
  • Disarankan menggunakan Pydantic untuk membuat serialisasi skema
Output
  • name='Canada' capital='Ottawa' languages=['English', 'French']
JavaScript
  • Gunakan library Ollama JavaScript untuk meneruskan skema sebagai objek JSON ke parameter format
  • Disarankan menggunakan Zod untuk membuat serialisasi skema
Output
  • { name: "Canada", capital: "Ottawa", languages: [ "English", "French" ] }

Contoh

Ekstraksi data

  • Definisikan skema yang merepresentasikan informasi untuk mengekstrak data terstruktur dari teks
  • Model mengekstrak informasi dan mengembalikan data dalam JSON sesuai skema yang didefinisikan
Contoh output
  • pets=[ Pet(name='Luna', animal='cat', age=5, color='grey', favorite_toy='yarn'), Pet(name='Loki', animal='cat', age=2, color='black', favorite_toy='tennis balls') ]

Deskripsi gambar

  • Output terstruktur dapat digunakan bersama model vision
  • Gunakan llama3.2-vision untuk mendeskripsikan gambar dan mengembalikan output terstruktur
Contoh output
  • summary='A palm tree on a sandy beach with blue water and sky.'
  • objects=[ Object(name='tree', confidence=0.9, attributes='palm tree'), Object(name='beach', confidence=1.0, attributes='sand') ]
  • scene='beach', colors=['blue', 'green', 'white'], time_of_day='Afternoon', setting='Outdoor', text_content=None
Kompatibilitas OpenAI
  • Kompatibel dengan output terstruktur menggunakan klien OpenAI

Tips

  • Untuk menggunakan output terstruktur secara andal:
    • Gunakan Pydantic (Python) atau Zod (JavaScript) untuk mendefinisikan skema respons
    • Tambahkan "kembalikan dalam JSON" ke prompt agar model memahami permintaan
    • Atur temperature ke 0 untuk output yang lebih deterministik

Langkah berikutnya

  • Exposing logit untuk generasi yang terkontrol
  • Peningkatan performa dan akurasi output terstruktur
  • Akselerasi GPU untuk sampling
  • Dukungan format tambahan di luar skema JSON

1 komentar

 
GN⁺ 2024-12-09
Opini Hacker News
  • Batasan output yang lebih kuat dapat diterapkan melalui fitur gbnf di llama.cpp

  • Berguna untuk menghapus teks yang tidak perlu saat prompt biasa distrukturkan dan diubah menjadi data csv

  • Dengan menggunakan gemma2:2b, saat teks dimasukkan dapat diperoleh output dalam format JSON terstruktur

    • Contoh input: "You have spent 190 at Fresh Mart. Current balance: 5098"
    • Contoh output: {"amount": 190, "balance": 5098, "category": "Shopping", "place": "Fresh Mart"}
  • Ada pendapat yang penasaran bagaimana batasan memengaruhi kualitas output LLM

    • Dalam beberapa kasus, parsing sebagai Markdown atau teks biasa bisa memberikan kualitas yang lebih baik
  • Ada pertanyaan apakah ini bisa digunakan dengan model yang didukung

    • Di perangkat keras pribadi, hanya model 1b-3b yang bisa dijalankan secara stabil
  • Ada rasa penasaran apakah llama.cpp dan ollama memanfaatkan fitur structured output milik llama, atau diimplementasikan dengan cara lain

    • Di halaman Llama milik Meta disebutkan bahwa model tersebut memang mendukung structured output secara bawaan
  • Ada pertanyaan nilai tambah apa yang diberikan dibandingkan outlines

  • Alasan tetap menggunakan oobabooga adalah karena dukungan exlv2 memberikan inferensi yang lebih efisien di dual 3090s

  • Akan lebih baik jika contoh curl ditampilkan lebih dulu

    • Menyukai Pydantic, tetapi menulis skema secara langsung membuat prototipe lebih mudah dipindahkan ke Go
  • Ada pertanyaan tentang cara terbaik memberikan input terstruktur ke LLM

    • Misalnya, memasukkan 100 kalimat lalu mengklasifikasikan masing-masing dengan cara yang berbeda
    • Mendapatkan data terstruktur itu mudah, tetapi cara memberi prefiks nomor baris terasa canggung