OpenClaw ma dwa współpracujące mechanizmy zabezpieczające przed powtarzalnymi wzorcami wywołań narzędzi: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.
- Wykrywanie pętli (
tools.loopDetection.enabled) — domyślnie wyłączone. Obserwuje kroczącą historię wywołań narzędzi pod kątem powtarzających się wzorców i ponowień dla nieznanych narzędzi. - Strażnik po Compaction (
tools.loopDetection.postCompactionGuard) — domyślnie włączony, chyba żetools.loopDetection.enabledjest jawnie ustawione nafalse. Uzbraja się po każdej próbie ponowienia po Compaction i przerywa uruchomienie, gdy agent wyemituje tę samą trójkę(tool, args, result)w ramach okna.
tools.loopDetection, ale strażnik po Compaction działa zawsze, gdy przełącznik główny nie jest jawnie wyłączony. Ustaw tools.loopDetection.enabled: false, aby wyciszyć oba mechanizmy.
Dlaczego to istnieje
- Wykrywanie powtarzalnych sekwencji, które nie robią postępu.
- Wykrywanie częstych pętli bez wyniku (to samo narzędzie, te same dane wejściowe, powtarzające się błędy).
- Wykrywanie konkretnych wzorców powtarzanych wywołań dla znanych narzędzi odpytujących.
- Zapobieganie cyklom przepełnienie kontekstu, następnie Compaction, następnie ta sama pętla, które działałyby bez końca.
Blok konfiguracji
Globalne wartości domyślne, z pokazanymi wszystkimi udokumentowanymi polami:Zachowanie pól
| Pole | Domyślnie | Efekt |
|---|---|---|
enabled | false | Przełącznik główny dla detektorów kroczącej historii. Ustawienie false wyłącza także strażnika po Compaction. |
historySize | 30 | Liczba ostatnich wywołań narzędzi przechowywanych do analizy. |
warningThreshold | 10 | Próg, po którym wzorzec jest klasyfikowany wyłącznie jako ostrzeżenie. |
criticalThreshold | 20 | Próg blokowania powtarzalnych wzorców pętli bez postępu. |
unknownToolThreshold | 10 | Blokuje powtarzane wywołania tego samego niedostępnego narzędzia po tylu chybieniach. |
globalCircuitBreakerThreshold | 30 | Globalny próg przerywacza braku postępu we wszystkich detektorach. |
detectors.genericRepeat | true | Ostrzega przy powtarzanych wzorcach to samo narzędzie + te same parametry i blokuje, gdy te same wywołania zwracają także identyczne wyniki. |
detectors.knownPollNoProgress | true | Wykrywa znane wzorce podobne do odpytywania bez zmiany stanu. |
detectors.pingPong | true | Wykrywa naprzemienne wzorce ping-pong. |
postCompactionGuard.windowSize | 3 | Liczba wywołań narzędzi po Compaction, podczas których strażnik pozostaje uzbrojony, oraz liczba identycznych trójek, która przerywa uruchomienie. |
exec kontrole braku postępu porównują stabilne wyniki poleceń i ignorują zmienne metadane wykonania, takie jak czas trwania, PID, identyfikator sesji i katalog roboczy. Gdy dostępny jest identyfikator uruchomienia, historia ostatnich wywołań narzędzi jest oceniana tylko w ramach tego uruchomienia, więc zaplanowane cykle Heartbeat i świeże uruchomienia nie dziedziczą przestarzałych liczników pętli z wcześniejszych uruchomień.
Zalecana konfiguracja
- Dla mniejszych modeli ustaw
enabled: truei pozostaw progi z wartościami domyślnymi. Modele flagowe rzadko potrzebują wykrywania na podstawie kroczącej historii i mogą pozostawić przełącznik główny nafalse, nadal korzystając ze strażnika po Compaction. - Utrzymuj progi w kolejności
warningThreshold < criticalThreshold < globalCircuitBreakerThreshold. - Jeśli występują fałszywe alarmy:
- Zwiększ
warningThresholdi/lubcriticalThreshold. - Opcjonalnie zwiększ
globalCircuitBreakerThreshold. - Wyłącz tylko konkretny detektor powodujący problemy (
detectors.<name>: false). - Zmniejsz
historySize, aby kontekst historyczny był mniej rygorystyczny.
- Zwiększ
- Aby wyłączyć wszystko (w tym strażnika po Compaction), jawnie ustaw
tools.loopDetection.enabled: false.
Strażnik po Compaction
Gdy runner zakończy próbę ponowienia po Compaction po przepełnieniu kontekstu, uzbraja strażnika z krótkim oknem, który obserwuje kilka kolejnych wywołań narzędzi. Jeśli agent wyemituje tę samą trójkę(toolName, argsHash, resultHash) wielokrotnie w ramach okna, strażnik uznaje, że Compaction nie przerwało pętli, i przerywa uruchomienie błędem compaction_loop_persisted.
Strażnik jest kontrolowany przez główną flagę tools.loopDetection.enabled z jednym szczegółem: pozostaje włączony, gdy flaga jest nieustawiona lub ma wartość true, i dezaktywuje się tylko wtedy, gdy flaga jest jawnie ustawiona na false. To zamierzone. Strażnik istnieje po to, aby wychodzić z pętli Compaction, które w przeciwnym razie zużywałyby nieograniczoną liczbę tokenów, więc użytkownik bez konfiguracji nadal otrzymuje ochronę.
- Niższe
windowSizejest bardziej rygorystyczne (mniej prób przed przerwaniem). - Wyższe
windowSizedaje agentowi więcej prób odzyskania działania. - Strażnik nigdy nie przerywa, gdy wyniki się zmieniają, tylko gdy wyniki są bajtowo identyczne w całym oknie.
- Jest celowo wąski: uruchamia się tylko bezpośrednio po próbie ponowienia po Compaction.
Strażnik po Compaction działa zawsze, gdy flaga główna nie jest jawnie ustawiona na
false, nawet jeśli nigdy nie zapisano bloku tools.loopDetection. Aby to zweryfikować, poszukaj post-compaction guard armed for N attempts w dzienniku Gateway bezpośrednio po zdarzeniu Compaction.Dzienniki i oczekiwane zachowanie
Gdy pętla zostanie wykryta, OpenClaw zgłasza zdarzenie pętli i albo tłumi, albo blokuje następny cykl narzędzi zależnie od wagi. Chroni to użytkowników przed niekontrolowanym zużyciem tokenów i blokadami, zachowując normalny dostęp do narzędzi.- Ostrzeżenia pojawiają się najpierw.
- Tłumienie następuje, gdy wzorce utrzymują się po przekroczeniu progu ostrzeżeń.
- Progi krytyczne blokują następny cykl narzędzi i ujawniają jasny powód wykrycia pętli w rekordzie uruchomienia.
- Strażnik po Compaction emituje błędy
compaction_loop_persistedz nazwą narzędzia powodującego problem i liczbą identycznych wywołań.
Powiązane
Zatwierdzenia exec
Zasady zezwalania/odmawiania wykonywania powłoki.
Poziomy myślenia
Poziomy wysiłku rozumowania i interakcja z zasadami dostawcy.
Podagenci
Uruchamianie izolowanych agentów, aby ograniczać niekontrolowane zachowanie.
Dokumentacja konfiguracji
Pełny schemat
tools.loopDetection i semantyka scalania.