Bloga dön

Yeni başlayanlar için AIKılavuz

Bir AI yanıtı neden cümle ortasında durur? max_tokens, bağlam penceresi ve finish_reason açıklandı

Cümle ortasında duran bir AI yanıtı bir sınıra ulaşmıştır. finish_reason alanını okuyun, max_tokens ile dolu bir bağlam penceresini ayırt edin ve her modelin çıktı sınırını kontrol edin.

Yazan: CheapTokens TeamYayınlanma tarihi: Güncellenme tarihi: 6 dk okuma

cheaptokens logosuyla koyu kapak: max_tokens, finish_reason ve length kelimeleri kutularda ve “Answer cut off mid-sentence?” başlığı
Bu sayfada
  1. Bir yanıtı kesen üç sınır
  2. Önce finish_reason alanını okuyun
  3. Düzeltme 1: max_tokens değerini artırın
  4. Düzeltme 2: bağlam penceresi dolduğunda
  5. Düzeltme 3: uzun bir yanıtı parçalar halinde alın
  6. finish_reason stop olduğunda
  7. Yanıt uzunluğuna göre model seçmek

Cümle ortasında kesilen bir yanıt neredeyse her zaman bir sınır tarafından kesilmiştir. Model düşünce akışını kaybetmedi; istek için yer kalmadı. Yanıt hangi sınır olduğunu söyler: finish_reason alanını okuyun. length bir sınıra ulaşıldığı anlamına gelir. stop modelin kendi kendine bitirdiği anlamına gelir.

Bir yanıtın ne kadar uzun olabileceğine üç şey karar verir. Hangisinin sizi etkilediğini bildiğinizde düzeltme bir dakika sürer.

Bir yanıtı kesen üç sınır#

  • max_tokens istekte sizin belirlediğiniz bir üst sınırdır. Yanıt buna ulaştığında, kelimenin ortasında bile olsa üretim durur. DeepSeek'in API referansı bunu tamamlamada üretilen maksimum token sayısı olarak tanımlar.
  • Modelin çıktı sınırı o modelden tek bir yanıt için üst sınırdır. Modele ait olduğundan max_tokens değerini bu sınırda veya altında tutun. Modellerimizin sayıları aşağıdaki tabloda.
  • Bağlam penceresi tüm alışveriş için ayrılan yerdir: girdiniz ve yanıt birlikte. DeepSeek'in referansı, girdi ve üretilen token'ların birlikte modelin bağlam uzunluğuyla sınırlandığını söyler.

Token hâlâ belirsiz bir kavramsa, What is a token in AI? ile başlayın. Bu sayfa ne olduğunu bildiğinizi varsayar.

Önce finish_reason alanını okuyun#

Bir sohbet yanıtındaki her seçim bir finish_reason taşır. Yanında usage kaç token girdiğini ve çıktığını söyler.

Kesilmiş bir yanıtın tamamlanmış bir yanıtın yanında nasıl göründüğü aşağıda. İstek "In one short sentence, what is a token?" diye sordu, önce max_tokens 16 olarak, sonra 200 olarak ayarlandı.

Örnek amaçlı, kaydedilmiş bir yanıt değil: sayılarınız ve ek alanlarınız farklı olacaktır.

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usu" },
      "finish_reason": "length"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 16, "total_tokens": 37 }
}
json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usually a word or part of a word." },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 24, "total_tokens": 45 }
}

İlk yanıtta completion_tokens 16, tam olarak üst sınır ve metin "usu" ile bitiyor. İkincisinde model 24 token'da durdu, 200'lük üst sınırın çok altında, çünkü işi bitmişti.

Ne olduğunu anlamak için şu sırayla ilerleyin:

  1. finish_reason alanına bakın. stop ise yanıt tamamdır. Model bitirmeyi seçti ya da sizin belirlediğiniz bir durdurma dizisine ulaştı. length ise bir sınır yanıtı kesti ve sonraki adım hangisi olduğunu söyler. content_filter ve tool_calls gibi başka değerler de vardır; ikisi de uzunluk sorunu değildir.
  2. completion_tokens değerini gönderdiğiniz max_tokens ile karşılaştırın. Eşit veya neredeyse eşitse max_tokens sınırına ulaştınız.
  3. completion_tokens değeri max_tokens değerinin çok altındaysa ve prompt_tokens büyükse, bağlam penceresi büyük olasılıkla dolmuştur. DeepSeek'in referansı her iki durum için de length kullanır, bu yüzden alan tek başına bunları ayıramaz; 2. adımdaki karşılaştırma ayırt etme yolunuzdur. Anthropic'in ve Z.ai'nin belgeleri ikinci durumu ayrı olarak model_context_window_exceeded diye adlandırır. Hangi adı aldığınızı görmek için kendi yanıtlarınızdaki alana bakın.

