|

لا تتسرع في تغيير النموذج عند مواجهة 429: 3 خطوات لتحديد مصدر تحديد المعدل، و5 إعدادات للتراجع وتجاوز الأعطال

لا تتسرع في تغيير النموذج عند مواجهة 429: 3 خطوات لتحديد مصدر تحديد المعدل، و5 إعدادات للتراجع وتجاوز الأعطال

ملاحظة المؤلف: لا داعي لتغيير النموذج بمجرد رؤية 429. تستعرض هذه المقالة تشخيصًا من ثلاث خطوات لتحديد ما إذا كان تحديد المعدل قادمًا من مزوّد المنبع أو من البوابة أو من الفئة المجانية، ثم تعرض طرق إعداد التراجع الأُسّي وRetry-After والتبديل عند الفشل.

عند تشغيل مهام الدُفعات في الساعات الأولى من الفجر، تظهر فجأة شاشة كاملة من السجلات تحمل 429 Too Many Requests، فيكون رد الفعل الأول لدى كثيرين: “هذا النموذج لا يصلح، لنغيّره بسرعة”. هذا الحكم غالبًا ما يكون متسرّعًا. فالرمز 429 يقول فقط إن “أحدهم قيّدك”، لكنه لا يقول من هو، ولا يوضح بُعد التقييد. الفكرة الأساسية لهذه المقالة هي حدّد مصدر تحديد المعدل أولًا، ثم قرّر بين الانتظار أو التبديل.

هذه ليست مقالة عامة عن إعادة المحاولة. سنتبع ترتيب التشخيص الفعلي، ونفكّك رسالة الخطأ وترويسات الاستجابة وأبعاد تحديد المعدل، ثم نقدّم توصيات لإعداد معاملات التراجع وسلسلة التبديل عند الفشل.

القيمة الجوهرية: بعد قراءة هذه المقالة ستستطيع خلال دقائق تحديد ما إذا كان الـ 429 قادمًا من مزوّد المنبع أو من بوابة وسيطة أو من حصة الفئة المجانية، وستكون قادرًا على ضبط استراتيجية تحمّل أخطاء لتطبيقك تعمل بمبدأ “انتظر حين يجب الانتظار، وبدّل حين يجب التبديل”.

http-429-rate-limit-diagnosis-backoff-failover-ar-image-0


النقاط الجوهرية لتحديد مصدر تقييد المعدل 429

الرمز 429 هو رمز الحالة «طلبات كثيرة جدًا» في معيار HTTP. وفي سياق واجهات API لنماذج اللغة الكبيرة، قد يُرجع من أي طبقة في سلسلة الاستدعاء. يلخص الجدول التالي المصادر الثلاثة الأكثر شيوعًا، وطريقة التعامل الصحيحة مع كل منها.

مصدر تقييد المعدل السمات النموذجية هل ينبغي تغيير النموذج؟ المعالجة الموصى بها
مزوّد النموذج في المنبع يحمل جسم الخطأ نوع الخطأ وصياغته الخاصة بالمزوّد، وتتضمن رؤوس الاستجابة حقول تقييد المعدل الخاصة به عادةً لا تراجع وفق Retry-After، وخفض التزامن أو طلب رفع الحصة عند الحاجة
بوابة وسيطة/منصة تجميع صياغة الخطأ تأتي من البوابة، وتشير إلى معدل على مستوى الحساب أو المجموعة لا تحقق من حصة البوابة وإعدادات التزامن، أو بدّل مجموعة البوابة
الطبقة المجانية/رصيد التجربة تشير إلى حصة مجانية أو عدد مرات يومي أو سعة غير كافية حسب الحالة قم بالترقية إلى طبقة مدفوعة، أو انتقل إلى نموذج مشابه تتوفر له سعة

لماذا لا يعني الرمز 429 أن النموذج معطّل

عندما يكون النموذج نفسه غير متاح، تكون الإشارة الأكثر شيوعًا أخطاء سلسلة 5xx. على سبيل المثال، يُرجع الحمل الزائد لدى Anthropic الخطأ 529 overloaded_error، بينما يشيع ظهور 502 و503 عند خلل البوابة أو موازن الحمل. تدل رموز الحالة هذه على أن الخادم غير قادر مؤقتًا على معالجة الطلبات، وهو أمر مختلف عن «تجاوز حسابك للحصة».

