بايتات، لا توكنز
حدود التوكنز وحدود البايتات تفشل عند بابين مختلفين. فيض نافذة السياق يحدث داخل محاسبة النموذج، بعد قبول طلبك وقراءته. أما الخطأ 413 فيحدث عند الرصيف: يُفحَص الحجم الخام لجسم الطلب مقابل سقف لكل نقطة، وعلى API المباشر يخص هذا الفحص Cloudflare، التي ترفض الطلب قبل أن يصل خوادم Anthropic أصلاً. وعلى Messages API، السقف 32 ميغابايت.
هذا الانقسام هو ما يربك الدقيقين. فالموجّه الجالس مرتاحاً داخل نافذة السياق يرتد رغم ذلك، لأن التوكنز والميغابايت يقيسان أشياء مختلفة. النص الصِّرف لا يكاد يوصلك إلى 32 ميغابايت قط، أما المرفقات فتفعل. يركب المحتوى الثنائي داخل جسم JSON بصيغة base64، التي تضيف نحو الثلث إلى حجمه، فكومة صور مع سجل طويل تبلغ الجدار أبكر بكثير مما يوحي به عدد التوكنز.
الجدار بحسب النقطة
| النقطة | أقصى حجم للطلب |
|---|---|
| Messages API | 32 ميغابايت |
| Token Counting API | 32 ميغابايت |
| Batch API | 256 ميغابايت |
| Files API | 500 ميغابايت |
لاحظ تطابق الصفّين الأولين: يتشارك Token Counting API سقف Messages، فالحمولة الضخمة لا يمكن حتى فحص حجمها بإرسالها إلى هناك. ترتد عند الجدار نفسه، ما يعني أن العدّ لا بد أن يحدث على جانبك من السلك.
ماذا يعود إليك
{
"type": "error",
"error": {
"type": "request_too_large",
"message": "Request exceeds the maximum allowed number of bytes."
},
"request_id": "req_011CSHoEeqs5C35K2UUqR7Fy"
}
المظروف نفسه لكل خطأ من Anthropic: فرّع بناءً على حقل type، وفي كود الـ SDK التقط صنف الاستثناء المعنون للحالة بدل مطابقة نص الرسالة. تحمل الردود ترويسة request-id مسبوقة بـ req_ تكشفها الـ SDKs؛ اقتبسها إن تحوّل الإخفاق إلى محادثة دعم.
قلّص أو انقل
يبدأ الحل بقياس لن يفعله الـ SDK نيابةً عنك، فمكتبات العميل ترسل ما تسلّمها إياه. وتحسم دالة واحدة في غلافك الأمر:
# Python: قِس الجسم قبل أن تفعل الحافة
import json
CAP_MB = 32 # سقف Messages API، بالبايتات لا التوكنز
def body_size_mb(payload: dict) -> float:
return len(json.dumps(payload).encode("utf-8")) / 1_048_576
size = body_size_mb(payload)
if size >= CAP_MB:
# المتهم المعتاد: صور base64 مضمّنة داخل كتل المحتوى
reroute(payload) # الأصول إلى Files API، والدفعات إلى Batch
حين يعود الرقم كبيراً، يكون المتهم غالباً وسائط مضمّنة، وخريطة النقل تتبع الجدول أعلاه. الأصول الكبيرة مكانها Files API بسقفه البالغ 500 ميغابايت، تُرفع مرة وتُشار إليها من الرسالة بدل لصقها فيها. والمهام بالدفعات مكانها Batch API، الذي يأخذ 256 ميغابايت لكل طلب ويعمل بخصم 50% على تسعير Claude القياسي. توجّه وثائق Anthropic أيضاً العمل الطويل، خاصةً ما يتجاوز 10 دقائق، نحو البث أو Batch API بدل استدعاء متزامن واحد ضخم.
إن كان إخفاقك بشكل توكنز لا بشكل بايتات، فتلك صفحة أخرى: الطلب اتّسع في السلك لكنه فاض نافذة النموذج. تفصيل context_length_exceeded يغطي خطة جانب التوكنز، ومقارنة نوافذ السياق تُظهر أي النماذج يمنحك متّسعاً يُغنيك عن الاقتطاع.