Instructor: Mendapatkan Structured Output dari LLM dengan Python

# Instructor: Mendapatkan Structured Output dari LLM dengan Python Salah satu tantangan terbesar saat bekerja dengan Large Language Models (LLM) adalah mendapatkan output yang terstruktur dan konsist...

By Ruby Abdullah · · tutorial
InstructorLLMPydanticStructured OutputPython

Instructor: Mendapatkan Structured Output dari LLM dengan Python

Salah satu tantangan terbesar saat bekerja dengan Large Language Models (LLM) adalah mendapatkan output yang terstruktur dan konsisten. LLM secara default menghasilkan teks bebas, yang sulit di-parse dan diintegrasikan ke dalam aplikasi. Library Instructor hadir untuk menyelesaikan masalah ini dengan memanfaatkan Pydantic untuk validasi dan ekstraksi data terstruktur dari LLM.

Dalam tutorial ini, kita akan mempelajari cara menggunakan Instructor untuk mendapatkan output JSON/Pydantic yang reliable dari berbagai LLM provider seperti OpenAI, Anthropic, dan lainnya.

Apa Itu Instructor?

Instructor adalah library Python yang meng-patch client LLM (seperti OpenAI) agar bisa mengembalikan objek Pydantic yang tervalidasi, bukan sekadar string. Instructor bekerja dengan memanfaatkan function calling atau JSON mode dari LLM, kemudian memvalidasi hasilnya menggunakan Pydantic.

Keunggulan utama Instructor:

  • Type-safe: Output dijamin sesuai dengan schema Pydantic yang didefinisikan
  • Automatic retry: Jika validasi gagal, Instructor otomatis me-retry dengan feedback error
  • Streaming support: Mendukung partial streaming untuk objek yang kompleks
  • Multi-provider: Mendukung OpenAI, Anthropic, Google, Mistral, dan lainnya
  • Validasi kustom: Bisa menambahkan validator Pydantic untuk business logic

Instalasi

Pertama, install Instructor beserta dependensi yang diperlukan:

pip install instructor openai pydantic

Untuk provider lain, install dependensi tambahan:

# Untuk Anthropic

pip install instructor anthropic

Untuk Google Gemini

pip install instructor google-generativeai

Untuk Mistral

pip install instructor mistralai

Pastikan Anda memiliki API key dari provider yang akan digunakan:

export OPENAIAPIKEY="sk-your-api-key-here"

Penggunaan Dasar dengan OpenAI

Mari mulai dengan contoh sederhana: mengekstrak informasi pengguna dari teks.

import instructor

from openai import OpenAI

from pydantic import BaseModel

Patch client OpenAI dengan Instructor

client = instructor.fromopenai(OpenAI())

Definisikan schema output

class UserInfo(BaseModel):

name: str

age: int

email: str

Ekstrak data terstruktur dari teks

user = client.chat.completions.create(

model="gpt-4o-mini",

responsemodel=UserInfo,

messages=[

{

"role": "user",

"content": "Nama saya Budi Santoso, umur 28 tahun. "

"Email saya budi.santoso@email.com"

}

],

)

print(user)

UserInfo(name='Budi Santoso', age=28, email='budi.santoso@email.com')

print(user.name) # Budi Santoso

print(user.age) # 28

print(user.email) # budi.santoso@email.com

Perhatikan bahwa responsemodel=UserInfo adalah parameter kunci yang memberitahu Instructor schema apa yang diharapkan. Hasilnya bukan dictionary atau string, melainkan objek Pydantic yang sudah tervalidasi.

Pydantic Models yang Lebih Kompleks

Instructor mendukung model Pydantic yang kompleks termasuk nested models, optional fields, enums, dan lists.

from pydantic import BaseModel, Field

from typing import Optional, List

from enum import Enum

class JobLevel(str, Enum):

JUNIOR = "junior"

MID = "mid"

SENIOR = "senior"

LEAD = "lead"

class Skill(BaseModel):

name: str = Field(description="Nama skill atau teknologi")

yearsexperience: int = Field(

description="Tahun pengalaman", ge=0, le=50

)

proficiency: str = Field(

description="Tingkat kemahiran: beginner, intermediate, advanced"

)

class WorkExperience(BaseModel):

company: str

role: str

durationmonths: int = Field(ge=1)

description: str

class CandidateProfile(BaseModel):

name: str

currentrole: str

level: JobLevel

totalyearsexperience: int = Field(ge=0)

skills: List[Skill]

workhistory: List[WorkExperience]

education: str

summary: str = Field(

Artikel Terkait

Tutorial PydanticAI: Framework Agent LLM yang Type-Safe

Membangun Agen LLM yang Type-Safe dengan PydanticAI PydanticAI adalah framework agen dari tim di balik Pydantic, diranca...

Tutorial TRL: Post-Training LLM dengan SFT, DPO, dan Reward Modeling

Post-Training LLM dengan TRL: SFT, Reward Modeling, dan DPO Setelah sebuah base language model selesai dipretraining, mo...

Tutorial Axolotl: Fine-Tuning LLM Berbasis Konfigurasi YAML

Fine-Tuning LLM Berbasis Konfigurasi dengan Axolotl Kebanyakan proyek fine-tuning dimulai dengan cara yang sama: seseora...

Tutorial Unsloth: Fine-Tuning LLM yang Cepat dan Hemat Memori

Fine-Tuning LLM Secara Efisien dengan Unsloth Dahulu, melakukan fine-tuning model bahasa besar membutuhkan server multi-...