أما 429 فيحمل دلالة واضحة على الجهة المعنية: قاعدة تقييد المعدل تستهدفك أنت، وقد تكون مفتاح API الخاص بك، أو مؤسستك، أو الطبقة المجانية التي تنتمي إليها، أو المعدل الذي خصصته لك البوابة. قد يؤدي تغيير النموذج أحيانًا إلى تجاوز المشكلة، لكن إذا كان تقييد المعدل نابعًا من حصة على مستوى حساب البوابة، فسوف تصطدم بالجدار نفسه حتى لو غيّرت النموذج. وإذا كان التقييد نابعًا من الحد الأقصى لعدد الرموز (token) في الدقيقة لدى المزوّد في المنبع، فانتظار بضع ثوانٍ كفيل بالتعافي، بينما يضيف تغيير النموذج عدم يقين في جودة المخرجات.

وتؤكد ذلك أيضًا ملاحظات استكشاف الأخطاء التي جمعها طرف ثالث حول Claude Code: فعندما يصادف Claude Code الخطأ 429 يعرض Request rejected (429)، يتبعه نص الخادم الحرفي، وهذا النص نفسه هو ما يخبرك ما إذا كان التقييد صادرًا عن Anthropic أو عن البوابة أو عن الطبقة المجانية. لذلك تبدأ عملية استكشاف الأخطاء دائمًا بقراءة رسالة الخطأ كاملة، لا بالاكتفاء بالنظر إلى رمز الحالة.

الفرق بين 429 ورموز الحالة المجاورة

لتجنب الخلط بين أخطاء مختلفة، يعرض الجدول التالي بعض رموز الحالة التي قد تُلبس في استدعاء نموذج لغة كبير مع الرمز 429.

رمز الحالة المعنى الجهة المسؤولة هل يصلح لإعادة المحاولة؟ هل يصلح للتبديل عند الفشل؟
429 طلبات كثيرة جدًا، مع تجاوز حد المعدل أو الحصة حصة جهة الاستدعاء نعم، مع تراجع زمني التبديل بعد أن لا يجدي التراجع
529 الحمل الزائد في المنبع (خاص بـ Anthropic) سعة الخادم نعم، مع تراجع قصير نعم
503 الخدمة غير متاحة مؤقتًا الخادم أو البوابة نعم نعم
500/502 خطأ داخلي أو خطأ في البوابة الخادم أو البوابة عدد محدود من المحاولات نعم
400/401/403 مشكلة في المعاملات أو المصادقة أو الصلاحيات إعدادات جهة الاستدعاء لا لا، يلزم إصلاح الإعدادات

في هذا الجدول تفصيل يسهل إغفاله: آلية fallbackModel في Claude Code لا تُفعَّل — وفق اختبارات طرف ثالث — إلا عند الحمل الزائد 529، وتحاول ما يصل إلى 3 نماذج احتياطية، وليس عند 429. وهذا يعني أن مصممي الأداة أنفسهم يرون أن أول رد فعل تجاه 429 ينبغي أن يكون التراجع الزمني، لا تغيير النموذج.

http-429-rate-limit-diagnosis-backoff-failover-ar-image-1

كيف تحدد مصدر تحديد المعدل 429: تشخيص من 3 خطوات

فيما يلي عملية تشخيص استجابة 429 يمكنك اتباعها مباشرة. الخطوات الثلاث مرتبة من الأقل تكلفة إلى الأعلى، وفي معظم الحالات يمكنك تحديد المصدر من الخطوة الأولى.

الخطوة 1: اقرأ جسم خطأ 429 كاملاً

لا تكتفِ بتسجيل رمز الحالة في السجلات، بل سجّل جسم الاستجابة كما هو. فصياغة استجابات 429 تختلف بوضوح حسب الطبقة التي تعيدها، وهذا هو أوضح دليل.

  • عندما يعيدها مزوّد الخدمة الأعلى: يحتوي جسم الخطأ عادةً على حقل نوع الخطأ الخاص بالمزوّد؛ فمثلاً تعيد Anthropic النوع rate_limit_error، وتعطي الواجهات على نمط OpenAI رمز خطأ مثل rate_limit_exceeded، مع بيان ما إذا كان التجاوز في عدد الطلبات أم في عدد الرموز (tokens).
  • عندما تعيدها البوابة: غالباً ما تذكر الصياغة مفاهيم خاصة بالبوابة نفسها مثل «الحساب» و«المجموعة» و«الرمز» و«القناة»، أو تذكر اسم البوابة صراحةً.
  • عندما تعيدها الطبقة المجانية: تظهر عبارات مثل «free tier» و«quota» و«daily limit» و«capacity». وفي اختبارات أجرتها جهات خارجية للتجربة المجانية لبعض النماذج، تظهر استجابة 429 المرتبطة بالسعة هذه بشكل متكرر.

