OpenClaw, tekrarlayan araç çağrısı desenleri için birlikte çalışan iki koruma mekanizmasına sahiptir:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Döngü algılama (
tools.loopDetection.enabled) — varsayılan olarak devre dışıdır. Yinelenen desenler ve bilinmeyen araç yeniden denemeleri için kayan araç çağrısı geçmişini izler. - Compaction sonrası koruma (
tools.loopDetection.postCompactionGuard) —tools.loopDetection.enabledaçıkçafalseolmadığı sürece varsayılan olarak etkindir. Her Compaction yeniden denemesinden sonra devreye girer ve ajan pencere içinde aynı(tool, args, result)üçlüsünü yayarsa çalıştırmayı iptal eder.
tools.loopDetection bloğu altında yapılandırılır, ancak Compaction sonrası koruma ana anahtar açıkça kapalı olmadığı sürece çalışır. Her iki yüzeyi de susturmak için tools.loopDetection.enabled: false ayarlayın.
Bunun neden var olduğu
- İlerleme sağlamayan tekrarlayan dizileri algılamak.
- Yüksek frekanslı sonuçsuz döngüleri algılamak (aynı araç, aynı girdiler, tekrarlanan hatalar).
- Bilinen yoklama araçları için belirli tekrarlanan çağrı desenlerini algılamak.
- Bağlam taşması, ardından Compaction, ardından aynı döngü çevrimlerinin süresiz çalışmasını önlemek.
Yapılandırma bloğu
Belgelenen her alan gösterilmiş şekilde genel varsayılanlar:Alan davranışı
| Alan | Varsayılan | Etki |
|---|---|---|
enabled | false | Kayan geçmiş algılayıcıları için ana anahtar. false ayarı Compaction sonrası korumayı da devre dışı bırakır. |
historySize | 30 | Analiz için tutulan son araç çağrısı sayısı. |
warningThreshold | 10 | Bir desenin yalnızca uyarı olarak sınıflandırılmasından önceki eşik. |
criticalThreshold | 20 | Tekrarlayan ilerlemesiz döngü desenlerini engelleme eşiği. |
unknownToolThreshold | 10 | Aynı kullanılamayan araca yapılan tekrarlı çağrıları bu kadar ıskalamadan sonra engeller. |
globalCircuitBreakerThreshold | 30 | Tüm algılayıcılar genelinde genel ilerlemesizlik kesici eşiği. |
detectors.genericRepeat | true | Tekrarlanan aynı araç + aynı parametre desenlerinde uyarır ve aynı çağrılar özdeş sonuçlar da döndürdüğünde engeller. |
detectors.knownPollNoProgress | true | Durum değişikliği olmayan bilinen yoklama benzeri desenleri algılar. |
detectors.pingPong | true | Dönüşümlü ping-pong desenlerini algılar. |
postCompactionGuard.windowSize | 3 | Compaction sonrası korumanın devrede kaldığı araç çağrısı sayısı ve çalıştırmayı iptal eden özdeş üçlü sayısı. |
exec için ilerlemesizlik denetimleri kararlı komut sonuçlarını karşılaştırır ve süre, PID, oturum kimliği ve çalışma dizini gibi değişken çalışma zamanı metaverilerini yok sayar. Bir çalıştırma kimliği kullanılabildiğinde, son araç çağrısı geçmişi yalnızca o çalıştırma içinde değerlendirilir; böylece zamanlanmış Heartbeat çevrimleri ve yeni çalıştırmalar önceki çalıştırmalardan bayat döngü sayılarını devralmaz.
Önerilen kurulum
- Daha küçük modeller için
enabled: trueayarlayın ve eşikleri varsayılanlarında bırakın. Üst seviye modeller nadiren kayan geçmiş algılamasına ihtiyaç duyar ve Compaction sonrası korumadan yararlanmaya devam ederken ana anahtarıfalseolarak bırakabilir. - Eşikleri
warningThreshold < criticalThreshold < globalCircuitBreakerThresholdsırasıyla tutun. - Yanlış pozitifler oluşursa:
warningThresholdve/veyacriticalThresholddeğerini yükseltin.- İsteğe bağlı olarak
globalCircuitBreakerThresholddeğerini yükseltin. - Yalnızca soruna neden olan belirli algılayıcıyı devre dışı bırakın (
detectors.<name>: false). - Daha az katı geçmiş bağlamı için
historySizedeğerini azaltın.
- Her şeyi devre dışı bırakmak için (Compaction sonrası koruma dahil),
tools.loopDetection.enabled: falsedeğerini açıkça ayarlayın.
Compaction sonrası koruma
Çalıştırıcı, bağlam taşmasından sonra bir Compaction yeniden denemesini tamamladığında, sonraki birkaç araç çağrısını izleyen kısa pencereli bir korumayı devreye alır. Ajan pencere içinde aynı(toolName, argsHash, resultHash) üçlüsünü birden çok kez yayarsa, koruma Compaction’ın döngüyü kırmadığı sonucuna varır ve çalıştırmayı compaction_loop_persisted hatasıyla iptal eder.
Koruma, ana tools.loopDetection.enabled bayrağı tarafından bir ayrıntıyla denetlenir: bayrak ayarlanmamış veya true olduğunda etkin kalır ve yalnızca bayrak açıkça false olduğunda devre dışı kalır. Bu bilinçli bir tercihtir. Koruma, aksi halde sınırsız token harcayacak Compaction döngülerinden çıkmak için vardır; bu nedenle yapılandırmasız kullanıcı da korumayı alır.
- Daha düşük
windowSizedaha katıdır (iptalden önce daha az deneme). - Daha yüksek
windowSize, ajana daha fazla toparlanma denemesi sağlar. - Koruma, sonuçlar değişirken asla iptal etmez; yalnızca sonuçlar pencere boyunca bayt düzeyinde özdeş olduğunda iptal eder.
- Bilerek dardır: yalnızca bir Compaction yeniden denemesinin hemen sonrasında tetiklenir.
Compaction sonrası koruma, bir
tools.loopDetection bloğu hiç yazmamış olsanız bile ana bayrak açıkça false olmadığı sürece çalışır. Doğrulamak için bir Compaction olayından hemen sonra Gateway günlüğünde post-compaction guard armed for N attempts ifadesini arayın.Günlükler ve beklenen davranış
Bir döngü algılandığında, OpenClaw bir döngü olayı bildirir ve ciddiyete bağlı olarak sonraki araç çevrimini ya yumuşatır ya da engeller. Bu, normal araç erişimini korurken kullanıcıları kontrolden çıkan token harcamasından ve kilitlenmelerden korur.- Önce uyarılar gelir.
- Desenler uyarı eşiğini aştıktan sonra bastırma izler.
- Kritik eşikler sonraki araç çevrimini engeller ve çalıştırma kaydında açık bir döngü algılama nedeni gösterir.
- Compaction sonrası koruma, sorunlu araç adı ve özdeş çağrı sayısıyla
compaction_loop_persistedhataları yayar.
İlgili
Exec onayları
Kabuk yürütmesi için izin ver/reddet ilkesi.
Düşünme düzeyleri
Akıl yürütme çabası düzeyleri ve sağlayıcı ilkesi etkileşimi.
Alt ajanlar
Kontrolden çıkan davranışı sınırlandırmak için yalıtılmış ajanlar başlatma.
Yapılandırma başvurusu
Tam
tools.loopDetection şeması ve birleştirme semantiği.