Yeniden adlandırma kolay kısımdır. İnsanları yakalayan kısım, yeni alanın neyi saydığıdır — max_completion_tokens, akıl yürütmeyi ve görünen çıktıyı birlikte kapsar; bu nedenle yalnızca yanıt için ayarlanan bütçe boş döner, finish_reason "length" olur ve ücretlendirilir.
Hata
{
"error": {
"message": "Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.",
"type": "invalid_request_error",
"param": "max_tokens",
"code": "unsupported_parameter"
}
}Nedenler ve çözümler özeti
| Neden | Çözüm |
|---|---|
| Akıl yürütme modeli aileleri alanı değiştirdi | Bu modellerde max_tokens yerine max_completion_tokens gönderin. |
| Eski alana sabitlenmiş SDK veya sarmalayıcı | Yükseltin veya alanı yardımcı üzerinden değil, açıkça ayarlayın. |
| Birden çok sağlayıcıya yayılan tek kod yolu | Model başına dallanmak yerine uçta bir kez normalleştirin. |
| Düzelttikten sonra boş yanıt | Bütçe akıl yürütme token'larını da içerir — beklenen çıktınızın oldukça üzerine çıkarın. |
Alanı yeniden adlandırın
Çağrı noktasında bu doğrudan bir değiştirmedir. İsteğin geri kalanında hiçbir değişiklik olmaz.
# Before
resp = client.chat.completions.create(
model="gpt-5-6-sol", max_tokens=1024, messages=msgs)
# After
resp = client.chat.completions.create(
model="gpt-5-6-sol", max_completion_tokens=1024, messages=msgs)Göremediğiniz akıl yürütme için bütçe ayırın
max_completion_tokens, akıl yürütme token'ları ile görünen çıktıyı birlikte sınırlar. Bir model 1.024 sınırı altında düşünmek için 900 token harcarsa 124 token yanıt alırsınız — ya da finish_reason "length" olan boş bir mesaj ve bunların tamamı için bir fatura. Bütçeyi her ikisini de kapsayacak şekilde ayarlayın ve boş bir yanıta güvenmeden önce finish_reason'ı kontrol edin.
Model başına dallanmak yerine bir kez normalleştirin
Kodunuzun ucundaki tek bir yardımcı, geri kalanını sağlayıcıdan bağımsız tutar ve bir sonraki model ailesinin yeni bir düzenleme turuna dönüşmesini engeller.
def token_budget(model: str, n: int) -> dict:
"""One place that knows which spelling a model wants."""
if model.startswith("claude-"):
return {"max_tokens": n}
return {"max_completion_tokens": n}
resp = client.chat.completions.create(
model=model, messages=msgs, **token_budget(model, 4096))Benzer reddedilmeleri bekleyin
max_tokens'u bırakan aynı model aileleri temperature ve top_p'yi de sıklıkla reddeder. Bunu düzeltmek genellikle bir sonrakini ortaya çıkarır; desteklenmeyen örnekleme parametrelerini varsayılanlarına ayarlamak yerine kaldırın.
Kunavo üzerinden çağrı yapıyorsanız
Kunavo'nun /v1/chat/completions uç noktası GPT-5.x akıl yürütme ailesinde max_tokens'u kabul eder: çevirici, gönderdiğiniz iki yazımdan hangisi olursa olsun okur ve üst akış alanına eşler; /v1/responses da bunun ayna görüntüsünü sunar. Dolayısıyla bu modellerde herhangi bir şeyi yeniden adlandırmanız gerekmez. Açıkça belirtilmesi gereken bir asimetri: claude-* modellerinde sohbet çeviricisi şu anda yalnızca max_tokens'u okur; bu nedenle Claude için bu yazımı gönderin — yukarıdaki yardımcı da bunu yapar.
Sık sorulan sorular
max_completion_tokens yalnızca yeniden adlandırma mı?
Çağrı noktasında evet, anlam olarak hayır — max_tokens yalnızca görünen çıktıyı sınırlarken bu alan akıl yürütme token'larını ve çıktıyı birlikte sınırlar.
Bunu düzelttikten sonra yanıtım neden boş?
Bütçe akıl yürütme için harcanmıştır. Boş içerikle birlikte finish_reason: "length" görüyorsanız sınırı artırın.
Model başına dallanmak zorunda mıyım?
GPT ailesi için Kunavo'da hayır — her iki yazım da kabul edilir. Yalnızca claude-* modellerinde dallanın veya her yerde tek bir normalleştirme yardımcısı kullanın.
İlgili kılavuzlar
- context_length_exceeded / prompt çok uzun — uygulamanızı köreltmeyen çözümler
- 401/403 döndüren OpenAI uyumlu API — base_url ve başlık tuzakları
- “Akış kesildi. Tam mesaj bekleniyor” — ne anlama gelir ve nasıl düzeltilir?
Hata anlamlarına ilişkin daha fazla bilgi hata referansı bölümünde; anahtar almak kayıt ve kimlik doğrulama kılavuzu üzerinden bir dakika sürer.