إذا كنت تستدعي عبر خدمة وكيل API أو منصة تجميع، فانتبه بشكل خاص إلى ما إذا كانت البوابة تمرّر خطأ المزوّد الأعلى الأصلي كما هو. فتمريره كما هو يعني أن المزوّد الأعلى هو من يحدّ منك، أما الصياغة المخصصة التي لا تُمرَّر كما هي فتعني أن البوابة هي من تحدّ منك.

الخطوة 2: فحص رؤوس استجابة 429

رؤوس الاستجابة هي سلسلة الأدلة الثانية. تُرجع معظم المنصات الرئيسية في رؤوس الاستجابة الحصة المتبقية ووقت إعادة التعيين، وقد تُرفق البوابة أيضًا حقولاً خاصة بها.

رأس الاستجابة المصدر الشائع المعنى فائدة الفحص
Retry-After معيار HTTP، شائع لدى عدة جهات عدد الثواني الموصى بالانتظار قبل المحاولة مجددًا يُعتمد أولاً عند التراجع التدريجي
x-ratelimit-remaining-requests واجهات على نمط OpenAI عدد الطلبات المتبقية في النافذة الحالية تحديد ما إذا كان التقييد بسبب RPM
x-ratelimit-remaining-tokens واجهات على نمط OpenAI عدد الـ tokens المتبقية في النافذة الحالية تحديد ما إذا كان التقييد بسبب TPM
anthropic-ratelimit-requests-remaining Anthropic عدد الطلبات المتبقية التأكد من أن التقييد صادر من Anthropic
anthropic-ratelimit-input-tokens-remaining Anthropic عدد tokens الإدخال المتبقية تحديد ما إذا كان التقييد بسبب tokens الإدخال

قاعدة الحكم بسيطة: إذا ظهر رأس تقييد يحمل بادئة خاصة بمزوّد وكانت القيمة المتبقية 0، فمن شبه المؤكد أن المزوّد الأعلى هو من يقيّدك؛ أما إذا لم يظهر أي رأس تقييد خاص بمزوّد، وكان الموجود مجرد حقول مخصّصة من البوابة أو لم يوجد شيء على الإطلاق، فإن احتمال أن يكون التقييد على مستوى البوابة أكبر. تجدر الإشارة إلى أن بعض المزوّدين في السنوات الأخيرة صاروا يعرضون الحدود الفعلية في لوحة التحكم فقط، وقد تكون المعلومات في رؤوس الاستجابة ناقصة، وفي هذه الحالة عليك الرجوع إلى صياغة الخطأ في الخطوة 1 ومقارنة الأبعاد في الخطوة 3.

الخطوة الثالثة: مطابقة أبعاد تحديد المعدل

بعد أن تعرف من الذي يفرض عليك القيود، لا بد أن تحدد ما الذي يتم تقييده بالضبط. فقواعد تحديد المعدل تختلف من مزوّد إلى آخر، وقد أظهرت مراجعة مقارنة أجراها طرف ثالث لخمسة مزوّدين أن Anthropic تحدّ أساسًا من عدد الـ tokens في الدقيقة، ولا تدخل الـ tokens التي تُقرأ من التخزين المؤقت ضمن الحد؛ بينما يركّز DeepSeek أساسًا على تحديد عدد العمليات المتزامنة؛ أما OpenAI وGoogle فتفاصيل الحصص لديهما متاحة غالبًا في لوحة التحكم.

