في 12 يونيو 2026، أجبرت ضوابط التصدير الأمريكية شركة أنثروبيك على إيقاف Claude Fable 5 عن العمل دون سابق إنذار تقريبًا، وبقي النموذج معطلاً حتى عاد في 1 يوليو. قضت الفرق التي كانت قد برمجت سلسلة نموذج واحدة تسعة عشر يومًا في محاولة إصلاح المشكلة؛ بينما قامت الفرق التي لديها سلسلة تجاوز أعطال بتغيير قيمة التكوين وعادت إلى العمل.
الدرس المستفاد أكبر من مجرد انقطاع واحد. تتعامل معظم التطبيقات المدعومة بنماذج اللغات الكبيرة (LLM) مع توفر النموذج كشيء ثابت، مثل DNS أو الجاذبية. هذا افتراض معماري، وهو خاطئ. النموذج هو منتج له تعرض قانوني، وحدود سعة، وجدول إهمال، وفريق سلامة يمكنه سحبه. يغطي هذا الدليل كيفية تصميم تجاوز الأعطال لواجهات برمجة تطبيقات الذكاء الاصطناعي (AI APIs) بحيث لا يكلفك الاختفاء التالي، أيًا كان المزود الذي يؤثر عليه، سوى تغيير في التكوين بدلاً من جسر حوادث.
زر
لماذا تختفي النماذج
تختفي النماذج لأسباب أكثر مما تخطط له معظم الفرق:
- التنظيم. جاء تعليق Fable 5 من ضوابط التصدير، وليس من عطل فني. لا تتبع الأحداث القانونية والتنظيمية جداول الإهمال، ولا ترسل إشعارًا مدته 90 يومًا. إليك كيف بدا الانقطاع من الخارج أثناء حدوثه.
- حوادث المزودين. كل مزود رئيسي تعرض لانقطاعات متعددة الساعات. اتفاقية مستوى الخدمة (SLA) الخاصة بك مع عملائك لا تتوقف بينما يتعافى المزود.
- الإهمال. يسحب المزودون النماذج وفقًا لجداول زمنية منشورة. تحتفظ OpenAI بصفحة إهمال متجددة، وقد أوقفت Anthropic إصدارات Claude الأقدم بنفس الطريقة. الإهمال هو انقطاع بطيء الحركة له تاريخ محدد.
- السعة. خلال أسابيع الإطلاق وذروات حركة المرور، يقلل المزودون الحمل. تبدأ طلباتك في إرجاع الأكواد 429 و 529 حتى لو كان النموذج "موجودًا".
- التراجعات الأمنية. يمكن للمزود حظر أو سحب نموذج بعد اكتشاف مشكلة ما بعد الإطلاق. يحدث هذا بهدوء وفي بعض الأحيان لكل حساب.
أسباب مختلفة، عرض نفس العرض: يتوقف معرف النموذج الذي يعتمد عليه الرمز الخاص بك عن الاستجابة. الإصلاح هو نفسه بغض النظر عن السبب، ولهذا السبب يعتبر تصميم تجاوز الأعطال عملًا دائمًا وليس استجابة لحادث.
هرم تجاوز الأعطال
تجاوز الأعطال ليس قرارًا واحدًا. إنه ثلاثة مستويات، وعادة ما تطبق الأنظمة الناضجة أكثر من مستوى واحد.
المستوى الأول: العودة إلى نفس المزود. التوجيه إلى نموذج شقيق من نفس المزود، على سبيل المثال Fable 5 → Opus 4.8 → Sonnet 4.6. نفس حزمة تطوير البرامج (SDK)، ونفس المصادقة، ونفس شكل الاستجابة، لذا فإن التبديل رخيص وسريع. تدعم Anthropic هذا حتى من جانب الخادم من خلال معامل الاسترجاع الذي يعيد محاولة طلب مرفوض على نموذج بديل داخل نفس استدعاء واجهة برمجة التطبيقات (API). اعرف زوج الاسترجاع الخاص بك قبل أن تحتاجه: مقارنة Fable 5 بـ Opus 4.8 هي نوع الواجبات المنزلية التي تؤتي ثمارها في الساعة الثالثة صباحًا.
المستوى الثاني: العودة إلى مزود مختلف. التوجيه إلى بائع مختلف تمامًا. يحمي هذا من الانقطاعات على مستوى المزود، وتعليق الحسابات، والقيود الإقليمية التي لا تستطيع سلسلة المزود الواحد النجاة منها. التكلفة هي حزمة تطوير برامج ثانية، وعلاقة فوترة ثانية، ومسار مصادقة ثانٍ، ومطالبات تتصرف بشكل مختلف.
المستوى الثالث: الوضع المتدهور. تقديم شيء مفيد بدون نموذج رائد على الإطلاق: إجابات مخبأة للاستعلامات المتكررة، نموذج محلي صغير لمهام التصنيف، أو تعطيل الميزة مع رسالة واضحة. قبول تدهور الميزة أمر مقبول. تعطل التطبيق ليس كذلك.
| المستوى | وقت الاستجابة للتبديل | انخفاض الجودة | تكلفة الهندسة |
|---|---|---|---|
| العودة إلى نفس المزود | من ثوانٍ إلى دقائق؛ تبديل تكوين أو إعادة محاولة تلقائية | صغير إلى معتدل؛ نفس عائلة النموذج، سلوك مألوف | منخفضة؛ نفس حزمة تطوير البرامج (SDK)، والمصادقة، وتنسيق الاستجابة |
| العودة إلى مزود مختلف | من دقائق إلى ساعات؛ يحتاج إلى منطق توجيه ومطالبات مختبرة | معتدل؛ أدوات ترميز وتنسيقات وسلوك رفض مختلفة | متوسطة إلى عالية؛ تكامل ثانٍ، وفواتير، ومراقبة |
| الوضع المتدهور | فوري بمجرد البناء | كبيرة ولكن يمكن التنبؤ بها وصادقة | متوسطة؛ طبقة ذاكرة تخزين مؤقت، نموذج محلي، أو علامات الميزات |
يجب أن تطبق معظم الفرق المستوى الأول هذا الربع، وتحافظ على المستوى الثالث كحد أدنى، وتضيف المستوى الثاني فقط عندما تبرر الإيرادات المعرضة للخطر تكاملًا ثانيًا.
نقطة تصميم أخرى: حدد شروط التشغيل، وليس فقط الوجهات. السلسلة غير مكتملة حتى تقرر ما الذي ينقل حركة المرور عبرها. الإعدادات الافتراضية المعقولة: رمز 404 على معرف النموذج يؤدي إلى تجاوز أعطال فوري، الرفض يعيد المحاولة مرة واحدة على النموذج التالي، رمز 429 يتراجع قبل تجاوز الأعطال، وثلاث مهلات متتالية تفتح قاطع دائرة لهذا النموذج. قم بترميز هذه القواعد في طبقة التوجيه بحيث يتم اتخاذ قرار الساعة 3 صباحًا بالفعل.
خطوات تصميم تجعل تجاوز الأعطال رخيصًا
تجاوز الأعطال يكون رخيصًا أو مكلفًا اعتمادًا على القرارات التي تتخذها قبل وقت طويل من أي انقطاع.
ضع معرفات النموذج في التكوين، وليس في الكود. قم بتشغيل بحث سريع عن سلسلة النموذج الخاصة بك. إذا ظهرت في كود التطبيق بدلاً من ملف تكوين واحد، فلا يمكنك تجاوز الأعطال بدون نشر. قائمة الأولويات لكل مسار هي الشكل الذي يعمل:
# config/model-routes.yaml
routes:
chat-assist:
primary: claude-fable-5
fallbacks:
- claude-opus-4-8
- claude-sonnet-4-6
degraded_mode: cached_answers
max_output_tokens: 8192
timeout_seconds: 120
ticket-classifier:
primary: claude-sonnet-4-6
fallbacks:
- claude-haiku-4-5
degraded_mode: rules_engine
تحكم في التوجيه في مكان واحد. سواء كانت خدمة بوابة أو غلافًا من مائة سطر، يجب أن يقرر وحدة واحدة بالضبط النموذج الذي يخدم طلبًا، وكل شيء آخر يجب أن يستدعيها. يبدو الإصدار الأدنى كالتالي:
MODEL_CHAIN = ["claude-fable-5", "claude-opus-4-8", "claude-sonnet-4-6"]
def complete(prompt: str) -> str:
last_error = None
for model in MODEL_CHAIN:
try:
response = client.messages.create(
model=model,
max_tokens=8192,
messages=[{"role": "user", "content": prompt}],
)
if response.stop_reason == "refusal":
last_error = RefusalError(model)
continue # حاول النموذج التالي في السلسلة
return response.content[0].text
except (anthropic.NotFoundError, anthropic.RateLimitError,
anthropic.APIStatusError) as err:
last_error = err
continue
raise AllModelsUnavailable(MODEL_CHAIN) from last_error
تضيف إصدارات الإنتاج قواطع دوائر ومهلات لكل نموذج، لكن المبدأ يبقى ساريًا بأي حجم: المتصلون يطلبون إكمالًا، وليس نموذجًا.
اكتب مطالبات متعددة المستويات حسب القدرة. المطالبة التي تعتمد على خصوصيات نموذج واحد تجعل تجاوز الأعطال الخاص بك وهمًا. اكتب مطالبات أساسية تنتج مخرجات مقبولة عبر مجموعة الاسترجاع الكاملة الخاصة بك، ثم اعزل الحيل الخاصة بالنموذج (تكوين تفكير معين، عادة تنسيق قمت بضبطها) في تراكبات لكل نموذج يمكن إسقاطها دون كسر المهمة. اختبر المطالبة الأساسية على أضعف استرجاع لديك، وليس على أقوى نموذج أساسي. هذا يهم أكثر مما يبدو: غالبًا ما تكافئ النماذج الرائدة الأحدث المطالبات المتفرقة والموجهة نحو الهدف، بينما تحتاج النماذج البديلة الأصغر إلى هيكل أكثر وضوحًا. إذا قمت بضبط كل شيء للنموذج الأساسي، فإن النموذج البديل يرث تعليمات لا يمكنه اتباعها جيدًا؛ أما إذا قمت بضبطها للمجموعة بأكملها، فإنك تفقد القليل من الصقل على النموذج الأساسي وتكسب سلسلة تعمل من البداية إلى النهاية.
حافظ على قابلية نقل معلمات الطلب أيضًا. المطالبات ليست السطح الوحيد الخاص بالنموذج. تختلف تكوينات التفكير، ومعلمات أخذ العينات، وحدود الإخراج عبر أجيال النماذج، ويمكن لمعامل يقبله النموذج الأساسي أن يرجع الخطأ 400 على النموذج البديل. قم بتخزين مجموعات المعلمات الخاصة بكل نموذج بجانب معرفات النماذج في التكوين، واجعل طبقة التوجيه تطبقها وقت الإرسال. تجاوز الأعطال الذي يتعطل بسبب خطأ في معلمة غير صالحة هو تجاوز أعطال لم يكن لديك.
تعامل مع الاستجابات بمعزل عن المزود. قم بتطبيع الاستجابات إلى شكل داخلي خاص بك عند حدود التوجيه: نص إخراج، حقول منظمة تم التحقق من صحتها، أسباب الإيقاف التي تم تعيينها لتعدادك الخاص. الكود الذي يصل إلى كائن استجابة خاص بالمزود من اثني عشر مكانًا سيتعطل في اليوم الذي تقوم فيه بتبديل المزودين.
ضع في الاعتبار اختلافات التكلفة والحدود. تختلف النماذج البديلة في السعر لكل رمز (token)، ونافذة السياق، والحد الأقصى للإخراج. الانتقال من Fable 5 إلى Opus 4.8 يقلل تكلفة الرمز الواحد إلى النصف تقريبًا، بينما Sonnet 4.6 أرخص مرة أخرى ولكنه يحدد الإخراج بشكل أقل؛ تحقق من نظرة عامة على النموذج الحالي بدلاً من الوثوق بالأرقام من الذاكرة. يجب أن تحمل طبقة التوجيه الخاصة بك max_output_tokens لكل نموذج وسلوك الاقتطاع حتى لا ينتج النموذج البديل إجابات مبتورة بصمت أو فاتورة مفاجئة.
اختبار العقود عبر مجموعة التجاوز الخاصة بك
مسار تجاوز الأعطال الذي لا تستخدمه أبدًا هو الذي سيفشل عندما تحتاجه. تعامل مع سلسلة التجاوز الخاصة بك كعقد واجهة برمجة تطبيقات (API) واختبرها كذلك.
النمط الذي يعمل: احتفظ بسيناريو اختبار واحد في Apidog يقوم بتشغيل مطالباتك الحيوية ضد كل نموذج في سلسلة التجاوز، وفقًا لجدول زمني وفي التكامل المستمر (CI). لكل نموذج، تأكد من ثلاثة أمور:
- المخطط (Schema). يتم تحليل الاستجابة، وتوجد الحقول المطلوبة، ويتم التحقق من صحة الإخراج المنظم مقابل مخطط JSON الخاص بك. هذا يلتقط الأعطال الدقيقة، مثل نموذج تجاوز الأعطال الذي يقوم بتشفير JSON بشكل مختلف أو إسقاط حقل يفترضه المحلل الخاص بك.
- وقت الاستجابة (Latency). يبقى p95 ضمن الميزانية التي حددتها لهذا النموذج. النموذج البديل الذي يعمل تقنيًا ولكن يستغرق 40 ثانية هو نوع مختلف من الانقطاع.
- إشارات الجودة. فحوصات ميكانيكية رخيصة: الإخراج غير فارغ، باللغة الصحيحة، يحتوي على العناصر المطلوبة، ومعدل الرفض عبر مجموعة المطالبات يبقى قريبًا من خط الأساس. أنت لا تقوم بتقييم الفصاحة في التكامل المستمر (CI)؛ أنت تكتشف نموذجًا توقف عن أداء وظيفته.
قم ببنائه باستخدام بيئة Apidog واحدة لكل نموذج أو مزود، تحتوي على عنوان URL للنقطة النهائية، ومفتاح واجهة برمجة التطبيقات (API key)، ومعرف النموذج كمتغيرات بيئة. ثم يتم تشغيل السيناريو نفسه دون تغيير مقابل claude-fable-5 و claude-opus-4-8 و claude-sonnet-4-6 عن طريق تبديل البيئات، وإضافة نموذج رابع إلى السلسلة يعني إضافة بيئة، وليس كتابة اختبارات جديدة.
اختر مجموعة المطالبات بعناية. لا تحتاج إلى مئات الحالات؛ تحتاج إلى عشرة إلى عشرين مطالبة تمثل حركة المرور الإنتاجية لديك: أطول سياق ترسله، وأدق إخراج منظم تقوم بتحليله، وحالة الحافة التي عطلت المحلل اللغوي الخاص بك مرة واحدة، ومطالبة واحدة على الأقل بالقرب من الحدود الحساسة لمجال عملك حتى يظهر انحراف الرفض في تشغيل الاختبار بدلاً من تذكرة دعم. قم بإصدار هذه المجموعة جنبًا إلى جنب مع مطالباتك، وعندما يفاجئك الإنتاج، أضف الحالة المفاجئة إلى المجموعة.
هناك مكافأة إضافية أثناء الانقطاع: وجّه بيئة واحدة إلى خادم وهمي (mock server) يعيد استجابات مسجلة، ويستمر نظام التكامل المستمر (CI) الخاص بك في التحقق من كل شيء أسفل النموذج بينما يكون المزود معطلاً. يمكن لـ Apidog توليد هذا النموذج الوهمي من نفس مواصفات واجهة برمجة التطبيقات (API spec) التي تستخدمها اختباراتك بالفعل، لذلك لا يعيق الانقطاع أيضًا مسار إصدارك.
في 12 يونيو، كان الفرق بين الفرق الهادئة والفرق المذعورة يكمن في هذا. بعضهم كان لديه دليل يومي على أن مسار Opus 4.8 الخاص بهم ينتج مخرجات صالحة لمطالباتهم العليا. بينما كان لدى الآخرين أمل.
الاستعداد التشغيلي
تمنحك الهندسة القدرة على تجاوز الأعطال. وتمنحك العمليات القدرة على اتخاذ القرار بسرعة ونظافة.
- اختبر كل نموذج، وليس الأساسي فقط. قم بتشغيل مطالبة تركيبية مجدولة ضد كل نموذج في السلسلة، بشكل منفصل عن حركة مرور المستخدمين. تعد صفحات حالة المزودين مثل status.anthropic.com مفيدة، لكنها تتأخر، وتصف عالم المزود، وليس حسابك أو منطقتك أو مستوى حد المعدل الخاص بك. سيُظهر اختبارك الخاص الفشل أولاً.
- نبّه على معدلات الرفض والأخطاء، وليس فقط 5xx. غالبًا ما تظهر مشكلات على مستوى النموذج كمعدل رفض متزايد، أو انفجار في أخطاء 404
model_not_found، أو 429s، بينما تظل لوحات معلومات مستوى HTTP خضراء. - اكتب دليل التحول قبل أن تحتاجه. من يقرر تجاوز الأعطال، أي قيمة تكوين تتغير، ما هو الإعلان الموجه للدعم والعملاء، ولوحات المعلومات التي يجب مراقبتها خلال الساعة الأولى. خلال انقطاع Fable 5، فقدت الفرق التي لم يكن لديها دليل تشغيل وقتًا أطول في اتخاذ القرار منه في التنفيذ.
- نظّم العودة. عندما يعود النموذج الأساسي، لا تقم بتحويل 100% من حركة المرور دفعة واحدة. اختبر شريحة صغيرة، قارن مقاييس الجودة والرفض بخط الأساس للنموذج البديل الخاص بك، ثم قم بالزيادة التدريجية. نغطي آليات هذه العملية في كيفية العودة إلى واجهة برمجة تطبيقات Fable 5، وينطبق هذا النمط على أي نموذج أساسي عائد.
- تدرب عليها. مرة كل ربع سنة، قم بإجراء تجاوز أعطال متعمد في بيئة الاختبار (staging)، أو في بيئة الإنتاج لشريحة صغيرة من حركة المرور إذا سمحت قدرتك على تحمل المخاطر بذلك. يكشف التدريب عن مفتاح واجهة برمجة التطبيقات (API key) منتهي الصلاحية في الحساب البديل، ولوحة المعلومات التي لا يمكن لأحد العثور عليها، وقيمة التكوين التي أعيد تسميتها قبل ستة أشهر. كل واحد من هذه الأخطاء أرخص بكثير للعثور عليه في يوم ثلاثاء هادئ.
ما الذي تعلمه حلقة Fable 5 تحديداً
تضمنت العودة في 1 يوليو تفصيلاً يستحق بناء سياسة حوله: قامت أنثروبيك بإعادة نشر Fable 5 مع مصنف أمان أعيد تدريبه. نفس معرف النموذج، ونفس سطح واجهة برمجة التطبيقات، ولكن ليس بالضبط النموذج الذي توقف عن العمل. تحركت حدود الرفض. المطالبات التي كانت تمر بسلاسة في أوائل يونيو قد تنتج نتائج مختلفة في يوليو، وبعض الرفوضات التي كانت تحدث سابقًا لم تعد كذلك.
القاعدة التي تنبثق من هذا: أعد الاختبار عند العودة، لا تقم بإعادة التمكين فورًا. يجب التعامل مع النموذج الذي يعود من أي غياب، سواء كان تعليقًا، أو تراجعًا، أو إعفاء طويل الأمد من الإهمال، كإصدار جديد للنموذج. قم بتشغيل مجموعة العقود الكاملة ضده. قارن مقاييس الرفض والجودة بخطوط الأساس الخاصة بك قبل الانقطاع، وليس بأرقام النموذج البديل. اختبر شريحة صغيرة (Canary) قبل الزيادة التدريجية.
هناك درس ثانٍ، أكثر هدوءًا. تسعة عشر يومًا كافية لأن يصبح نموذجك البديل خط الأساس الفعلي. تكيف المستخدمون مع سلوك Opus 4.8؛ وقامت الفرق الداخلية بضبط المطالبات بناءً عليه. العودة ليست مجرد حدث تقني، بل هي تغيير في المنتج، وتستحق نفس العناية التي تُمنح لإطلاق منتج جديد.
الأسئلة الشائعة
هل تكفي سلسلة تجاوز الأعطال من نفس المزود، أم أحتاج إلى مزود ثانٍ؟
ابدأ بنفس المزود. يغطي حالات الإهمال، وحوادث السعة، والتراجعات الأمنية، وتعليق النموذج المحدد بتكلفة هندسية ضئيلة، وتجعل ميزات مثل الاسترجاع من جانب الخادم من Anthropic اعتماده شبه مجاني. أضف مسارًا عبر المزودين عندما يكلفك انقطاع كامل للمزود أو حدث على مستوى الحساب أكثر من تكلفة الحفاظ على تكامل ثانٍ. الوضع المتدهور يستحق البناء في كلتا الحالتين.
هل سيلاحظ المستخدمون عندما تتحول حركة المرور إلى نموذج أصغر؟
يعتمد الأمر على المهمة، لذا قم بالقياس بدلاً من التخمين. بالنسبة للاستخراج والتصنيف، غالبًا ما يكون النموذج الأصغر الذي يتم تزويده بمطالبة جيدة غير مميز. أما بالنسبة للاستدلال الطويل، فتظهر الفجوات؛ وتمنحك المعايير مثل مقارنة Fable 5 بـ Opus 4.8 خريطة مبدئية. المطالبات المتدرجة حسب القدرة والنسخ الصادق لواجهة المستخدم ("قد تكون الردود أقصر الآن") تضيق الفجوة الملحوظة بشكل أكبر.
كم مرة يجب اختبار مسار تجاوز الأعطال؟
يوميًا وفقًا لجدول زمني، وفي التكامل المستمر (CI) عند أي تغيير في المطالبات أو تكوين التوجيه، ومباشرة بعد أي إعلان من المزود يتعلق بسلسلتك. تكلفة الرموز (tokens) لتشغيل أهم عشرين مطالبة لك مقابل ثلاثة نماذج لا تذكر مقارنة باكتشاف مسار تجاوز أعطال معطل أثناء انقطاع.
سيصبح توفر النموذج أقل قابلية للتنبؤ به، وليس أكثر: تنظيم أكثر صرامة، ودورات إطلاق وإهمال أسرع، وسعة تتأرجح مع كل إطلاق. الفرق التي ستتجاوز لحظة Fable 5 القادمة ستكون تلك التي تعاملت مع النموذج كمكون قابل للاستبدال مع قطعة غيار مختبرة، وليس كجزء دائم. يتناسب العمل في ملف تكوين، وغلاف توجيه، ومجموعة عقود يتم تشغيلها كل ليلة. قم بتنزيل Apidog وقم بربط سلسلة تجاوز الأعطال الخاصة بك باختبار مجدول اليوم؛ الانقطاع التالي هو مسألة وقت.
