max_tokens
Çıktı uzunluğu sınırı
Modelin tek bir cevap için üretebileceği maksimum token sayısı. Hem maliyet hem latency'yi doğrudan etkiler.
Her LLM çağrısında çıktıyı sınırlamak için bir tavan belirlersin:
max_tokens (OpenAI), max_output_tokens (Anthropic), num_predict
(Ollama), -n (llama.cpp). Model bu sayıya ulaşırsa cümlenin ortasında
bile keser — daima net bir tavan olduğu için fatura öngörülebilir
ve timeout riski azalır.
max_tokens çıktıdaki sadece üretilen token'ları sayar. Input
token'lar bu limite girmez ama context window'a girer. Yani:
input + max_tokens ≤ context_window. Bu eşitsizliği kontrol etmek
senin sorumluluğun; aşarsan çoğu API hata verir.
Reasoning modellerde (o1, Claude reasoning) max_tokens görünmeyen
"thinking" token'larını da kapsar. 1000 max_tokens ile 8000 thinking
isteyen sorguda model erken kesilir.
Sınavda "cevabını maksimum 200 kelime ile yaz" demek. Öğrenci 200'e ulaşırsa cümlesi ortada da kalsa durur. Sınırı koymak öğretmenin okuma süresini öngörülebilir kılar — ama çok kısa koyarsan eksik cevap alırsın. max_tokens da öyle: maliyet/süre koruması, ama cımbız gibi keser.
Bir özetleme servisi. Her isteğe max_tokens=200 koyuyorsun.
Sorun: bazı uzun belgelerde 200 token özet cümle ortasında bitiyor
("Sözleşme şartları temel olarak 5 maddede toplanır:"). Çözüm:
1. max_tokens=400 (güvenli pay)
2. Prompt'a "max 5 madde, her madde 1 cümle" yaz — model kendi
sınırlar.
3. finish_reason kontrol et: "length" ise → kullanıcıya "devam
ettir?" göster, "stop" ise → tamam.
Maliyet hesabı: 100K istek/gün × 200 max_tokens × $0.6/1M = $12/gün × 30 = $360/ay. max_tokens=400'e çıkarsan $720. Tavan iki katına çıkar mı? Kullanıcı senaryona bağlı.
- Her production API çağrısında — fatura ve timeout güvenliği
- Streaming UI — ne kadar okuyacağımızı önden bilmek için
- Yapılandırılmış çıktı (JSON, yes/no) — kısa tutmak yeter
- Reasoning modellerinde thinking token'larını da hesaba katarak büyük tutmak
- Bilinçsizce çok küçük tutmak — cevap yarıda kalır
- Bilinçsizce devasa (100K) — context'in çoğunu output'a ayırma riski
- max_tokens'e güvenip prompt'ta uzunluk söylememek — model uzun yazma eğiliminde
finish_reason kontrolü unutmak
Model max_tokens'e ulaşırsa finish_reason: 'length' döner. Bunu kontrol etmezsen cevabın yarım olduğunu anlamayan kullanıcı hatalı bilgi alır. Daima kontrol et + UI'da uyar.
Reasoning modeller için yetersiz tavan
o1/Claude-reasoning'de görünmeyen düşünme token'ları max_tokens'e dahil. 500 max_tokens koyup 'cevap çok kısa geldi' deme. 4000-8000 koy.
Context window'u doldurma
128K context'in 100K'sı input, sadece 28K çıktıya kalır. max_tokens=50K istersen API hata verir. input + max_tokens ≤ context şart.