لهذا أثر مباشر على استراتيجية الإعداد، وفيما يلي أبرز حالات التطابق:

  1. تجاوز حد RPM (عدد الطلبات في الدقيقة): دمج عدة طلبات صغيرة في طلبات مجمّعة، أو إضافة خوارزمية token bucket في العميل لإرسالها بمعدل ثابت.
  2. تجاوز حد TPM (عدد tokens في الدقيقة): تقصير السياق، وتفعيل التخزين المؤقت للموجهات، وتقسيم مهام المستندات الطويلة على نوافذ زمنية مختلفة.
  3. تجاوز حد التزامن: تقليل عدد الـ workers، واستخدام قائمة انتظار للتحكم في عدد الطلبات الجارية في الوقت نفسه؛ فمجرد التراجع (backoff) لن يفيد كثيرًا.
  4. نفاد الحصة اليومية أو الحصة المجانية: التراجع بلا معنى هنا، ولا خيار سوى الانتظار حتى إعادة التعيين، أو ترقية الخطة، أو التبديل إلى قناة أخرى.

الحالة الرابعة هي الوحيدة بين أخطاء 429 التي يكون فيها التراجع (backoff) عديم الجدوى حتمًا، وهي أيضًا الحالة التي ينبغي اكتشافها في أقرب وقت والانتقال مباشرة إلى التحويل الاحتياطي عند الفشل (failover).


كيف نضبط استراتيجية التراجع عند 429

بعد التأكد من أن الخطأ 429 ناتج عن تحديد لمعدل الطلبات يمكن التعافي منه، ننتقل إلى مرحلة التراجع. الهدف من التراجع ليس «إعادة المحاولة بأسرع ما يمكن»، بل «التعافي بأسرع ما يمكن دون زيادة الازدحام».

التراجع الأُسّي مع التذبذب العشوائي

الطريقة الأكثر شيوعًا هي التراجع الأُسّي (Exponential Backoff) مع التذبذب العشوائي (Jitter). مدة الانتظار قبل المحاولة رقم n تساوي تقريبًا «التأخير الأساسي × 2 مرفوعًا للقوة n»، ثم يُضاف إلى ذلك مقدار عشوائي مع وضع حد أقصى. وظيفة التذبذب العشوائي هي تفريق أوقات إعادة المحاولة بين عدة عملاء، وتجنب اندفاعهم في الثانية نفسها وتشكيل «عاصفة إعادة محاولات».

إذا كانت الاستجابة تتضمن Retry-After، فيجب أن تكون له الأولوية على مدة التراجع التي حسبتها بنفسك. فالخادم يعرف أكثر منك متى تُعاد تهيئة النافذة، والانتظار وفق توصيته غالبًا هو أسرع طريق للتعافي.

القيم الموصى بها لمعاملات التراجع

يوضح الجدول التالي مجموعة من قيم البدء المناسبة لمعظم سيناريوهات المحادثة والمعالجة الدُفعية. ويمكن تعديلها عند الاستخدام الفعلي وفق قدرة النشاط على تحمّل التأخير.

المعامل قيمة البدء الموصى بها الوصف
التأخير الأساسي ثانية واحدة مدة الانتظار قبل أول إعادة محاولة
مضاعف التراجع 2 تتضاعف مدة الانتظار عند كل إعادة محاولة
أقصى انتظار للمحاولة الواحدة 30-60 ثانية لمنع نمو مدة الانتظار بلا حدود
أقصى عدد لإعادة المحاولات 3-5 مرات بعد تجاوزها ننتقل إلى التحويل الاحتياطي أو الإبلاغ عن خطأ
التذبذب العشوائي نسبة عشوائية من 0 إلى 100% من مدة الانتظار يُفضّل أسلوب «التذبذب الكامل» لتفريق المحاولات
Retry-After يُقدَّم إن وُجد يتجاوز مدة التراجع المحسوبة ذاتيًا

هناك تفصيلان في الإعداد كثيرًا ما يُغفلان. أولًا، في السيناريوهات التفاعلية (مثل واجهة الدردشة) لا ينبغي أن تكون مدة الانتظار الإجمالية طويلة جدًا؛ يُنصح بوضع ميزانية مهلة إجمالية، وبعد تجاوزها يتم الانتقال إلى الخيار البديل أو إخطار المستخدم. ثانيًا، لا تُعِد المحاولة مع التراجع عند أخطاء الإعداد مثل 400 و401 و403؛ فهي لن تتحسن مهما طال الانتظار، وكل ما ستفعله هو إهدار الوقت والحصة.

