OpenAI context_length_exceeded: معناه وسببه وحله

خطأ 400 حسابي محض: على النافذة أن تحمل كل ما ترسله زائداً كل ما طلبت من النموذج أن يكتبه لك، وOpenAI يفحص هذا المجموع قبل أن يبدأ أي عمل.

بقلم فريق benchr · · متحقَّق منه مقابل توثيق الأخطاء من OpenAI، 12 يونيو 2026

OpenAIHTTP 400الخطورة: متوسطةالسياق

الحساب الذي لا يجريه أحد

كل طلب يُنفق نافذة السياق من طرفيها. جانب الإدخال هو كل ما ترسله: موجّه النظام، تاريخ المحادثة، القطع المسترجَعة، رسالة المستخدم الأخيرة. وجانب الإخراج هو max_tokens، ميزانية الإكمال التي تجنّبها الـ API قبل توليد كلمة واحدة. الإدخال زائداً الحجز يجب أن يتّسع داخل النافذة، وOpenAI يجري ذلك الفحص أولاً.

المجموع نادراً ما ينكسر في قفزة واحدة. بل يزحف.

تطبيق دردشة يُلحق كل تبادل بالتاريخ ولا يقلّم أبداً. خط استرجاع يحشو اثنتي عشرة قطعة في الموجّه حيث تكفي خمس للإجابة. أحدهم يضبط max_tokens بسخاء لأن التوكنز التي لا تولّدها مجانية. كل قرار معقول وحده؛ لكن المجموع يتجاوز النافذة ببضعة آلاف توكن — وكل طلب بعد تلك النقطة يفشل بالطريقة نفسها.

ما الذي تُرجعه الـ API

{
  "error": {
    "message": "This model's maximum context length is 400000 tokens. However, your messages resulted in 412031 tokens. Please reduce the length of the messages.",
    "type": "invalid_request_error",
    "code": "context_length_exceeded"
  }
}

الرقمان يتغيّران بحسب النموذج والطلب؛ أما الشكل فلا. النوع يبقى invalid_request_error، والكود يبقى context_length_exceeded، والرسالة تذكر النافذة بجوار مجموعك، فالفجوة التي عليك ردمها مطبوعة في صلب الفشل. اقرأه قياساً، لا رفضاً.

احسب قبل أن ترسل

مكتبة tiktoken، مُجزّئ OpenAI بلغة Python، تحوّل التجاوز إلى شيء تمسكه في التطوير بدل الإنتاج. رمّز الرسائل، أضِف الحجز، وتحقّق من المجموع:

# pre-flight: fail in dev, not in prod
import tiktoken

WINDOW = 400_000      # GPT-5's context window
RESERVED = 8_000      # your max_tokens setting

enc = tiktoken.encoding_for_model("gpt-5")
total = sum(len(enc.encode(m["content"])) for m in messages)

assert total + RESERVED <= WINDOW, (
    f"over budget: {total} prompt + {RESERVED} reserved > {WINDOW}"
)

اترك لنفسك متّسعاً تحت الـ assert، فتنسيق الرسائل يحمل عبئاً صغيراً لكل رسالة يفوته الترميز الخام. الدقّة ليست المقصد. المقصد أن طلباً ضخماً يفشل في اختباراتك، لا في وجه مستخدميك.

حين لا يكون التقليم هو الجواب

تقليم التاريخ وتقليص max_tokens يحلّان التجاوز العرَضي. لكنهما لا يحلّان حِملاً أكبر من النموذج.

يعطيك GPT-5 نافذة 400K مع إخراج يصل إلى 128K مقابل ‎$1.25‎ إدخالاً و‎$10‎ إخراجاً لكل مليون توكن. GPT-5.5 يمدّ النافذة إلى 1,050,000 توكن بـ ‎$5‎ و‎$30‎. GPT-5.4 يقدّم نافذة مليون توكن بـ ‎$2.50‎ و‎$15‎ — معظم المساحة بنصف المال. وتطابق Claude Sonnet 4.6 نافذة المليون توكن بـ ‎$3‎ و‎$15‎ إن كنت منفتحاً على مغادرة OpenAI لمهام السياق الطويل. مقارنة نوافذ السياق تضع هذه الخيارات مقابل أحجام مستندات حقيقية فيصير الاختيار دقائق، لا سباق ماراثون.

أسئلة شائعة

هل يُحتسب max_tokens ضمن حد السياق؟

نعم. تحجز الـ API ميزانية إكمالك الكاملة مقدماً، فلا بد أن يتّسع توكنز الموجّه زائداً max_tokens في النافذة معاً. الموجّه الذي يتّسع وحده قد يفشل رغم ذلك حالما يستقرّ الحجز فوقه.

لماذا يفشل بينما يبدو موجّهي قصيراً؟

التوكنز ليست كلمات، والموجّه الذي تراه ليس الطلب الذي ترسله. التاريخ يركب مع كل استدعاء، وموجّهات النظام وقطع الاسترجاع تتكدّس تحته، والكود أو النص غير الإنجليزي قد يُجزّأ أثقل مما يُقرأ.

هل أُجزّئ الإدخال أم أبدّل النموذج؟

جزّئ حين تكون المهمة على شكل استرجاع ولا تهمّ إلا شرائح من المستند في كل مرة. بدّل حين يحتاج النموذج المستند كله في المشهد دفعةً واحدة؛ نافذة المليون توكن تكلّف أقل من الهندسة حول نافذة 400K تجاوزتها.

سجل التغييرات

  • — نُشر. تم التحقق من رمز الحالة وشكل الاستجابة وحساب الإدخال-زائد-الحجز مقابل دليل أكواد أخطاء OpenAI.

المصادر

  • OpenAI error codes guide: developers.openai.com/api/docs/guides/error-codes (تم التحقق في 12 يونيو 2026)
  • benchr api-errors.json: المُدخَل المهيكل خلف هذه الصفحة