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

इस पृष्ठ पर
जो उत्तर वाक्य के बीच में रुक जाता है, वह लगभग हमेशा किसी सीमा के कारण कटा होता है। मॉडल अपना विचार-प्रवाह नहीं खोता; अनुरोध में जगह खत्म हो जाती है। प्रतिक्रिया बताती है कि कौन-सी सीमा थी: 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 पर।
उदाहरण के लिए, यह कोई रिकॉर्ड की गई प्रतिक्रिया नहीं है: आपकी गणनाएँ और अतिरिक्त फ़ील्ड अलग होंगे।
{
"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 }
}{
"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_ 16 है, ठीक कैप के बराबर, और टेक्स्ट "usu" पर समाप्त होता है। दूसरी में मॉडल 24 टोकन पर रुका, जो 200 के कैप से काफी नीचे है, क्योंकि वह पूरा हो चुका था।
यह पता लगाने के लिए कि क्या हुआ, इस क्रम में जाएँ:
finish_reasonदेखें। अगर यहstopहै, तो उत्तर पूर्ण है। मॉडल ने समाप्त करना चुना, या आपके सेट किए स्टॉप सीक्वेंस पर पहुँचा। अगर यहlengthहै, तो किसी सीमा ने उत्तर काट दिया, और अगला चरण बताता है कि कौन-सी। अन्य मान भी होते हैं, जैसेcontent_filterऔरtool_calls; इनमें से कोई भी लंबाई की समस्या नहीं है।completion_की तुलना आपके भेजेtokens max_tokensसे करें। अगर वे बराबर या लगभग बराबर हैं, तो आपmax_tokensपर पहुँचे।- अगर
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_, max_tokens के बराबर |
length |
max_tokens पूरा हुआ |
max_tokens बढ़ाएँ, या उत्तर भागों में माँगें |
कटा हुआ, completion_, max_tokens से काफी नीचे, लंबा इनपुट |
length (या कुछ APIs में model_) |
कॉन्टेक्स्ट विंडो भरी | इनपुट या इतिहास छोटा करें, या बड़ी विंडो वाला मॉडल चुनें |
| पूर्ण लेकिन आपकी इच्छा से छोटा | stop |
मॉडल ने समाप्त किया, या स्टॉप सीक्वेंस चला | अधिक विवरण माँगें; stop पैरामीटर जाँचें |
| कोई टेक्स्ट नहीं, या इनकार | content_filter |
प्रतिक्रिया फ़िल्टर की गई | अनुरोध दोबारा लिखें |
| कोई टेक्स्ट नहीं, बजाय इसके टूल अनुरोध | tool_calls |
मॉडल टूल कॉल करना चाहता है | टूल चलाएँ और परिणाम वापस भेजें |
समाधान 1: max_tokens बढ़ाएँ#
सबसे आम कारण ठीक करने में सबसे आसान भी है। max_tokens स्वयं सेट करें, ताकि आपको पता हो कि कौन-सा कैप लागू है। डिफ़ॉल्ट पर भरोसा न करें।
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- |
32,768 टोकन | 380K |
| GLM-5.3-Flash | zai- |
8,192 टोकन | 390K |
| MiniMax-M2.7 | MiniMaxAI/ |
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 हो, तो आंशिक उत्तर वापस भेजें और मॉडल से जारी रखने को कहें।
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 टोकन इनपुट पर आठ-हज़ार-टोकन का उत्तर है, जो तालिका के हर मॉडल में फिट बैठता है:
| मॉडल | इनपुट $/1M | आउटपुट $/1M | लागत | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.00036 | $0.00069 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00083 | $0.0013 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0013 | $0.0102 |
कुल 2,000 इनपुट और 8,000 आउटपुट टोकन। प्रति 1M टोकन की कीमतें वर्तमान हैं और हमारे टैरिफ के साथ बदलती रहती हैं; OpenRouter कॉलम समान कार्यभार के लिए संदर्भ कीमतें दिखाता है।
जब finish_reason stop हो#
stop का अर्थ है कि मॉडल ने उत्तर समाप्त किया। अगर यह आपकी इच्छा से जल्दी समाप्त हुआ, तो यह सीमा की समस्या नहीं है और बड़ा max_tokens कुछ नहीं बदलेगा। बताएँ कि आप क्या चाहते हैं: लंबाई, अनुभाग, विवरण का स्तर। यह भी जाँचें कि क्या अनुरोध stop पैरामीटर सेट करता है; उत्तर में दिखने वाला स्टॉप सीक्वेंस उसे तुरंत समाप्त कर देता है।
उत्तर की लंबाई के अनुसार मॉडल चुनना#
आपको जो उत्तर चाहिए उससे शुरू करें। अगर वह 8,192 टोकन में फिट बैठता है, तो MiniMax-M2.7 (MiniMaxAI/) 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 में हैं।



