Skip to content

Output Format Control: JSON, Markdown, Tables

Master three techniques to keep Claude's output parseable, consistent, and error-free: schema, prefill, and validator-loop.

Şükrü Yusuf KAYA
13 min read
Intermediate
JSON, Markdown ve tablo çıktılarını üreten format kontrol pipeline'ı
Üç teknik, sıfır toleranslı format
Format hatası genelde geliştiriciyi en çok yakan şeydir. Bu derste schema-driven prompting, assistant prefill ve validator-loop tekniklerini öğreneceksin.

Format Kontrolü Neden Bu Kadar Önemli?

Çıktıyı bir başka sistem (parser, UI, başka API) tüketecekse, her küçük format sapması bug demektir. Bizim için ideal: çıktı her seferinde aynı kalıpta.
Format pipeline: schema → prefill → model → validate → retry
Format kontrol pipeline'ı: schema, prefill, model, validate, retry.

Teknik 1 — Schema-Driven Prompting#

Çıktıyı bir JSON schema ile sınırla. Schema'yı doğrudan prompt'a yapıştır.
text
<output_schema>
{
"type": "object",
"required": ["category", "confidence", "next_action"],
"properties": {
"category": {
"type": "string",
"enum": ["auth", "billing", "tech", "other"]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"next_action": {
"type": "string",
"maxLength": 120
}
},
"additionalProperties": false
}
</output_schema>
 
<rules>
Sadece geçerli JSON döndür. Açıklama / yorum ekleme.
Bilinmeyen alan ekleme. Schema'ya tam uymayan değer üretme.
</rules>
JSON schema'yı doğrudan prompt'ta vermek — hata oranını dramatik düşürür.

Teknik 2 — Assistant Prefill#

API çağrılarında
assistant
mesajını yarım bırakarak başlatabilirsin. Claude o noktadan devam eder. Bu, formatı fizik olarak zorlar.
python
# Anthropic SDK ile prefill örneği
import anthropic
 
client = anthropic.Anthropic()
 
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
system="Sen bir destek bileti sınıflandırıcısısın. Sadece geçerli JSON döndür.",
messages=[
{"role": "user", "content": "Şifremi sıfırlayamıyorum"},
{"role": "assistant", "content": "{"}, # ← prefill
],
)
 
# Çıktı garantili '{' ile başlar, JSON parse'a hazır
text = "{" + response.content[0].text
print(text)
Prefill — JSON formatını fiziksel olarak zorlamanın en sağlam yolu.

Teknik 3 — Validator-Loop#

Schema doğrulamasını kodla yap; başarısızsa aynı hata mesajını Claude'a yolla ve düzeltmesini iste.
python
# Sentetik validator loop demo
import json
 
def validate(payload: str) -> tuple[bool, str]:
try:
obj = json.loads(payload)
except json.JSONDecodeError as e:
return False, f"JSON parse hatası: {e}"
if "category" not in obj:
return False, "category alanı eksik"
if obj["category"] not in {"auth","billing","tech","other"}:
return False, "category enum dışı: " + str(obj["category"])
if not (0.0 <= obj.get("confidence", -1) <= 1.0):
return False, "confidence 0..1 aralığında olmalı"
return True, "ok"
 
# Bozuk cevap
bozuk = '{"category":"login","confidence":1.4}'
ok, msg = validate(bozuk)
print("Geçerli mi?", ok, "—", msg)
 
# Düzeltilmiş cevap (Claude bir tur sonra dönecek diye varsay)
duzelt = '{"category":"auth","confidence":0.91,"next_action":"şifre sıfırlama linki gönder"}'
ok, msg = validate(duzelt)
print("Geçerli mi?", ok, "—", msg)
Validator-loop — başarısız çıktıyı geri besle, model düzeltsin.
json · diff modu
Senin kodun
Hedefe karşı diff
+ // Üretim seviyesi: schema + prefill
- // Naif istek — olası başarısızlık
{
"model": "claude-sonnet-4-6",
+ "system": "Sınıflandırıcı. Sadece geçerli JSON. Schema: {...}",
"messages": [
+ {"role": "user", "content": "Şu bileti sınıflandır: ..."},
+ {"role": "assistant", "content": "{"}
+ ],
+ "max_tokens": 256,
+ "temperature": 0.0
- {"role": "user", "content": "Şu bileti sınıflandır: ..."}
- ]
}
İki istek arası fark — gece uykunu çalan format buglarını ortadan kaldırır.
Boşluk doldur · text
Çıktı formatını kontrol etmenin üç tekniği: schema, _____ ve _____ -loop. JSON formatını fiziksel olarak zorlayan teknik _____ olarak adlandırılır.

Frequently Asked Questions

Combined with Tool Use or structured output, accuracy is very high. But always keep a validator-loop as a safety net in critical production paths.

Yorumlar & Soru-Cevap

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

Related Content