Skip to content

JSON Mode & Structured Outputs (Anthropic & OpenAI)

Vendor'ların yapılandırılmış output desteği. JSON Mode (OpenAI), prefilling (Anthropic), tool-use ile schema garantisi.

Şükrü Yusuf KAYA
11 min read
Intermediate

Yapılandırılmış Çıktılar

LLM çıktısı bir programa giriyorsa, kesinlikle parse-edilebilir olmalı. "Bazen JSON, bazen Markdown" production'da kabul edilemez.

3 Yaklaşım#

from openai import OpenAI client = OpenAI() r = client.chat.completions.create( model="gpt-4o", response_format={"type": "json_object"}, # ⬅️ JSON Mode messages=[ {"role": "system", "content": "Sen bir JSON üreticisin. SADECE JSON döndür."}, {"role": "user", "content": "Ad, yaş, şehir alanları olan örnek JSON üret."} ] ) # r.choices[0].message.content → her zaman valid JSON
Avantaj: Garanti JSON format. Dezavantaj: Schema'yı kontrol etmiyor — sadece parse edilebilir JSON.
python
# Pydantic + OpenAI Structured Outputs
from pydantic import BaseModel
from typing import List, Literal
from openai import OpenAI
import os
 
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
 
class CVInfo(BaseModel):
full_name: str
email: str | None
years_experience: int
skills: List[str]
seniority: Literal["junior", "mid", "senior", "lead"]
 
CV = """Mehmet Yılmaz
mehmet.yilmaz@example.com | 0532...
12 yıllık backend mühendisi. Lead Developer @ X Şirketi.
Python, Go, Kubernetes, PostgreSQL, Kafka."""
 
r = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
response_format=CVInfo,
messages=[
{"role": "system", "content": "CV'den bilgi çıkar. Eksik veriyi None bırak."},
{"role": "user", "content": CV}
]
)
 
cv = r.choices[0].message.parsed
print(cv)
print(f"Name: {cv.full_name}")
print(f"Seniority: {cv.seniority}")
print(f"Skills: {cv.skills}")
 
Type-safe CV parsing.
Schema-driven output = AI Engineering'in temel taşı. Her structured workload'ı Pydantic/Zod ile tanımla.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content