Ne oldu, nasıl gelişti?
### 1. LLM Neden JSON Formatını Bozar? Büyük dil modelleri olasılıksal (probabilistic) metin üreteçleridir. Eğitim verisindeki diyalog kalıpları nedeniyle kibarlık cümleleri eklemeye veya markdown blokları (```json ... ```) açıp kapatmaya meyillidirler.
### 2. Modern Çözüm: Instructor ve Pydantic Kütüphanesi İstemci tarafında regex yazmak yerine Python'ın en güçlü veri doğrulama kütüphanesi olan Pydantic ile şemanızı tanımlayıp `instructor` kütüphanesi ile modeli otomatik yeniden denemeye (retry) zorlayabilirsiniz.
```python import instructor from pydantic import BaseModel, Field from openai import OpenAI from typing import List
# 1. Pydantic ile Katı Şema Tanımla class HaberAnalizi(BaseModel): baslik: str = Field(description="En fazla 80 karakterlik vurucu başlık") kategori: str = Field(description="gundem, ekonomi veya teknoloji") etiketler: List[str] = Field(min_items=2, max_items=5) duygu_puani: float = Field(ge=-1.0, le=1.0, description="-1 negatif, +1 pozitif")
# 2. Instructor ile OpenAI İstemcisini Sarmala client = instructor.from_openai(OpenAI())
# 3. Tip Garantili Çağrı analiz: HaberAnalizi = client.chat.completions.create( model="gpt-4o-mini", response_model=HaberAnalizi, max_retries=3, messages=[ {"role": "user", "content": "TCMB faiz kararını sabit tuttu haberi için analiz üret."} ] )
print(analiz.baslik) print(analiz.duygu_puani) ```
### 3. API Seviyesinde 'Strict: True' Parametresi OpenAI ve modern LLM sağlayıcılarının sunduğu `response_format: {"type": "json_schema", "json_schema": {"strict": true}}` parametresi, modelin sampling adımında sadece şemada tanımlı token'ları üretmesini sağlayan gramer kısıtı (Constrained Decoding) uygular. Bu sayede hata payı matematiksel olarak %0'a iner.
### 4. 4 Adımda Üretim Hazırlığı 1. Şema alanlarında `Optional` kullanımını minimumda tutun. 2. Her alana net `description` ekleyin. 3. `max_retries=3` ile şema hatasında modelin hatayı görüp kendini düzeltmesini sağlayın. 4. Çıktıyı doğrudan veritabanı ORM modeline map edin.