ब्लॉग पर वापस जाएं

शुरुआती लोगों के लिए AIगाइड

AI का उत्तर वाक्य के बीच में क्यों रुक जाता है? max_tokens, कॉन्टेक्स्ट विंडो और finish_reason समझाया गया

वाक्य के बीच में रुका AI उत्तर किसी सीमा पर पहुँच गया। finish_reason पढ़ें, max_tokens को भरी कॉन्टेक्स्ट विंडो से अलग पहचानें और हर मॉडल की आउटपुट सीमा जाँचें।

CheapTokens Team द्वाराप्रकाशित अपडेट किया गया 11 मिनट का पाठ

cheaptokens लोगो के साथ गहरा कवर: बॉक्स में max_tokens, finish_reason और length शब्द, और शीर्षक “Answer cut off mid-sentence?”
इस पृष्ठ पर
  1. उत्तर को काटने वाली तीन सीमाएँ
  2. पहले finish_reason पढ़ें
  3. समाधान 1: max_tokens बढ़ाएँ
  4. समाधान 2: जब कॉन्टेक्स्ट विंडो भरी हो
  5. समाधान 3: लंबा उत्तर भागों में पाएँ
  6. जब finish_reason stop हो
  7. उत्तर की लंबाई के अनुसार मॉडल चुनना

जो उत्तर वाक्य के बीच में रुक जाता है, वह लगभग हमेशा किसी सीमा के कारण कटा होता है। मॉडल अपना विचार-प्रवाह नहीं खोता; अनुरोध में जगह खत्म हो जाती है। प्रतिक्रिया बताती है कि कौन-सी सीमा थी: finish_reason पढ़ें। length का अर्थ है कि कोई सीमा पूरी हो गई। stop का अर्थ है कि मॉडल ने स्वयं उत्तर समाप्त किया।

उत्तर कितना लंबा हो सकता है, यह तीन चीज़ें तय करती हैं। एक बार जब आपको पता चल जाए कि किसने रोका, तो ठीक करने में एक मिनट लगता है।

उत्तर को काटने वाली तीन सीमाएँ#

  • max_tokens वह कैप है जो आप अनुरोध में सेट करते हैं। जब उत्तर उस तक पहुँचता है, तो जनरेशन रुक जाता है, शब्द के बीच में भी। DeepSeek का API संदर्भ इसे कम्प्लीशन में जनरेट किए गए टोकन की अधिकतम संख्या के रूप में परिभाषित करता है।
  • मॉडल की आउटपुट सीमा उस मॉडल से एक उत्तर के लिए ऊपरी सीमा है। यह मॉडल की होती है, इसलिए max_tokens को उसके बराबर या उससे कम रखें। हमारे मॉडलों की संख्याएँ नीचे तालिका में हैं।
  • कॉन्टेक्स्ट विंडो पूरे आदान-प्रदान के लिए जगह है: आपका इनपुट और उत्तर मिलाकर। DeepSeek का संदर्भ कहता है कि इनपुट और जनरेट किए गए टोकन मिलाकर मॉडल की कॉन्टेक्स्ट लंबाई से सीमित होते हैं।

अगर टोकन अभी भी एक धुँधली अवधारणा है, तो What is a token in AI? से शुरू करें। यह पृष्ठ मानता है कि आप जानते हैं कि टोकन क्या है।

पहले finish_reason पढ़ें#

चैट प्रतिक्रिया में हर विकल्प के साथ एक finish_reason होता है। उसके बगल में, usage बताता है कि कितने टोकन अंदर और बाहर गए।

यहाँ एक कटा हुआ उत्तर एक पूर्ण उत्तर के बगल में कैसा दिखता है। अनुरोध में पूछा गया था "In one short sentence, what is a token?", पहले max_tokens को 16 पर सेट करके, फिर 200 पर।

उदाहरण के लिए, यह कोई रिकॉर्ड की गई प्रतिक्रिया नहीं है: आपकी गणनाएँ और अतिरिक्त फ़ील्ड अलग होंगे।

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 }
}

पहली प्रतिक्रिया में completion_tokens 16 है, ठीक कैप के बराबर, और टेक्स्ट "usu" पर समाप्त होता है। दूसरी में मॉडल 24 टोकन पर रुका, जो 200 के कैप से काफी नीचे है, क्योंकि वह पूरा हो चुका था।