إذا كنت تستخدم SDK الرسمي، فكثير من حزم SDK تتضمن إعادة محاولة تلقائية لأخطاء 429 و5xx، وعادةً ما يُتحكم في عددها عبر معامل مثل max_retries. قبل أن تضيف طبقة إعادة محاولة خاصة بك، تحقق أولًا من السلوك الافتراضي لـ SDK، لتجنب تراكم طبقتَي إعادة المحاولة وتضاعف عدد المحاولات الفعلي.


كيف يُعد التبديل الاحتياطي عند خطأ 429

التراجع المؤقت (backoff) هو «الانتظار في المكان»، بينما التبديل الاحتياطي (Failover) هو «سلوك طريق آخر». وهما ليسا خيارين بديلين، بل علاقة تسلسلية: تراجع أولًا، وإن لم ينجح التراجع فبدّل.

متى يُفعّل التبديل الاحتياطي

يُنصح بتفعيل التبديل عند تحقق أي من الشروط التالية، لا بمجرد رؤية 429:

  • بلوغ الحد الأقصى لعدد إعادات المحاولة، مع استمرار ظهور 429؛
  • أن تشير صياغة الخطأ صراحةً إلى استنفاد الحصة اليومية أو الرصيد المجاني أو «نقص السعة»؛
  • أن يتجاوز وقت الانتظار الذي يحدده Retry-After الحد الأقصى المقبول للخدمة؛
  • أن تفشل القناة نفسها عدة مرات متتالية خلال فترة قصيرة، فتتجاوز عتبة قاطع الدائرة.

تتبع التوصيات التي تقدمها جهات خارجية لمعالجة تكرار 429 مع نموذج شائع على OpenRouter المنطق نفسه: تراجع أولًا، ثم بدّل احتياطيًا إلى نموذج آخر ضمن الواجهة نفسها. بهذا الترتيب تحافظ على جودة مخرجات النموذج الأصلي وتضمن استمرار الخدمة.

ثلاثة تصاميم لسلسلة التبديل

لمسار التبديل الاحتياطي مستويات مختلفة، وتزداد كلفة التبديل من الأقل إلى الأعلى كما يلي:

  1. النموذج نفسه عبر قناة أخرى: النموذج ذاته، ولكن بمفتاح API آخر أو مجموعة أخرى أو مزوّد آخر. أفضل اتساق في المخرجات، وهو الخيار المفضل.
  2. المزوّد نفسه بفئة مختلفة: مثل الانتقال من النموذج الرائد إلى نموذج خفيف من السلسلة نفسها؛ تنخفض القدرة قليلًا لكن يبقى الأسلوب قريبًا.
  3. نموذج من مزوّد آخر: الانتقال إلى نموذج من الفئة نفسها لدى مزوّد آخر؛ التوافر الأعلى، لكن يجب التحقق مسبقًا من تأثير الموجه ومن صيغة المخرجات.

فوق ذلك، يُنصح بإضافة طبقة قاطع دائرة (Circuit Breaker): بعد أن تبلغ قناة ما عتبة معينة من الفشل المتتالي، تُتجاوز مباشرة خلال فترة تبريد؛ وبعد انتهاء التبريد تُرسل إليها طلبات استكشاف قليلة، ثم يزداد الحمل تدريجيًا عند تعافيها. يتجنب هذا أن يرتطم كل طلب بالجدار أولًا ثم يبدّل، ويقلل زمن التأخير الكلي بشكل ملحوظ.

http-429-rate-limit-diagnosis-backoff-failover-ar-image-2

يمكن التحقق من الاستراتيجيتين المقارنتين في الشكل أعلاه داخل مشروع حقيقي عبر الواجهة الموحدة نفسها. فمنصات مثل APIYI، المتوافقة مع صيغ واجهات OpenAI وAnthropic، تتيح لك تبديل النموذج الاحتياطي بتعديل معامل model فقط في الشيفرة نفسها، وهو أبسط بكثير من صيانة SDK منفصل لكل مزوّد.


البدء السريع في التعامل مع تحديد المعدل 429

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

