الذكاء الاصطناعي للمبتدئيندليل
لماذا تتوقف إجابة الذكاء الاصطناعي في منتصف الجملة؟ شرح max_tokens ونافذة السياق وfinish_reason
إجابة الذكاء الاصطناعي التي تتوقف في منتصف الجملة بلغت حدًّا. اقرأ finish_reason، وميّز max_tokens من نافذة سياق ممتلئة، وتحقق من حد مخرجات كل نموذج.

في هذه الصفحة
الإجابة التي تتوقف في منتصف جملة يكون قد قطعها حدٌّ في الغالب. لم يفقد النموذج خيط أفكاره؛ بل نفدت المساحة المتاحة للطلب. تخبرك الاستجابة أي حدٍّ كان: اقرأ finish_reason. تعني length أن حدًّا قد بلغ. وتعني stop أن النموذج أنهى من تلقاء نفسه.
ثلاثة أمور تحدد طول الإجابة. بمجرد أن تعرف أيها كان السبب، يستغرق الإصلاح دقيقة.
ثلاثة حدود تقطع الإجابة#
max_tokensهو سقف تحدده في الطلب. عندما تبلغ الإجابة هذا السقف، يتوقف التوليد، حتى في منتصف كلمة. يعرّفه مرجع واجهة DeepSeek بأنه الحد الأقصى لعدد الرموز المولّدة في الإكمال.- حد مخرجات النموذج هو السقف لإجابة واحدة من ذلك النموذج. إنه خاص بالنموذج، لذا أبقِ
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كبيرًا، فمن المحتمل أن نافذة السياق قد امتلأت. يستخدم مرجع DeepSeeklengthللحالتين، لذا لا يمكن للحقل وحده التمييز بينهما؛ والمقارنة في الخطوة 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 (أو 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:
قم بتمرير الجدول لليمين →
| النموذج | معرّف النموذج | الحد الأقصى للمخرجات لكل إجابة | السياق |
|---|---|---|---|
| DeepSeek-V4-Flash (0731) | deepseek- |
32,768 رمزًا | 380K |
| GLM-5.3-Flash | zai- |
8,192 رمزًا | 390K |
| MiniMax-M2.7 | MiniMaxAI/ |
8,192 رمزًا | 200K |
ينشر المطورون حدودهم الخاصة لواجهاتهم الخاصة. على سبيل المثال، تسرد Z.ai ما يصل إلى 128K مخرجات لسلسلة GLM-5. هذه ليست حدود GLM-5.3-Flash على CheapTokens، وهي 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 رمز إخراج إجمالًا. الأسعار لكل مليون رمز حالية وتتغير مع تعريفاتنا؛ يعرض عمود OpenRouter أسعارًا مرجعية لنفس حجم العمل.
عندما يكون finish_reason هو stop#
تعني stop أن النموذج أنهى الإجابة. إذا انتهى قبل ما أردت، فليست هذه مشكلة حد، ولن يغيّر max_tokens الأكبر شيئًا. قل ما تريد: الطول، والأقسام، ومستوى التفصيل. تحقق أيضًا مما إذا كان الطلب يضبط معامل stop؛ فتسلسل توقف يظهر في الإجابة ينهيها في الحال.
اختيار نموذج حسب طول الإجابة#
ابدأ من الإجابة التي تحتاجها. إذا كانت تتسع في 8,192 رمزًا، فـ MiniMax-M2.7 (MiniMaxAI/) يتولاها على CheapTokens. مخرجاته أرخص من سعر OpenRouter المرجعي، ويُحتسب بسعر $0.15 (لكل 1M رمز مخرجات). السعر نفسه في أي ساعة، ولا توجد ساعات ذروة، والواجهة متوافقة مع 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 |
الأسعار بالدولار الأمريكي لكل مليون رمز (token). أرقام OpenRouter معروضة للمقارنة وقد تتغير.
إذا لم ترسل طلبًا بعد، فـ Your first API request with CheapTokens يشرح ذلك خطوة بخطوة. ولمعرفة ما هو الرمز ولماذا تُحتسب المدخلات والمخرجات بشكل منفصل، راجع What is a token in AI?.
نقاط النهاية ومعرّفات النماذج والحدود لكل نموذج موجودة في CheapTokens docs.



