Concepts and configuration

تجاوز فشل النموذج

يتعامل OpenClaw مع حالات الفشل على مرحلتين:

  1. تدوير ملف تعريف المصادقة ضمن المزوّد الحالي.
  2. الرجوع الاحتياطي للنموذج إلى النموذج التالي في agents.defaults.model.fallbacks.

تدفق وقت التشغيل

  • حل حالة الجلسة

    حل النموذج النشط للجلسة وتفضيل ملف تعريف المصادقة.

  • إنشاء سلسلة المرشحين

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

  • تجربة المزوّد الحالي

    جرّب المزوّد الحالي وفق قواعد تدوير ملفات تعريف المصادقة وفترة التهدئة.

  • الانتقال عند حدوث أخطاء تستدعي تجاوز الفشل

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

  • حفظ تجاوز الرجوع الاحتياطي

    احفظ تجاوز الرجوع الاحتياطي المحدد قبل بدء إعادة المحاولة كي يرى قارئو الجلسة الآخرون المزوّد والنموذج نفسيهما اللذين سيستخدمهما المشغّل. يُوسم تجاوز النموذج المحفوظ بالقيمة modelOverrideSource: "auto".

  • التراجع المحدود عند الفشل

    إذا فشل مرشح الرجوع الاحتياطي، فتراجع فقط عن حقول تجاوز الجلسة التي يملكها الرجوع الاحتياطي عندما تظل مطابقة لذلك المرشح الفاشل.

  • طرح FallbackSummaryError عند استنفاد المرشحين

    إذا فشل كل مرشح، فاطرح FallbackSummaryError يتضمن تفاصيل كل محاولة وأقرب وقت لانتهاء فترة التهدئة عندما يكون معلومًا.

  • هذا أضيق نطاقًا عن قصد من «حفظ الجلسة بأكملها واستعادتها». لا يحفظ مشغّل الرد إلا حقول تحديد النموذج التي يملكها لأغراض الرجوع الاحتياطي: providerOverride وmodelOverride وmodelOverrideSource وauthProfileOverride وauthProfileOverrideSource وauthProfileOverrideCompactionCount. يمنع ذلك محاولة رجوع احتياطي فاشلة من استبدال تغييرات أحدث وغير مرتبطة في الجلسة، مثل تغيير يدوي عبر /model أو تحديث تدوير الجلسة الذي حدث أثناء تنفيذ المحاولة.

    سياسة مصدر التحديد

    يتحكم مصدر التحديد في السماح بسلسلة الرجوع الاحتياطي:

    • الإعداد الافتراضي المضبوط: يستخدم agents.defaults.model.primary القيمة agents.defaults.model.fallbacks.
    • النموذج الأساسي للوكيل: يكون agents.list[].model صارمًا ما لم يتضمن كائن نموذج ذلك الوكيل قائمة fallbacks خاصة به. استخدم fallbacks: [] للتصريح بالسلوك الصارم، أو قائمة غير فارغة لتمكين الرجوع الاحتياطي للنموذج لذلك الوكيل.
    • تجاوز الرجوع الاحتياطي التلقائي: يكتب الرجوع الاحتياطي في وقت التشغيل القيم providerOverride وmodelOverride وmodelOverrideSource: "auto" ونموذج المصدر المحدد قبل إعادة المحاولة. يواصل هذا التجاوز التقدم عبر سلسلة الرجوع الاحتياطي المضبوطة دون اختبار النموذج الأساسي عند كل رسالة، لكن OpenClaw يختبر المصدر المضبوط كل 5 دقائق (غير قابل للضبط) ويمسح التجاوز بمجرد تعافيه. تمسح /new و/reset وsessions.reset أيضًا التجاوزات ذات المصدر التلقائي. تمسح عمليات Heartbeat التي لا تتضمن heartbeat.model صريحًا التجاوزات التلقائية المباشرة عندما لا يعود مصدرها مطابقًا للإعداد الافتراضي المضبوط حاليًا.
    • تجاوز جلسة المستخدم: تكتب /model وأداة اختيار النموذج وsession_status(model=...) وsessions.patch القيمة modelOverrideSource: "user". هذا تحديد دقيق للنموذج في الجلسة. إذا فشل المزوّد أو النموذج المحدد قبل إنتاج رد، يُبلغ OpenClaw عن الفشل بدلًا من الرد باستخدام نموذج رجوع احتياطي مضبوط غير مرتبط.
    • تجاوز جلسة قديم: قد تتضمن إدخالات الجلسات الأقدم modelOverride من دون modelOverrideSource. يعامل OpenClaw هذه الإدخالات كتجاوزات مستخدم كي لا يتحول تحديد قديم وصريح بصمت إلى سلوك رجوع احتياطي.
    • نموذج حمولة Cron: يُعد payload.model أو --model الخاص بمهمة Cron نموذجًا أساسيًا للمهمة، وليس تجاوزًا لجلسة المستخدم. يستخدم بدائل الرجوع المضبوطة ما لم توفر المهمة payload.fallbacks؛ وتجعل payload.fallbacks: [] تشغيل Cron صارمًا.

    يتذكر OpenClaw اختبارات النموذج الأساسي الأخيرة لكل جلسة ونموذج أساسي، بحيث لا يُعاد اختبار نموذج أساسي فاشل عند كل دورة. ويرسل إشعارًا مرئيًا عندما تنتقل الجلسة إلى نموذج رجوع احتياطي وإشعارًا آخر عندما تعود إلى النموذج الأساسي المحدد؛ ولا يكرر الإشعار في كل دورة تستمر في استخدام الرجوع الاحتياطي.

    ذاكرة التخزين المؤقت لتخطي إخفاقات المصادقة

    افتراضيًا، تحافظ كل دورة جديدة على سلوك إعادة محاولة الرجوع الاحتياطي الحالي: يعيد OpenClaw تجربة كل مرشح رجوع احتياطي مضبوط، بما في ذلك المرشحون غير الأساسيين الذين فشلوا مؤخرًا بسبب auth أو auth_permanent.

    فعّل منع تكرار إخفاقات المصادقة باستخدام:

    bash
    OPENCLAW_FALLBACK_SKIP_TTL_MS=60000

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

    القيمة هي مدة صلاحية بالمللي ثانية. تؤدي القيمة 0 أو عدم تعيينها إلى تعطيل ذاكرة التخزين المؤقت. تُقيّد القيم الموجبة بين ثانية واحدة و10 دقائق.

    إشعارات الرجوع الاحتياطي المرئية للمستخدم

    عندما تنتقل جلسة إلى نموذج رجوع احتياطي محدد تلقائيًا، يرسل OpenClaw إشعار حالة في واجهة الرد نفسها:

    text
    ↪️ Model Fallback: <fallback> (selected <primary>; <reason>)

    عندما ينجح اختبار لاحق وتعود الجلسة إلى النموذج الأساسي المحدد، يرسل OpenClaw:

    text
    ↪️ Model Fallback cleared: <primary> (was <fallback>)

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

    تخزين المصادقة (المفاتيح + OAuth)

    يستخدم OpenClaw ملفات تعريف المصادقة لكل من مفاتيح API ورموز OAuth المميزة.

    • توجد الأسرار وحالة توجيه المصادقة في وقت التشغيل داخل ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
    • لا تمثل auth.profiles وauth.order في الإعدادات سوى بيانات وصفية وتوجيه (من دون أسرار).
    • ملف OAuth القديم المخصص للاستيراد فقط: ~/.openclaw/credentials/oauth.json (يُستورد إلى مخزن مصادقة الوكيل عند أول استخدام).
    • يستورد openclaw doctor --fix الملفات القديمة auth-profiles.json وauth-state.json وملفات auth.json الخاصة بكل وكيل.

    مزيد من التفاصيل: OAuth

    أنواع بيانات الاعتماد:

    • type: "api_key"{ provider, key }
    • type: "oauth"{ provider, access, refresh, expires, email? } (+ projectId/enterpriseUrl لبعض المزوّدين)
    • type: "token" → رمز مميز ثابت من نمط رمز حامل، ويمكن أن تنتهي صلاحيته؛ لا يجدده OpenClaw (يُستخدم مع aws-sdk وأنماط مصادقة سلاسل بيانات الاعتماد الأخرى)

    معرّفات ملفات التعريف

    تنشئ عمليات تسجيل الدخول عبر OAuth ملفات تعريف منفصلة كي تتمكن حسابات متعددة من التعايش.

    • الإعداد الافتراضي: provider:default عند عدم توفر بريد إلكتروني.
    • OAuth مع بريد إلكتروني: provider:<email> (على سبيل المثال google-antigravity:user@gmail.com).

    توجد ملفات التعريف في مخزن ملفات تعريف المصادقة openclaw-agent.sqlite الخاص بكل وكيل.

    ترتيب التدوير

    عندما يمتلك المزوّد ملفات تعريف متعددة، يختار OpenClaw ترتيبًا كما يلي:

  • الإعداد الصريح

    auth.order[provider] (إذا كان معينًا).

  • ملفات التعريف المضبوطة

    auth.profiles بعد تصفيتها حسب المزوّد.

  • ملفات التعريف المخزنة

    إدخالات ملفات تعريف المصادقة في SQLite الخاصة بكل وكيل للمزوّد.

  • إذا لم يُضبط ترتيب صريح، يستخدم OpenClaw ترتيبًا دوريًا:

    • المفتاح الأساسي: نوع ملف التعريف (OAuth، ثم الرمز المميز الثابت، ثم مفتاح API).
    • المفتاح الثانوي: usageStats.lastUsed (الأقدم أولًا ضمن كل نوع).
    • تُنقل ملفات التعريف الخاضعة للتهدئة أو المعطلة إلى النهاية، مرتبة حسب أقرب وقت لانتهاء الصلاحية.

    ثبات الجلسة (ملائم لذاكرة التخزين المؤقت)

    يثبّت OpenClaw ملف تعريف المصادقة المختار لكل جلسة لإبقاء ذاكرات المزوّد المؤقتة نشطة. ولا يدوّره عند كل طلب. يُعاد استخدام ملف التعريف المثبّت حتى:

    • تُعاد تهيئة الجلسة (/new / /reset)
    • تكتمل عملية Compaction (تزداد قيمة عداد Compaction)
    • يدخل ملف التعريف في فترة تهدئة أو يصبح معطلًا

    يؤدي التحديد اليدوي عبر /model …@<profileId> إلى تعيين تجاوز مستخدم لتلك الجلسة، ولا يُدوّر تلقائيًا حتى تبدأ جلسة جديدة.

    اشتراك OpenAI Codex مع مفتاح API احتياطي

    بالنسبة إلى نماذج وكلاء OpenAI، تكون المصادقة ووقت التشغيل منفصلين. يظل openai/gpt-* على بيئة Codex بينما يمكن تدوير المصادقة بين ملف تعريف اشتراك Codex ونسخة احتياطية من مفتاح OpenAI API.

    استخدم auth.order.openai للترتيب الذي يراه المستخدم:

    json5
    {  auth: {    order: {      openai: ["openai:user@example.com", "openai:api-key-backup"],    },  },}

    استخدم openai:* لكل من ملفات تعريف OAuth الخاصة بـ ChatGPT/Codex وملفات تعريف مفاتيح OpenAI API. عندما يصل الاشتراك إلى حد استخدام Codex، يسجل OpenClaw وقت إعادة الضبط الدقيق عندما يوفره Codex، ويجرب ملف تعريف المصادقة التالي في الترتيب، ويُبقي التشغيل داخل بيئة Codex. بعد انقضاء وقت إعادة الضبط، يصبح ملف تعريف الاشتراك مؤهلًا مجددًا، ويمكن للتحديد التلقائي التالي العودة إليه.

    استخدم ملف تعريف مثبّتًا بواسطة المستخدم فقط عندما تريد فرض حساب أو مفتاح واحد لتلك الجلسة. ملفات التعريف المثبّتة بواسطة المستخدم صارمة عن قصد ولا تنتقل بصمت إلى ملف تعريف آخر.

    فترات التهدئة

    عندما يفشل ملف تعريف بسبب أخطاء المصادقة أو حدود المعدل (أو انتهاء مهلة يبدو كأنه تحديد للمعدل)، يضعه OpenClaw في فترة تهدئة وينتقل إلى ملف التعريف التالي.

    ما يندرج ضمن فئة حدود المعدل وانتهاء المهلة

    فئة حدود المعدل هذه أوسع من مجرد 429: فهي تشمل أيضًا رسائل المزوّد مثل Too many concurrent requests وThrottlingException وconcurrency limit reached وworkers_ai ... quota limit exceeded وthrottled وresource exhausted، وحدود نوافذ الاستخدام الدورية مثل weekly limit reached أو monthly limit exhausted.

    تكون أخطاء التنسيق أو الطلب غير الصالح نهائية عادةً، لأن إعادة محاولة الحمولة نفسها ستفشل بالطريقة نفسها، ولذلك يعرضها OpenClaw بدلًا من تدوير ملفات تعريف المصادقة. يمكن لمسارات إصلاح إعادة المحاولة المعروفة التفعيل صراحةً: فعلى سبيل المثال، تُنقّى إخفاقات التحقق من معرّفات استدعاء الأدوات في Cloud Code Assist وتُعاد محاولتها مرة واحدة عبر سياسة allowFormatRetry. تُصنف أخطاء سبب التوقف المتوافقة مع OpenAI، مثل Unhandled stop reason: error وstop reason: error وreason: error، على أنها إشارات انتهاء مهلة أو تجاوز فشل.

    يمكن أيضًا أن يندرج نص عام من الخادم ضمن فئة انتهاء المهلة عندما يطابق المصدر نمطًا مؤقتًا معروفًا. فعلى سبيل المثال، تُعامل رسالة غلاف تدفق وقت تشغيل النموذج المجردة An unknown error occurred على أنها تستدعي تجاوز الفشل لدى كل مزوّد، لأن وقت تشغيل النموذج المشترك يصدرها عندما تنتهي تدفقات المزوّد بالقيمة stopReason: "aborted" أو stopReason: "error" من دون تفاصيل محددة. كما تُعامل حمولات JSON من نوع api_error التي تتضمن نصًا مؤقتًا من الخادم، مثل internal server error أو unknown error, 520 أو upstream error أو backend error، على أنها حالات انتهاء مهلة تستدعي تجاوز الفشل.

    يُعامل النص العام الخاص بمصدر OpenRouter، مثل Provider returned error المجرد، على أنه انتهاء مهلة فقط عندما يكون سياق المزوّد هو OpenRouter فعلًا. أما نص الرجوع الداخلي العام، مثل LLM request failed with an unknown error.، فيظل محافظًا ولا يؤدي وحده إلى تشغيل تجاوز الفشل.

    الحدود القصوى لـ retry-after في SDK

    قد تدخل بعض حِزم SDK الخاصة بموفّري الخدمة، لولا ذلك، في سكون طوال نافذة Retry-After طويلة قبل إعادة التحكم إلى OpenClaw. بالنسبة إلى حِزم SDK المبنية على Stainless مثل Anthropic وOpenAI، يضع OpenClaw افتراضيًا حدًا أقصى قدره 60 ثانية لانتظارات retry-after-ms / retry-after الداخلية في SDK، ويُظهر الاستجابات الأطول القابلة لإعادة المحاولة فورًا حتى يمكن تشغيل مسار تجاوز الفشل هذا. اضبط الحد أو عطّله باستخدام OPENCLAW_SDK_RETRY_MAX_WAIT_SECONDS؛ راجع سلوك إعادة المحاولة.

    فترات التهدئة المحددة بنطاق النموذج

    يمكن أيضًا تحديد نطاق فترات التهدئة الناتجة عن حدود المعدل حسب النموذج:

    • يسجّل OpenClaw القيمة cooldownModel لإخفاقات حدود المعدل عندما يكون معرّف النموذج المخفق معروفًا.
    • لا يزال من الممكن تجربة نموذج شقيق لدى موفّر الخدمة نفسه عندما تكون فترة التهدئة محددة بنطاق نموذج مختلف.
    • تظل نوافذ الفوترة/التعطيل تحظر ملف التعريف بأكمله عبر النماذج.

    تتدرج فترات التهدئة العادية (غير المتعلقة بالفوترة وغير الناتجة عن إخفاق مصادقة دائم) وفق عدد الأخطاء الحديثة في ملف التعريف:

    • الإخفاق الأول: 30 ثانية
    • الإخفاق الثاني: دقيقة واحدة
    • الإخفاق الثالث وما بعده: 5 دقائق (الحد الأقصى)

    تُصفّر العدادات بعد انقضاء نافذة إخفاق ملف التعريف (auth.cooldowns.failureWindowHours، والقيمة الافتراضية 24).

    تُخزّن الحالة في حالة مصادقة SQLite الخاصة بكل وكيل ضمن usageStats:

    json
    {  "usageStats": {    "provider:profile": {      "lastUsed": 1736160000000,      "cooldownUntil": 1736160600000,      "errorCount": 2    }  }}

    تعطيلات الفوترة

    تُعامل إخفاقات الفوترة/الرصيد (مثل "الرصيد غير كافٍ" / "رصيد الاعتماد منخفض جدًا") على أنها تستدعي تجاوز الفشل، لكنها لا تكون مؤقتة عادةً. بدلًا من فترة تهدئة قصيرة، يضع OpenClaw علامة معطّل على ملف التعريف (مع تراجع أطول) وينتقل إلى ملف التعريف/موفّر الخدمة التالي.

    تحصل إخفاقات المصادقة الدائمة عالية الثقة (المفاتيح الملغاة/المعطّلة ومساحات العمل المعطّلة) على مسار تعطيل مماثل، لكنها تتعافى في وقت أقرب بكثير من إخفاقات الفوترة لأن بعض موفّري الخدمة قد يُظهرون حمولات تبدو كأخطاء مصادقة بصورة مؤقتة أثناء الحوادث.

    تُخزّن الحالة في حالة مصادقة SQLite الخاصة بكل وكيل:

    json
    {  "usageStats": {    "provider:profile": {      "disabledUntil": 1736178000000,      "disabledReason": "billing"    }  }}

    القيم الافتراضية (auth.cooldowns.*):

    المفتاح القيمة الافتراضية الغرض
    billingBackoffHours 5 التراجع الأساسي للفوترة، ويتضاعف مع كل إخفاق فوترة
    billingMaxHours 24 الحد الأقصى لتراجع الفوترة
    authPermanentBackoffMinutes 10 التراجع الأساسي لإخفاقات المصادقة الدائمة عالية الثقة
    authPermanentMaxMinutes 60 الحد الأقصى لذلك التراجع
    failureWindowHours 24 تُصفّر عدادات الإخفاق إذا لم تحدث إخفاقات ضمن هذه النافذة
    overloadedProfileRotations 1 عدد تبديلات ملفات التعريف المسموح بها لدى موفّر الخدمة نفسه قبل الرجوع إلى نموذج بديل عند الحمل الزائد
    overloadedBackoffMs 0 التأخير الثابت قبل إعادة محاولة التبديل بسبب الحمل الزائد
    rateLimitedProfileRotations 1 عدد تبديلات ملفات التعريف المسموح بها لدى موفّر الخدمة نفسه قبل الرجوع إلى نموذج بديل عند بلوغ حد المعدل

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

    الرجوع إلى نموذج بديل

    إذا أخفقت جميع ملفات التعريف لدى موفّر خدمة، ينتقل OpenClaw إلى النموذج التالي في agents.defaults.model.fallbacks. ينطبق ذلك على إخفاقات المصادقة وحدود المعدل وانتهاء المهلة التي استنفدت تبديل ملفات التعريف (أما الأخطاء الأخرى فلا تُقدّم سلسلة الرجوع). وتُسمّى أخطاء موفّر الخدمة التي لا تعرض تفاصيل كافية بدقة في حالة الرجوع: تعني empty_response أن موفّر الخدمة لم يُرجع رسالة أو حالة قابلة للاستخدام، وتعني no_error_details أن موفّر الخدمة أعاد صراحةً Unknown error (no error details in response)، وتعني unclassified أن OpenClaw احتفظ بالمعاينة الخام لكن لم يطابقها أي مصنّف بعد.

    تندرج إشارات انشغال موفّر الخدمة مثل ModelNotReadyException ضمن فئة الحمل الزائد، وتتبع سياسة التبديل مرة واحدة ثم الرجوع نفسها المستخدمة لحدود المعدل (راجع جدول القيم الافتراضية أعلاه).

    عندما يبدأ تشغيل من النموذج الأساسي الافتراضي المضبوط، أو النموذج الأساسي لمهمة Cron، أو النموذج الأساسي لوكيل ذي بدائل صريحة، أو تجاوز رجوع محدد تلقائيًا، يمكن لـ OpenClaw اجتياز سلسلة البدائل المضبوطة المطابقة. أما النماذج الأساسية للوكلاء التي لا تملك بدائل صريحة، واختيارات المستخدم الصريحة (مثل /model ollama/qwen3.5:27b أو منتقي النماذج أو sessions.patch أو تجاوزات موفّر الخدمة/النموذج لمرة واحدة عبر CLI) فهي صارمة: إذا تعذر الوصول إلى موفّر الخدمة/النموذج أو أخفق قبل إنتاج رد، يُبلغ OpenClaw عن الإخفاق بدلًا من الرد باستخدام بديل غير ذي صلة.

    قواعد سلسلة المرشحين

    ينشئ OpenClaw قائمة المرشحين من provider/model المطلوب حاليًا بالإضافة إلى البدائل المضبوطة.

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

    الأخطاء التي تُقدّم سلسلة الرجوع

    يستمر عند

    • إخفاقات المصادقة
    • حدود المعدل واستنفاد فترات التهدئة
    • أخطاء الحمل الزائد/انشغال موفّر الخدمة
    • أخطاء تجاوز الفشل ذات طابع انتهاء المهلة
    • تعطيلات الفوترة
    • LiveSessionModelSwitchError، الذي يُطبّع إلى مسار تجاوز فشل حتى لا يُنشئ نموذج قديم محفوظ حلقة إعادة محاولة خارجية
    • الأخطاء الأخرى غير المتعرّف عليها عندما تظل هناك عناصر مرشحة

    لا يستمر عند

    • عمليات الإلغاء الصريحة التي لا تأخذ طابع انتهاء المهلة/تجاوز الفشل
    • أخطاء تجاوز سعة السياق التي يجب أن تبقى ضمن منطق Compaction/إعادة المحاولة (مثل request_too_large أو input token count exceeds the maximum number of input tokens أو input exceeds the maximum number of tokens أو input too long for the model أو ollama error: context length exceeded)
    • خطأ نهائي غير معروف عند عدم تبقي أي مرشحين
    • حالات رفض السلامة في Claude Fable 5؛ تتعامل طلبات مفتاح API المباشرة معها على مستوى موفّر الخدمة عبر رجوع Anthropic من جانب الخادم إلى claude-opus-4-8 بدلًا من ذلك (راجع Anthropic)

    سلوك تخطي فترة التهدئة مقابل الاختبار

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

    القرارات لكل مرشح
    • تتسبب إخفاقات المصادقة المستمرة في تخطي موفّر الخدمة بأكمله فورًا.
    • تؤدي تعطيلات الفوترة إلى التخطي عادةً، لكن لا يزال من الممكن اختبار المرشح الأساسي وفق تقييد زمني حتى يصبح التعافي ممكنًا دون إعادة التشغيل.
    • يمكن اختبار المرشح الأساسي قرب انتهاء فترة التهدئة، مع تقييد زمني لكل موفّر خدمة.
    • يمكن محاولة استخدام البدائل الشقيقة لدى موفّر الخدمة نفسه رغم فترة التهدئة عندما يبدو الإخفاق مؤقتًا (rate_limit أو overloaded أو غير معروف). وهذا مهم خصوصًا عندما يكون حد المعدل محددًا بنطاق نموذج وقد يتمكن نموذج شقيق من التعافي فورًا.
    • تقتصر اختبارات فترات التهدئة المؤقتة على اختبار واحد لكل موفّر خدمة في كل تشغيل للرجوع، حتى لا يعطّل موفّر خدمة واحد الرجوع عبر موفّري الخدمة.

    تجاوزات الجلسة والتبديل المباشر للنموذج

    تغييرات نموذج الجلسة هي حالة مشتركة. يقرأ المشغّل النشط وأمر /model وتحديثات Compaction/الجلسة وتسوية الجلسة المباشرة أجزاءً من مُدخل الجلسة نفسه أو يكتبونها.

    يعني ذلك أن إعادات محاولة الرجوع يجب أن تتناسق مع التبديل المباشر للنموذج:

    • لا تضع علامة تبديل مباشر معلّق إلا تغييرات النموذج الصريحة التي يجريها المستخدم. ويشمل ذلك /model وsession_status(model=...) وsessions.patch.
    • لا تضع تغييرات النموذج التي يقودها النظام، مثل تبديل البدائل أو تجاوزات Heartbeat أو Compaction، علامة تبديل مباشر معلّق من تلقاء نفسها.
    • تُعامل تجاوزات النموذج التي يجريها المستخدم على أنها اختيارات دقيقة لأغراض سياسة الرجوع، لذلك يظهر تعذر الوصول إلى موفّر الخدمة المحدد كإخفاق بدلًا من حجبه بواسطة agents.defaults.model.fallbacks.
    • قبل بدء إعادة محاولة الرجوع، يحفظ مشغّل الرد حقول تجاوز البديل المحدد في مُدخل الجلسة.
    • تظل تجاوزات الرجوع التلقائي محددة في الأدوار اللاحقة حتى لا يختبر OpenClaw نموذجًا أساسيًا معروف التعطل مع كل رسالة. يختبر OpenClaw المصدر المضبوط مجددًا بصورة دورية ويمحو التجاوز التلقائي عند تعافيه؛ وتمحو /new و/reset وsessions.reset التجاوزات ذات المصدر التلقائي فورًا.
    • تعلن ردود المستخدم عن انتقالات الرجوع وعن التعافي الذي يمحو الرجوع مرةً واحدة لكل تغيير في الحالة. ولا تكرر الأدوار التي يظل فيها الرجوع ثابتًا الإشعار.
    • يعرض /status النموذج المحدد، وعندما تختلف حالة الرجوع، يعرض نموذج الرجوع النشط وسببه.
    • تفضّل تسوية الجلسة المباشرة تجاوزات الجلسة المحفوظة على حقول نموذج وقت التشغيل القديمة.
    • إذا أشار خطأ تبديل مباشر إلى مرشح لاحق في سلسلة الرجوع النشطة، ينتقل OpenClaw مباشرةً إلى ذلك النموذج المحدد بدلًا من اجتياز مرشحين غير ذوي صلة أولًا.
    • إذا أخفقت محاولة الرجوع، يتراجع المشغّل عن حقول التجاوز التي كتبها فقط، وفقط إذا كانت لا تزال تطابق ذلك المرشح المخفق.

    يمنع ذلك حالة التسابق التقليدية:

  • إخفاق النموذج الأساسي

    يُخفق النموذج الأساسي المحدد.

  • اختيار البديل في الذاكرة

    يُختار المرشح البديل في الذاكرة.

  • مخزن الجلسة لا يزال يشير إلى النموذج الأساسي القديم

    لا يزال مخزن الجلسة يعكس النموذج الأساسي القديم.

  • التسوية المباشرة تقرأ حالة قديمة

    تقرأ تسوية الجلسة المباشرة حالة الجلسة القديمة.

  • إرجاع إعادة المحاولة

    تُعاد محاولة إعادة المحاولة إلى النموذج القديم قبل بدء محاولة الرجوع.

  • يغلق تجاوز الرجوع المحفوظ تلك النافذة، ويحافظ التراجع المحدود على تغييرات الجلسة اليدوية أو تغييرات وقت التشغيل الأحدث دون مساس.

    قابلية الرصد وملخصات الإخفاق

    تسجّل runWithModelFallback(...) تفاصيل كل محاولة التي تغذي السجلات ورسائل فترة التهدئة الموجّهة للمستخدم:

    • المزوّد/النموذج الذي جرت محاولته
    • السبب (rate_limit وoverloaded وbilling وauth وmodel_not_found وأسباب تجاوز الفشل المشابهة)
    • الحالة/الرمز الاختياري
    • ملخص خطأ مقروء للبشر

    تتضمن سجلات model_fallback_decision المنظّمة أيضًا حقول fallbackStep* مسطّحة عند فشل أحد المرشحين أو تخطيه أو نجاح تجاوز فشل لاحق. تجعل هذه الحقول الانتقال الذي جرت محاولته صريحًا (fallbackStepFromModel وfallbackStepToModel وfallbackStepFromFailureReason وfallbackStepFromFailureDetail وfallbackStepFinalOutcome)، بحيث يمكن لمصدّري السجلات والتشخيصات إعادة بناء الفشل الأساسي حتى عند فشل تجاوز الفشل النهائي أيضًا.

    عندما يفشل كل المرشحين، يطرح OpenClaw الخطأ FallbackSummaryError. ويمكن لمشغّل الرد الخارجي استخدامه لإنشاء رسالة أكثر تحديدًا مثل «جميع النماذج خاضعة مؤقتًا لتقييد المعدل»، وتضمين أقرب وقت لانتهاء فترة التهدئة عند معرفته.

    يراعي ملخص فترة التهدئة هذا النموذج:

    • تُتجاهل قيود المعدل غير المرتبطة والمحددة على مستوى النموذج بالنسبة إلى سلسلة المزوّد/النموذج التي جرت محاولتها
    • إذا كان الحظر المتبقي قيد معدل مطابقًا ومحددًا على مستوى النموذج، يُبلغ OpenClaw عن آخر وقت انتهاء مطابق لا يزال يحظر ذلك النموذج

    الإعدادات ذات الصلة

    راجع إعدادات Gateway لمعرفة:

    • auth.profiles / auth.order
    • auth.cooldowns.billingBackoffHours / auth.cooldowns.billingBackoffHoursByProvider
    • auth.cooldowns.billingMaxHours / auth.cooldowns.failureWindowHours
    • auth.cooldowns.authPermanentBackoffMinutes / auth.cooldowns.authPermanentMaxMinutes
    • auth.cooldowns.overloadedProfileRotations / auth.cooldowns.overloadedBackoffMs
    • auth.cooldowns.rateLimitedProfileRotations
    • agents.defaults.model.primary / agents.defaults.model.fallbacks
    • توجيه agents.defaults.imageModel

    راجع النماذج للحصول على نظرة عامة أشمل حول اختيار النماذج وتجاوز الفشل.

    Was this useful?
    On this page

    On this page