قائمة تحقق من 5 بنود للإعداد

  1. السجلات: سجّل جسم الاستجابة وترويساتها كاملة، بما يشمل على الأقل رمز الحالة، ونوع الخطأ، ونص الخطأ، وRetry-After، وجميع حقول ratelimit.
  2. التصنيف: في العميل، صنّف الأخطاء إلى ثلاث فئات: «قابلة للتراجع» (أخطاء المعدل 429، و529، و503)، و«تحتاج إلى تبديل» (نفاد الحصة أو الفشل المستمر)، و«غير قابلة لإعادة المحاولة» (400، 401، 403).
  3. التراجع: اضبط وفق جدول المعاملات أعلاه تراجعًا أسيًا مع تذبذب كامل، مع إعطاء الأولوية لـRetry-After، وحدد الحد الأقصى لعدد مرات إعادة المحاولة وميزانية زمنية إجمالية للمهلة.
  4. سلسلة التبديل: رتّب قائمة البدائل بالترتيب التالي: «تبديل القناة مع النموذج نفسه ← تغيير المستوى لدى المزوّد نفسه ← تغيير النموذج عبر مزوّد آخر»، وتحقق مسبقًا من فعالية الموجه مع كل نموذج بديل.
  5. قاطع الدائرة والتنبيهات: حدد لكل قناة عتبة للفشل وفترة تبريد، واضبط تنبيهًا لنسبة أخطاء 429؛ فإذا ظلت مرتفعة باستمرار فهذا يعني أنك بحاجة إلى طلب زيادة الحصة أو ضبط التزامن.

مثال على سلسلة نماذج بديلة

يلخّص الجدول التالي مثالًا شائعًا لسلسلة تبديل من ثلاثة مستويات. تخضع أسماء النماذج الفعلية لقائمة النماذج في المنصة، أما الرسوم ذات الصلة فتخضع لصفحة الأسعار؛ ولا يورد هذا المقال أسعارًا محددة للوحدة.

المستوى فكرة الاختيار صيغة الواجهة المنصات المتاحة أساس التسعير
الرئيسي النموذج الرائد ذو أفضل نتائج للأعمال صيغة OpenAI أو Anthropic APIYI apiyi.com وواجهة API الرسمية وفق docs.apiyi.com/models
الاحتياطي الأول قناة أو مجموعة أخرى للنموذج نفسه مطابقة للرئيسي APIYI apiyi.com وواجهة API الرسمية وفق docs.apiyi.com/models
الاحتياطي الثاني نموذج خفيف من المزوّد نفسه أو نموذج مكافئ من مزوّد آخر صيغة متوافقة مع OpenAI APIYI apiyi.com ومنصات تجميع أخرى وفق docs.apiyi.com/models

أما من ناحية التكامل، فإذا كنت تستخدم SDK الرسمي لـ OpenAI أو Anthropic، فعادةً يكفي تغيير base_url إلى العنوان الذي توفره المنصة، واستبدال api_key بمفتاح المنصة. للحصول على عناوين الواجهات الدقيقة وتعليمات استدعاء كل نموذج، يُفضّل الرجوع إلى مركز توثيق APIYI على docs.apiyi.com، وعدم نسخ عناوين غير موثّقة من الإنترنت.

🚀 بدء سريع: عند بناء سلسلة تحمّل أخطاء 429، يُنصح أولًا بالربط بالنموذج الرئيسي والنماذج البديلة عبر APIYI apiyi.com باستخدام الشيفرة نفسها. توفر المنصة استدعاءات API للنماذج السائدة الواردة في هذا المقال، وهي متوافقة مع صيغ واجهات OpenAI وAnthropic، ولا يتطلب تبديل النموذج سوى تغيير معامل model. راجع توثيق التكامل على docs.apiyi.com، أما أسعار الوحدة للإدخال والإخراج لكل نموذج، وأسعار التخزين المؤقت، وأساس الفوترة، فتخضع للبيانات الفعلية في صفحة الأسعار docs.apiyi.com/models.


الأسئلة الشائعة (FAQ)

س1: ما المقصود بخطأ 429 وتحديد معدل الطلبات؟

الرمز 429 هو رمز الحالة Too Many Requests في معيار HTTP، ويعني أن الطرف المستدعي تجاوز في نافذة زمنية معيّنة عدد الطلبات المسموح بها، أو عدد الرموز (tokens)، أو عدد الاتصالات المتزامنة، أو إجمالي الحصة المتاحة. فهو يخبرك بأنه “تم تقييدك”، ولا يعني أن النموذج نفسه معطّل.