Üç açıklamanın tümü geliştiricilerin belgelerinden alınmıştır, 20 Ekim 2026'da kontrol edildi: DeepSeek, Anthropic ve Z.ai.

Gördüğünüz finish_reason Neden Ne yapmalı
Kesildi, completion_tokens max_tokens değerine eşit length max_tokens sınırına ulaşıldı max_tokens değerini artırın ya da yanıtı parçalar halinde isteyin
Kesildi, completion_tokens max_tokens değerinin çok altında, uzun girdi length (bazı API'lerde model_context_window_exceeded) Bağlam penceresi dolu Girdiyi veya geçmişi kısaltın ya da daha büyük pencereli bir model seçin
Tamamlandı ama istediğinizden kısa stop Model bitirdi ya da bir durdurma dizisi tetiklendi Daha fazla ayrıntı isteyin; stop parametresini kontrol edin
Metin yok ya da bir ret content_filter Yanıt filtrelendi İsteği yeniden ifade edin
Metin yok, onun yerine bir araç isteği tool_calls Model bir araç çağırmak istiyor Aracı çalıştırın ve sonucu geri gönderin

Düzeltme 1: max_tokens değerini artırın#

En yaygın neden aynı zamanda düzeltmesi en kolay olanıdır. max_tokens değerini kendiniz ayarlayın, böylece hangi üst sınırın geçerli olduğunu bilirsiniz. Varsayılana güvenmeyin.

python
from openai import OpenAI

client = OpenAI(base_url="https://api.cheaptokens.dev/v1", api_key="YOUR_API_KEY")

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Write a detailed guide to setting up a home network."}],
    max_tokens=16000,  # example value: stay at or below the model's output limit
)

choice = resp.choices[0]
print(choice.finish_reason, resp.usage.completion_tokens)

Bu, çağrının şeklini gösterir. Anahtar burada YOUR_API_KEY olarak girilir; gerçek bir anahtarı paylaştığınız koddan uzak tutun.

Sayıyı artırmak yalnızca modelin kendi sınırına kadar yardımcı olur. CheapTokens üzerindeki sınırlar aşağıda, 20 Ekim 2026'da CheapTokens model listesine göre kontrol edildi:

Model Model ID Yanıt başına maks. çıktı Bağlam
DeepSeek-V4-Flash (0731) deepseek-ai/DeepSeek-V4-Flash-0731 32.768 token 380K
GLM-5.3-Flash zai-org/GLM-5.3-Flash 8.192 token 390K
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 8.192 token 200K

Geliştiriciler kendi API'leri için kendi sınırlarını yayımlar. Örneğin Z.ai, GLM-5 serisi için 128K'ya kadar çıktı listeler. Bunlar GLM-5.3-Flash'in CheapTokens üzerindeki sınırları değildir, o yanıt başına 8.192 token'dır. CheapTokens üzerinde geliştirdiğiniz her şey için yukarıdaki tabloyu kullanın.

Düzeltme 2: bağlam penceresi dolduğunda#

Bir sohbette tüm geçmiş her mesajla birlikte yeniden gönderilir, bu yüzden girdi her turda büyür. Bağlam penceresi bu geçmişi artı yeni yanıtı tutmalıdır. Geçmiş tek başına neredeyse tamamını kaplıyorsa yanıt için neredeyse hiç yer kalmaz.

Bu pencereler büyüktür ve kısa bir soru onları doldurmaz. Uzun sohbetler ve yapıştırılan belgeler doldurur. Yardımcı olanlar:

  • Eski bir sohbeti sürdürmek yerine yeni bir görev için yeni bir sohbet başlatın.
  • Modelden şimdiye kadarki konuşmayı özetlemesini isteyin ve yalnızca özeti ileri taşıyın.
  • Artık ihtiyaç duymadığınız eski mesajları ve ekleri kesin.
  • Girdinin kendisi çok büyükse en büyük pencereli modeli seçin. Bizimkiler arasında bu, 390K ile GLM-5.3-Flash'tir. Çıktı sınırı 8.192 token'dır, bu yüzden uzun bir sonucu parçalar halinde isteyin.

