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

تتحقق 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}"
)

اترك هامشاً تحت الحد، لأن تنسيق الرسائل يضيف عدداً صغيراً من التوكنات قد لا يظهر في حساب النص الخام. الهدف أن تكتشف الطلب الكبير في الاختبار قبل وصوله إلى المستخدم.

متى تستخدم نموذجاً بسياق أكبر؟

تقليم التاريخ وتقليص 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: المُدخَل المهيكل خلف هذه الصفحة