س2: ما الفرق بين 429 و529 و503؟

الرمز 429 يشير إلى مشكلة في حصة الطرف المستدعي، أي أن المسؤولية هنا على “استخدامك المفرط”؛ أما 529 فهو خطأ التحميل الزائد الخاص بـ Anthropic، والرمز 503 يعني أن الخدمة غير متاحة مؤقتًا، والمسؤولية في الحالتين تقع على سعة جهة الخدمة. الحالة الأولى يُفضّل معها التراجع التدريجي (backoff) وتعديل حجم الاستخدام، أما الحالتان الأخيرتان فيناسب معهما التراجع القصير ثم التحويل المباشر إلى نموذج بديل عند التعطل.

س3: كيف أستطيع بأسرع طريقة تحديد ما إذا كان الخطأ 429 صادرًا من مزوّد النموذج أم من بوابة الخدمة؟

ابدأ بقراءة صياغة جسم الخطأ: فالأخطاء التي تحمل نوع خطأ خاصًا بالمزوّد تأتي عادةً من جهة المزوّد، أما تلك التي تذكر مفاهيم مثل الحساب أو المجموعة أو القناة فغالبًا تأتي من بوابة الخدمة. ثم انظر إلى ترويسات الاستجابة (response headers): فظهور حقل `ratelimit` ببادئة المزوّد مع بقاء القيمة المتبقية صفرًا يؤكد تقريبًا أن التقييد قادم من جهة المزوّد.

س4: لماذا لا يزول خطأ 429 رغم تكرار التراجع التدريجي مرات عديدة؟

السبب الأكثر شيوعًا هو الخطأ في تحديد بُعد التقييد. فإذا كانت الحصة اليومية أو الرصيد المجاني قد استُنفد، فالتراجع التدريجي لن يجدي أبدًا؛ وإذا كان عدد الاتصالات المتزامنة هو المتجاوز، بينما لا يزال العميل يرسل بدرجة تزامن عالية، فالتراجع لن يفعل سوى التخفيف المؤقت. في هذه الحالة ينبغي تقليل التزامن أو الانتقال مباشرة إلى التحويل عند التعطل.

س5: كيف أبني سلسلة تحويل بين عدة نماذج عند التعطل بأقصى سرعة؟

ننصح بالتحقق باستخدام منصة توفّر واجهة موحّدة لعدة نماذج:

1. سجّل حسابًا على APIYI عبر apiyi.com واحصل على مفتاح API؛
2. اضبط `base_url` وفق وثائق docs.apiyi.com، واتصل بصيغة OpenAI أو Anthropic؛
3. اضبط في العميل قائمة النموذج الأساسي والنموذج الاحتياطي، ونفّذ التبديل بتعديل المعامل `model`.

بهذه الطريقة يشترك النموذج الأساسي والاحتياطي في الشيفرة نفسها، وستنخفض تكلفة اختبار سلسلة التحويل كثيرًا.

س6: هل يمكن أن يؤدي التحويل عند التعطل إلى خروج التكلفة عن السيطرة؟

هذا ممكن. فسعر وحدة النموذج الاحتياطي وطول نافذة السياق واستراتيجية التخزين المؤقت قد تختلف جميعها عن النموذج الأساسي، والتبديل المتكرر سيغيّر بنية الفاتورة. ننصح بالتحقق مسبقًا من سعر كل نموذج احتياطي، والاعتماد على البيانات الفعلية في صفحة الأسعار لدى APIYI على docs.apiyi.com/models، مع ضبط تنبيهات على نسبة التبديل.

س7: ما القيود المعروفة في حلول معالجة خطأ 429؟

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

## النقاط الأساسية لمعالجة تحديد المعدل 429 Key Takeaways

