429 و5xx والمهلات: الممارسات الهندسية لتحمل الأعطال في بوابة LLM
تحديد المعدل والأعطال في الطبقة العلوية هما الحالة الطبيعية لتطبيقات LLM وليسا استثناءً. تستعرض هذه المقالة الطريقة الصحيحة للتعامل مع كل من 429/5xx/timeout/401، ومتى يمكن التبديل التلقائي بين القنوات، ومتى لا يجوز إطلاقاً إعادة المحاولة، وكيفية تجنب الفوترة المزدوجة.
صنّف أولاً، ثم قرر كيف تتعامل
«أعد المحاولة ثلاث مرات لكل خطأ» هو الممارسة الخاطئة الأكثر شيوعاً. دلالات رموز الأخطاء المختلفة متباينة تماماً، ولذا يجب أن تختلف استراتيجية المعالجة أيضاً. الجدول التالي هو الاستراتيجية التي تعتمدها بوابتنا فعلياً، ويمكن أن يكون مرجعاً لتنفيذك الخاص.
- فشل الاتصال / DNS / TLS: التبديل الفوري إلى القناة الاحتياطية.
- Timeout (لم يبدأ الإخراج بعد): التبديل إلى القناة الاحتياطية، بحد أقصى 1~2 مرة.
- HTTP 429: تبديل القناة بعد تبريد قصير، مع خفض وزن تلك القناة في الوقت نفسه.
- HTTP 5xx: يُحتسب في نافذة الفشل، ويؤدي الفشل المتتالي إلى تفعيل قاطع الدائرة.
- 401 / 403: مشكلة في بيانات الاعتماد أو الصلاحيات، عطّل تلك البيانات وأطلق تنبيهاً، ولا تعد المحاولة.
- رصيد غير كافٍ: أوقف تلك القناة مؤقتاً وأطلق تنبيهاً.
- خطأ المعاملات 400: يُعاد إلى العميل مباشرة بعد التطبيع، دون إعادة محاولة ودون فوترة.
- انقطاع SSE بعد إخراج جزء من المحتوى: يُعاد
upstream_stream_error، والافتراضي هو عدم إعادة المحاولة.
لماذا لا يمكن إعادة المحاولة ببساطة عند انقطاع SSE
بمجرد أن يبدأ الرد المتدفق بإخراج الرموز إلى العميل، فهذا يعني أن الطبقة العلوية أنتجت إخراجاً (سيُفوتر عليه). إذا بدّل البوابة حينها بصمت إلى قناة أخرى وأعادت من البداية، فسيرى المستخدم محتوى مكرراً، وستدفع أنت ثمن مخرجين.
الطريقة الصحيحة هي اعتبار هذا التدفق المقطوع نجاحاً جزئياً: إعادة رمز خطأ يخبر العميل بأن «الطبقة العلوية انقطعت»، ويترك لجانب الأعمال قرار عرض المحتوى الموجود + تلميح لإعادة المحاولة، أو إعادة المحاولة كاملة.
قاطع الدائرة: الطبقة الأهم من إعادة المحاولة
إعادة المحاولة معالجة لطلب واحد، أما قاطع الدائرة فهو حكم على الحالة الإجمالية خلال فترة زمنية. عندما يبلغ فشل قناة ما حداً متتالياً، تُعلَّم مباشرة بأنها «مفتوحة»، ولا يُرسَل إليها أي حركة مرور لفترة، ثم يُسمح بكمية صغيرة من حركة الاستكشاف (نصف مفتوح)، وبعد نجاح الاستكشاف عدة مرات تُستعاد بالكامل (مغلق).
بدون قاطع الدائرة، ستزيد إعادة المحاولة الضغط على قناة معطلة أصلاً، وسترفع متوسط زمن الاستجابة لدى العميل بشكل حاد.
التماثل والفوترة في إعادة المحاولة
- الطلبات غير المتدفقة: تُفوتر بعد إعادة المحاولة وفق usage المحاولة الناجحة النهائية فقط.
- الطلبات المتدفقة: المحاولة التي أخرجت رموزاً قد أنتجت تكلفة فعلية في الطبقة العلوية، ويجب تسجيلها، ولا يجوز محو الحساب بسبب إعادة المحاولة.
- خصّص
request_idلكل طلب مستخدم، تتشاركه كل المحاولات، فيمكن لاحقاً إعادة تشغيل «لماذا سلك هذا المسار» بالكامل. - يجب أن تمر الاستردادات/التسويات عبر قيود دفتر الأستاذ، ولا يجوز تعديل الرصيد مباشرة.
ما فعله Admesh بالفعل
الاستراتيجية أعلاه هي السلوك الافتراضي في بوابة Admesh: التبديل التلقائي بين عدة قنوات علوية لنفس public_model، وكل قرار توجيه يُسجَّل في قاعدة البيانات، ويمكن للعميل رؤية request_id والنموذج المستخدم فعلياً وحالة سلامة القناة في سجلات الاستخدام؛ وتُعاد رموز الأخطاء بصيغة موحدة (error.type / error.code / request_id).
من الجدير بالملاحظة: التوجيه يحدث فقط داخل مجموعة قنوات نفس public_model، ولن يتم تبديلك إلى نموذج من مزوّد آخر لمجرد أنك طلبت anthropic/xxx — فالاستبدال عبر النماذج يغيّر جودة الإخراج مباشرة، وهذا قرار لا يمكننا اتخاذه نيابة عنك.
أسعار Admesh المباشرة (مقتطف)
الأسعار مأخوذة من إعدادات Admesh المباشرة، بالدولار الأمريكي لكل مليون رمز. راجع كتالوج النماذج للقائمة الكاملة.
| اسم النموذج ورقم التعريف | نافذة السياق | أدخل السعر / 1M | سعر المخرجات / 1M | إصابة ذاكرة التخزين المؤقت / 1M |
|---|---|---|---|---|
Claude Fable 5 anthropic/claude-fable-5 | 1M | $3.25 / 1M | $16.25 / 1M | $0.325 / 1M |
Claude Fable 5.1 anthropic/claude-fable-5-1 | 1M | $3.25 / 1M | $16.25 / 1M | $0.08125 / 1M |
Claude Haiku 4.5 anthropic/claude-haiku-4-5-20251001 | 200K | $0.325 / 1M | $1.625 / 1M | $0.0325 / 1M |
Claude Haiku 5.5 anthropic/claude-haiku-5-5 | 1M | $0.0325 / 1M | $0.1625 / 1M | $0.00325 / 1M |
Claude Opus 4.5 anthropic/claude-opus-4-5-20251101 | 200K | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.6 anthropic/claude-opus-4-6 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.7 anthropic/claude-opus-4-7 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.8 anthropic/claude-opus-4-8 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
ما ورد أعلاه هو السعر القياسي للوحدة في القنوات العامة، ويتم الحساب وفقًا للاستهلاك الفعلي للـ Token. عرض قائمة النماذج الكاملة
الأسئلة الشائعة
عند مواجهة 429، هل أنام (sleep) أم أبدّل النموذج؟
ما المدة المناسبة للمهلة؟
هل تؤدي إعادة المحاولة إلى خصم مزدوج؟
المراجع
استدعِ هذه النماذج عبر بوابة واحدة
توفر Admesh واجهة API موحدة متوافقة مع OpenAI: عنوان URL أساسي واحد ومفتاح واحد لـ Claude وGPT وDeepSeek وغيرها. الحسابات الجديدة تحصل على رصيد تجريبي لا ينتهي.
