Skip to main content
لدى OpenClaw آليتا حماية متعاونتان ضد أنماط استدعاء الأدوات المتكررة، وتُضبط كلتاهما ضمن tools.loopDetection:
  1. اكتشاف الحلقات (enabled) - معطّل افتراضيًا. يراقب السجل المتحرك لاستدعاءات الأدوات بحثًا عن الأنماط المتكررة وإعادات محاولة الأدوات المجهولة.
  2. آلية الحماية بعد Compaction (postCompactionGuard) - مفعّلة كلما لم تكن قيمة enabled هي false صراحةً. تُسلّح بعد كل إعادة محاولة تلي Compaction وتُجهض التشغيل إذا كرر الوكيل الثلاثية نفسها (tool, args, result) ضمن النافذة.
اضبط tools.loopDetection.enabled: false لتعطيل آليتي الحماية كلتيهما.

سبب وجود هذه الميزة

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

كتلة الإعداد

الإعدادات الافتراضية العامة، مع عرض كل حقل موثّق:
تجاوز خاص بكل وكيل (اختياري، في agents.list[].tools.loopDetection):
تُركّب إعدادات كل وكيل فوق الكتلة العامة حقلًا بحقل (بما في ذلك detectors وpostCompactionGuard المتداخلان)، لذا لا يحتاج الوكيل إلا إلى ضبط الحقول التي يريد تغييرها.

سلوك الحقول

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

الإعداد الموصى به

  • للنماذج الأصغر، اضبط enabled: true واترك الحدود عند قيمها الافتراضية. نادرًا ما تحتاج النماذج الرائدة إلى اكتشاف السجل المتحرك، ويمكنها إبقاء المفتاح الرئيسي على false مع الاستفادة رغم ذلك من آلية الحماية بعد Compaction.
  • حافظ على ترتيب الحدود warningThreshold < criticalThreshold < globalCircuitBreakerThreshold؛ يرفع وقت التشغيل criticalThreshold و globalCircuitBreakerThreshold إذا ضبطتهما عند الحد الذي يجب أن تتجاوزاه أو دونه.
  • إذا حدثت نتائج إيجابية كاذبة:
    • ارفع warningThreshold و/أو criticalThreshold.
    • ارفع globalCircuitBreakerThreshold اختياريًا.
    • عطّل فقط الكاشف المحدد المسبب للمشكلات (detectors.<name>: false).
    • قلّل historySize للحصول على نافذة سجل أقصر.
  • لتعطيل كل شيء، بما في ذلك آلية الحماية بعد Compaction، اضبط tools.loopDetection.enabled: false صراحةً.

آلية الحماية بعد Compaction

بعد إعادة محاولة Compaction التي تلي تجاوز السياق، يسلّح المشغّل آلية حماية ذات نافذة قصيرة لاستدعاءات الأدوات القليلة التالية. إذا أصدر الوكيل الثلاثية نفسها (toolName, argsHash, resultHash) بعدد مرات يساوي postCompactionGuard.windowSize ضمن تلك النافذة، تستنتج آلية الحماية أن Compaction لم تكسر الحلقة وتُجهض التشغيل بخطأ compaction_loop_persisted. تخضع آلية الحماية للعلامة الرئيسية tools.loopDetection.enabled مع اختلاف واحد: تظل مفعّلة عندما تكون العلامة غير مضبوطة أو تساوي true، ولا تُعطّل إلا عندما تكون العلامة false صراحةً. هذا مقصود - إذ وُجدت آلية الحماية للخروج من حلقات Compaction التي كانت ستستهلك عددًا غير محدود من الرموز، وبذلك يحصل المستخدم الذي لا يضبط أي إعداد على الحماية أيضًا.
  • تكون القيمة الأقل لـwindowSize أكثر صرامة (محاولات أقل قبل الإجهاض).
  • تمنح القيمة الأعلى لـwindowSize الوكيل محاولات استرداد أكثر.
  • لا تُجهض آلية الحماية التشغيل أبدًا ما دامت النتائج تتغير؛ ولا تُفعّلها إلا النتائج المتطابقة بايتًا ببايت عبر النافذة.
  • لا تُسلّح إلا مباشرةً بعد إعادة محاولة Compaction، وليس في نقاط أخرى من التشغيل.
تعمل آلية الحماية بعد Compaction كلما لم تكن العلامة الرئيسية false صراحةً، حتى إذا لم تكتب كتلة tools.loopDetection قط. للتحقق، ابحث عن post-compaction guard armed for N attempts في سجل Gateway مباشرةً بعد حدث Compaction.

السجلات والسلوك المتوقع

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

ذو صلة

موافقات Exec

سياسة السماح/الرفض لتنفيذ أوامر الصدفة.

مستويات التفكير

مستويات جهد الاستدلال والتفاعل مع سياسة المزوّد.

الوكلاء الفرعيون

إنشاء وكلاء معزولين للحد من السلوك المنفلت.

مرجع الإعداد

مخطط tools.loopDetection الكامل ودلالات الدمج.