– **الرمز 429 يعني فقط أنك مُقيَّد**: لا يوضح من قام بالتقييد ولا ما الذي تم تقييده، ولا يمكن اعتباره مباشرة عطلًا في النموذج.
– **اقرأ نص الخطأ أولاً**: صياغة جسم الخطأ هي أسرع دليل للتمييز بين المزوّد الأعلى أو البوابة أو الفئة المجانية.
– **ثم انظر إلى ترويسات الاستجابة**: حقل `ratelimit` ذو البادئة الخاصة بالمزوّد مع `Retry-After` هما سلسلة الأدلة الثانية.
– **عالج كل بُعد بما يناسبه**: ثبّت معدل RPM، وقلّل السياق عند امتلاء TPM، واضبط عدد الـ worker عند تزامن الطلبات، وبدّل مباشرة عند نفاد الحصة.
– **تراجع أولاً ثم بدّل**: تراجع أُسّي مع ارتجاف كامل، مع إعطاء الأولوية لـ `Retry-After`، وحدّ أعلى لإعادة المحاولة.
– **تصميم سلسلة التبديل على طبقات**: يُفضّل تغيير القناة مع نفس النموذج، ثم تغيير النموذج عبر مزوّد آخر كخيار احتياطي، مع قاطع الدائرة.
– **استخدم واجهة موحّدة لتقليل التكلفة**: عبر واجهة APIYI المتوافقة مع صيغ OpenAI وAnthropic، يمكنك إدارة النموذج الأساسي والاحتياطي بكود واحد.

## الملخص

عند مواجهة خطأ 429، التسلسل الصحيح هو «تحديد المصدر ← تحديد البُعد ← التراجع التدريجي ← التبديل»، وليس تغيير النموذج من أول وهلة:

1. **تحديد المصدر**: صياغة جسم الخطأ مع رؤوس الاستجابة، لتمييز المزوّد الأعلى والبوابة والطبقة المجانية.
2. **تحديد البُعد**: معرفة ما إذا كان الأمر يتعلق بعدد الطلبات، أم عدد الـ token، أم التزامن، أم الحصة الإجمالية، لتحديد مدى فعالية التراجع.
3. **تكوين التسامح مع الأخطاء**: التراجع الأسي مع الاهتزاز كخط دفاع أول، والتبديل الهرمي عند الفشل مع قاطع الدائرة كخط دفاع ثانٍ.

بتثبيت هذه المنظومة في السجلات وتصنيف الأخطاء وإعدادات العميل، يتحول 429 من «إنذار في منتصف الليل» إلى حدث روتيني متوقع وقابل للتعافي الذاتي.

نوصي بالتحقق السريع من فاعلية تبديل النماذج الأساسية والاحتياطية عبر APIYI على apiyi.com، وتعليمات الوصول متوفرة في docs.apiyi.com، أما أسعار النماذج وطريقة الفوترة للموديلات المعنية فتُعتمد وفقاً لـ docs.apiyi.com/models.

—

## 📚 المراجع

1. **Rate Limit Reached in Claude Code: What Each 429 Message Means**: تفسير معاني رسائل خطأ 429 في Claude Code
– الرابط: `ofox.ai/blog`
– الوصف: يشرح كيفية التمييز بين تحديد معدل Anthropic والبوابة والطبقة المجانية عبر النص الأصلي من الخادم

2. **Claude Code fallbackModel: 3-Tier Failover Setup**: تكوين النموذج الاحتياطي في Claude Code
– الرابط: `ofox.ai/blog`
– الوصف: يوضح أن fallbackModel يُفعَّل عند تحميل 529 عبر الحد الأقصى 3 نماذج، وليس عند 429

3. **LLM API Rate Limits Compared**: مقارنة قواعد تحديد المعدل لدى 5 مزوّدي نماذج لغة كبيرة
– الرابط: `ofox.ai/blog`
– الوصف: يقارن بين أساليب تحديد المعدل المختلفة حسب token والتزامن والعرض في لوحة التحكم فقط

4. **مركز توثيق APIYI وصفحة الأسعار**: تعليمات الوصول وفوترة النماذج
– الرابط: `docs.apiyi.com` و `docs.apiyi.com/models`
– الوصف: تنسيق الواجهة وتكوين base_url والأسعار الفعلية لكل نموذج تُعتمد بناءً على هذا

—

> **المؤلف**: فريق APIYI التقني
> **التواصل التقني**: نرحب بتواصلكم معنا عبر الصفحة الرئيسية لـ APIYI على apiyi.com لمناقشة ممارسات تحديد المعدل والتسامح مع الأخطاء، ولمزيد من مواد الوصول يمكنكم زيارة مركز التوثيق docs.apiyi.com

موضوعات ذات صلة