यह पता लगाने के लिए कि क्या हुआ, इस क्रम में जाएँ:

  1. finish_reason देखें। अगर यह stop है, तो उत्तर पूर्ण है। मॉडल ने समाप्त करना चुना, या आपके सेट किए स्टॉप सीक्वेंस पर पहुँचा। अगर यह length है, तो किसी सीमा ने उत्तर काट दिया, और अगला चरण बताता है कि कौन-सी। अन्य मान भी होते हैं, जैसे content_filter और tool_calls; इनमें से कोई भी लंबाई की समस्या नहीं है।
  2. completion_tokens की तुलना आपके भेजे max_tokens से करें। अगर वे बराबर या लगभग बराबर हैं, तो आप max_tokens पर पहुँचे।
  3. अगर completion_tokens, max_tokens से काफी नीचे है और prompt_tokens बड़ा है, तो संभवतः कॉन्टेक्स्ट विंडो भर गई। DeepSeek का संदर्भ दोनों स्थितियों के लिए length का उपयोग करता है, इसलिए अकेला फ़ील्ड उन्हें अलग नहीं कर सकता; चरण 2 की तुलना से आप अंतर बता सकते हैं। Anthropic और Z.ai का दस्तावेज़ दूसरी स्थिति को अलग से model_context_window_exceeded नाम देता है। यह देखने के लिए कि आपको कौन-सा नाम मिलता है, अपनी प्रतिक्रियाओं में फ़ील्ड देखें।

तीनों विवरण डेवलपर्स के दस्तावेज़ से हैं, 20 अक्टूबर 2026 को जाँचे गए: DeepSeek, Anthropic और Z.ai।

आपको क्या दिखता है finish_reason कारण क्या करें
कटा हुआ, completion_tokens, max_tokens के बराबर length max_tokens पूरा हुआ max_tokens बढ़ाएँ, या उत्तर भागों में माँगें
कटा हुआ, completion_tokens, max_tokens से काफी नीचे, लंबा इनपुट length (या कुछ APIs में model_context_window_exceeded) कॉन्टेक्स्ट विंडो भरी इनपुट या इतिहास छोटा करें, या बड़ी विंडो वाला मॉडल चुनें
पूर्ण लेकिन आपकी इच्छा से छोटा stop मॉडल ने समाप्त किया, या स्टॉप सीक्वेंस चला अधिक विवरण माँगें; stop पैरामीटर जाँचें
कोई टेक्स्ट नहीं, या इनकार content_filter प्रतिक्रिया फ़िल्टर की गई अनुरोध दोबारा लिखें
कोई टेक्स्ट नहीं, बजाय इसके टूल अनुरोध tool_calls मॉडल टूल कॉल करना चाहता है टूल चलाएँ और परिणाम वापस भेजें

समाधान 1: max_tokens बढ़ाएँ#

सबसे आम कारण ठीक करने में सबसे आसान भी है। max_tokens स्वयं सेट करें, ताकि आपको पता हो कि कौन-सा कैप लागू है। डिफ़ॉल्ट पर भरोसा न करें।

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)

यह कॉल का स्वरूप दिखाता है। यहाँ कुंजी YOUR_API_KEY के रूप में जाती है; असली कुंजी को साझा किए गए कोड से बाहर रखें।

संख्या बढ़ाना केवल मॉडल की अपनी सीमा तक ही मदद करता है। यहाँ CheapTokens पर सीमाएँ हैं, 20 अक्टूबर 2026 को CheapTokens मॉडल सूची के विरुद्ध जाँची गई:

मॉडल मॉडल ID प्रति उत्तर अधिकतम आउटपुट कॉन्टेक्स्ट
DeepSeek-V4-Flash (0731) deepseek-ai/DeepSeek-V4-Flash-0731 32,768 टोकन 380K
GLM-5.3-Flash zai-org/GLM-5.3-Flash 8,192 टोकन 390K
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 8,192 टोकन 200K

डेवलपर्स अपने स्वयं के APIs के लिए अपनी सीमाएँ प्रकाशित करते हैं। उदाहरण के लिए, Z.ai GLM-5 श्रृंखला के लिए 128K तक आउटपुट सूचीबद्ध करता है। वे CheapTokens पर GLM-5.3-Flash की सीमाएँ नहीं हैं, जो प्रति उत्तर 8,192 टोकन है। CheapTokens पर आप जो भी बनाएँ, उसके लिए ऊपर दी गई तालिका का उपयोग करें।

समाधान 2: जब कॉन्टेक्स्ट विंडो भरी हो#

चैट में, हर संदेश के साथ पूरा इतिहास फिर से भेजा जाता है, इसलिए हर बार इनपुट बढ़ता है। कॉन्टेक्स्ट विंडो को उस इतिहास और नए उत्तर को रखना होता है। अगर अकेला इतिहास ही लगभग पूरा भर देता है, तो उत्तर के लिए लगभग कोई जगह नहीं बचती।

