خطأ request_too_large من Anthropic: المعنى والسبب والحل

سيحمل Claude Sonnet 4.6 مليون توكن من السياق. لكن Cloudflare لن يمرّر 33 ميغابايت من JSON. الخطأ 413 يتعلق بالرقم الثاني، والرقم الثاني هو ما لا يقيسه أحد.

بقلم فريق benchr · · تم التحقق من توثيق أخطاء API لدى Anthropic في 12 يونيو 2026

AnthropicHTTP 413الخطورة: متوسطةحجم الطلب

بايتات، لا توكنز

حدود التوكنز وحدود البايتات تفشل عند بابين مختلفين. فيض نافذة السياق يحدث داخل محاسبة النموذج، بعد قبول طلبك وقراءته. أما الخطأ 413 فيحدث عند الرصيف: يُفحَص الحجم الخام لجسم الطلب مقابل سقف لكل نقطة، وعلى API المباشر يخص هذا الفحص Cloudflare، التي ترفض الطلب قبل أن يصل خوادم Anthropic أصلاً. وعلى Messages API، السقف 32 ميغابايت.

هذا الانقسام هو ما يربك الدقيقين. فالموجّه الجالس مرتاحاً داخل نافذة السياق يرتد رغم ذلك، لأن التوكنز والميغابايت يقيسان أشياء مختلفة. النص الصِّرف لا يكاد يوصلك إلى 32 ميغابايت قط، أما المرفقات فتفعل. يركب المحتوى الثنائي داخل جسم JSON بصيغة base64، التي تضيف نحو الثلث إلى حجمه، فكومة صور مع سجل طويل تبلغ الجدار أبكر بكثير مما يوحي به عدد التوكنز.

الجدار بحسب النقطة

سقوف حجم الطلب لدى Anthropic بحسب النقطة، وفق توثيق أخطاء API
النقطةأقصى حجم للطلب
Messages API32 ميغابايت
Token Counting API32 ميغابايت
Batch API256 ميغابايت
Files API500 ميغابايت

لاحظ تطابق الصفّين الأولين: يتشارك 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 يغطي خطة جانب التوكنز، ومقارنة نوافذ السياق تُظهر أي النماذج يمنحك متّسعاً يُغنيك عن الاقتطاع.

أسئلة شائعة

لماذا وصلني خطأ 413 وتوكنزي تتّسع في النافذة؟

لأن السقف يحسب البايتات لا التوكنز. تسافر المرفقات بصيغة base64 داخل جسم JSON وتنفخه إلى ما يتجاوز بكثير ما يوحي به عدد التوكنز، فقد يكون الطلب متواضعاً بالتوكنز وضخماً بالميغابايت في الوقت نفسه.

هل يحميني الـ SDK من الطلبات الضخمة؟

لا. مكتبات العميل ترسل ما تعطيها، والرفض يقع عند الحافة. قِس len(json.dumps(payload).encode()) قبل الإرسال وأعد توجيه كل ما يقترب من 32 ميغابايت.

أين مكان الملفات الكبيرة؟

في Files API، الذي يقبل حتى 500 ميغابايت. ارفع الملف مرة واحدة، وأشر إليه من رسائلك، فتبقى حمولة Messages صغيرة مهما ثقُلت المادة المصدر.

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

  • — نُشر. تم التحقق من سقوف البايتات لكل نقطة، وحدّ Cloudflare، وشكل الرد، وفق توثيق أخطاء API لدى Anthropic.

المراجع

  • Anthropic API errors — platform.claude.com/docs/en/api/errors (تم التحقق في 12 يونيو 2026)
  • benchr api-errors.json، السجل المُهيكَل لهذا الخطأ