Düzeltme 3: uzun bir yanıtı parçalar halinde alın#

İstediğiniz yanıt modelin çıktı sınırından uzunsa hiçbir ayar onu tek bir yanıta sığdırmaz. Parçalar halinde isteyin: finish_reason değeri length olduğunda kısmi yanıtı geri gönderin ve modelden devam etmesini isteyin.

python
messages = [{"role": "user", "content": "Write a detailed guide to setting up a home network."}]
parts = []

for _ in range(4):  # example limit: at most 4 rounds
    resp = client.chat.completions.create(
        model="zai-org/GLM-5.3-Flash",
        messages=messages,
        max_tokens=8000,  # example value: below this model's output limit
    )
    choice = resp.choices[0]
    parts.append(choice.message.content)
    if choice.finish_reason != "length":
        break
    messages.append({"role": "assistant", "content": choice.message.content})
    messages.append({"role": "user", "content": "Continue exactly where you stopped. Don't repeat anything."})

text = "".join(parts)

Aynı uyarı: desenin bir örneği, kaydedilmiş bir çalıştırma değil. Parçalar arasındaki dikişleri okuyun. Bir model bazen bir cümleyi tekrarlar ya da birleşme noktasında bir listeyi baştan başlatır.

Her tur şimdiye kadarki her şeyi girdi olarak yeniden gönderir ve her çıktı token'ı faturalandırılır. Uzun bir yanıt kısa olandan daha pahalıdır. İşte 2.000 token girdi üzerinde sekiz bin token'lık bir yanıt, bu tablodaki her modele sığar:

Model Maliyet OpenRouter
GLM-5.3-Flash $0.00036 $0.00069
DeepSeek-V4-Flash $0.00083 $0.0013
MiniMax-M2.7 $0.0013 $0.0102

Toplamda 2.000 giriş ve 8.000 çıkış token'ı. 1M token başına fiyatlar günceldir ve tarifelerimizle birlikte değişir; OpenRouter sütunu aynı iş yükü için referans fiyatları gösterir.

finish_reason stop olduğunda#

stop modelin yanıtı bitirdiği anlamına gelir. İstediğinizden erken bitirdiyse bu bir sınır sorunu değildir ve daha büyük bir max_tokens hiçbir şeyi değiştirmez. Ne istediğinizi söyleyin: uzunluğu, bölümleri, ayrıntı düzeyini. Ayrıca isteğin bir stop parametresi ayarlayıp ayarlamadığını kontrol edin; yanıtta görünen bir durdurma dizisi onu anında bitirir.

Yanıt uzunluğuna göre model seçmek#

İhtiyacınız olan yanıttan başlayın. 8.192 token'a sığıyorsa MiniMax-M2.7 (MiniMaxAI/MiniMax-M2.7) bunu CheapTokens üzerinde halleder. Çıktısı OpenRouter referans fiyatından daha ucuzdur ve $0.15 üzerinden faturalandırılır (1M çıktı token'ı başına). Fiyat her saatte aynıdır, yoğun saatler yoktur ve API OpenAI ve Anthropic uyumludur.

Her model için güncel fiyat listesi aşağıda:

Model Bağlam Giriş $/1M Çıkış $/1M OpenRouter giriş OpenRouter çıkış
GLM-5.3-Flash reasoning 390K $0.02 $0.04 $0.0413 $0.0758
DeepSeek-V4-Flash 380K $0.015 $0.10 $0.0475 $0.1568
MiniMax-M2.7 180K $0.05 $0.15 $0.30 $1.20

Fiyatlar 1M token başına USD cinsindendir. OpenRouter rakamları karşılaştırma amaçlı gösterilmiştir ve değişebilir.

Henüz bir istek göndermediyseniz, Your first API request with CheapTokens süreci adım adım anlatır. Token'ın ne olduğu ve girdi ile çıktının neden ayrı sayıldığı için What is a token in AI? sayfasına bakın.

Her model için uç noktalar, model kimlikleri ve sınırlar CheapTokens docs içinde.