ये विंडो बड़ी हैं, और एक छोटा प्रश्न उन्हें नहीं भरेगा। लंबी चैट और पेस्ट किए गए दस्तावेज़ भरेंगे। क्या मदद करता है:

  • पुरानी चैट जारी रखने के बजाय नए काम के लिए नई चैट शुरू करें।
  • मॉडल से अब तक की बातचीत का सारांश बनाने को कहें, और केवल सारांश आगे ले जाएँ।
  • पुराने संदेश और अटैचमेंट काटें जिनकी अब आवश्यकता नहीं है।
  • अगर इनपुट ही बहुत बड़ा है, तो सबसे बड़ी विंडो वाला मॉडल चुनें। हमारे बीच वह GLM-5.3-Flash है, 390K के साथ। इसकी आउटपुट सीमा 8,192 टोकन है, इसलिए लंबा परिणाम भागों में माँगें।

समाधान 3: लंबा उत्तर भागों में पाएँ#

जब आप जो उत्तर चाहते हैं वह मॉडल की आउटपुट सीमा से लंबा हो, तो कोई भी सेटिंग उसे एक उत्तर में नहीं बैठा सकती। उसे टुकड़ों में माँगें: जब finish_reason, length हो, तो आंशिक उत्तर वापस भेजें और मॉडल से जारी रखने को कहें।

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)

वही चेतावनी: पैटर्न का उदाहरण, रिकॉर्ड किया गया रन नहीं। भागों के बीच के जोड़ों को पढ़ें। मॉडल कभी-कभी जोड़ पर कोई वाक्य दोहरा देता है या सूची फिर से शुरू कर देता है।

हर दौर अब तक का सब कुछ इनपुट के रूप में फिर से भेजता है, और हर आउटपुट टोकन का बिल बनता है। लंबे उत्तर का खर्च छोटे से अधिक होता है। यहाँ 2,000 टोकन इनपुट पर आठ-हज़ार-टोकन का उत्तर है, जो तालिका के हर मॉडल में फिट बैठता है:

मॉडल लागत OpenRouter
GLM-5.3-Flash $0.00036 $0.00069
DeepSeek-V4-Flash $0.00083 $0.0013
MiniMax-M2.7 $0.0013 $0.0102

कुल 2,000 इनपुट और 8,000 आउटपुट टोकन। प्रति 1M टोकन की कीमतें वर्तमान हैं और हमारे टैरिफ के साथ बदलती रहती हैं; OpenRouter कॉलम समान कार्यभार के लिए संदर्भ कीमतें दिखाता है।

जब finish_reason stop हो#

stop का अर्थ है कि मॉडल ने उत्तर समाप्त किया। अगर यह आपकी इच्छा से जल्दी समाप्त हुआ, तो यह सीमा की समस्या नहीं है और बड़ा max_tokens कुछ नहीं बदलेगा। बताएँ कि आप क्या चाहते हैं: लंबाई, अनुभाग, विवरण का स्तर। यह भी जाँचें कि क्या अनुरोध stop पैरामीटर सेट करता है; उत्तर में दिखने वाला स्टॉप सीक्वेंस उसे तुरंत समाप्त कर देता है।

उत्तर की लंबाई के अनुसार मॉडल चुनना#

आपको जो उत्तर चाहिए उससे शुरू करें। अगर वह 8,192 टोकन में फिट बैठता है, तो MiniMax-M2.7 (MiniMaxAI/MiniMax-M2.7) CheapTokens पर इसे संभाल लेता है। इसका आउटपुट OpenRouter संदर्भ मूल्य से सस्ता है, और इसका बिल $0.15 पर होता है (प्रति 1M आउटपुट टोकन)। मूल्य किसी भी घंटे समान है, कोई पीक आवर्स नहीं हैं, और API OpenAI और Anthropic के साथ संगत है।

यहाँ हर मॉडल के लिए वर्तमान मूल्य सूची है:

मॉडल संदर्भ इनपुट $/1M आउटपुट $/1M OpenRouter इनपुट OpenRouter आउटपुट
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

कीमतें USD प्रति 1M टोकन में हैं। OpenRouter के आंकड़े तुलना के लिए दिखाए गए हैं और बदल सकते हैं।

अगर आपने अभी तक कोई अनुरोध नहीं भेजा है, तो Your first API request with CheapTokens इसे समझाता है। टोकन क्या है और इनपुट और आउटपुट अलग-अलग क्यों गिने जाते हैं, यह जानने के लिए What is a token in AI? देखें।

हर मॉडल के एंडपॉइंट, मॉडल आईडी और सीमाएँ CheapTokens docs में हैं।