tools.loopDetection:
- اكتشاف الحلقات (
enabled) - معطّل افتراضيًا. يراقب السجل المتحرك لاستدعاءات الأدوات بحثًا عن الأنماط المتكررة وإعادات محاولة الأدوات المجهولة. - آلية الحماية بعد 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 الكامل ودلالات الدمج.