tools.loopDetection:
- Wykrywanie pętli (
enabled) — domyślnie wyłączone. Monitoruje bieżącą historię wywołań narzędzi pod kątem powtarzających się wzorców i ponownych prób użycia nieznanych narzędzi. - Mechanizm ochronny po kompaktowaniu (
postCompactionGuard) — włączony, gdyenablednie ma jawnie wartościfalse. Jest uzbrajany po każdej ponownej próbie po kompaktowaniu i przerywa przebieg, jeśli agent powtórzy tę samą trójkę(tool, args, result)w obrębie okna.
tools.loopDetection.enabled: false, aby wyłączyć oba mechanizmy ochronne.
Dlaczego ten mechanizm istnieje
- Wykrywanie powtarzalnych sekwencji, które nie przynoszą postępu.
- Wykrywanie częstych pętli bez wyniku (to samo narzędzie, te same dane wejściowe, powtarzające się błędy).
- Wykrywanie określonych wzorców powtarzających się wywołań znanych narzędzi odpytujących.
- Przerywanie cykli przepełnienie kontekstu -> kompaktowanie -> ta sama pętla, zamiast pozwalać im działać bez końca.
Blok konfiguracji
Globalne wartości domyślne ze wszystkimi udokumentowanymi polami:agents.list[].tools.loopDetection):
detectors i postCompactionGuard), dlatego agent musi ustawić tylko
pola, które chce zmienić.
Działanie pól
W przypadku
exec skrót braku postępu porównuje stabilne wyniki poleceń (stan,
kod wyjścia, znacznik przekroczenia limitu czasu i dane wyjściowe), ignorując zmienne metadane wykonania, takie
jak czas trwania, PID, identyfikator sesji i katalog roboczy. Skróty wyników wysyłania
wiadomości wychodzących są obliczane po usunięciu zmiennych identyfikatorów poszczególnych wywołań
(identyfikatora wiadomości, identyfikatora pliku i znacznika czasu), dzięki czemu wynik „wysłano” nie wygląda identycznie
jak inny wynik „wysłano”. Gdy dostępny jest identyfikator przebiegu, historia jest oceniana wyłącznie
w obrębie tego przebiegu, dlatego zaplanowane cykle Heartbeat i nowe przebiegi nie dziedziczą
nieaktualnych liczników pętli z wcześniejszych przebiegów.
Zalecana konfiguracja
- W przypadku mniejszych modeli ustaw
enabled: truei pozostaw progi z ich wartościami domyślnymi. Modele flagowe rzadko wymagają wykrywania na podstawie bieżącej historii i mogą pozostawić główny przełącznik z wartościąfalse, nadal korzystając z mechanizmu ochronnego po kompaktowaniu. - Zachowaj kolejność progów
warningThreshold < criticalThreshold < globalCircuitBreakerThreshold; środowisko wykonawcze podnosi wartościcriticalThresholdiglobalCircuitBreakerThreshold, jeśli ustawisz je na poziomie progu, który muszą przekraczać, lub niżej. - Jeśli wystąpią wyniki fałszywie dodatnie:
- Zwiększ
warningThresholdlubcriticalThreshold. - Opcjonalnie zwiększ
globalCircuitBreakerThreshold. - Wyłącz tylko konkretny detektor powodujący problemy (
detectors.<name>: false). - Zmniejsz
historySize, aby skrócić okno historii.
- Zwiększ
- Aby wyłączyć wszystko, w tym mechanizm ochronny po kompaktowaniu, jawnie ustaw
tools.loopDetection.enabled: false.
Mechanizm ochronny po kompaktowaniu
Po ponownej próbie po kompaktowaniu następującym wskutek przepełnienia kontekstu moduł wykonawczy uzbraja mechanizm ochronny z krótkim oknem dla kilku następnych wywołań narzędzi. Jeśli agent wyemituje tę samą trójkę(toolName, argsHash, resultHash) postCompactionGuard.windowSize
razy w obrębie tego okna, mechanizm uznaje, że kompaktowanie nie przerwało
pętli, i kończy przebieg z błędem compaction_loop_persisted.
Mechanizm ochronny podlega głównej fladze tools.loopDetection.enabled, ale z jednym
wyjątkiem: pozostaje włączony, gdy flaga nie jest ustawiona lub ma wartość true i wyłącza się
dopiero wtedy, gdy flaga ma jawnie wartość false. Jest to zamierzone — mechanizm
służy do wychodzenia z pętli kompaktowania, które w przeciwnym razie zużywałyby nieograniczoną liczbę tokenów,
dlatego użytkownik bez konfiguracji również otrzymuje tę ochronę.
- Niższa wartość
windowSizeoznacza bardziej rygorystyczne działanie (mniej prób przed przerwaniem). - Wyższa wartość
windowSizedaje agentowi więcej prób odzyskania sprawności. - Mechanizm ochronny nigdy nie przerywa przebiegu, gdy wyniki się zmieniają; uruchamiają go wyłącznie identyczne bajtowo wyniki w całym oknie.
- Jest uzbrajany wyłącznie bezpośrednio po ponownej próbie po kompaktowaniu, a nie w innych momentach przebiegu.
Mechanizm ochronny po kompaktowaniu działa zawsze, gdy główna flaga nie ma jawnie wartości
false, nawet jeśli blok tools.loopDetection nigdy nie został dodany. Aby to sprawdzić, poszukaj wpisu post-compaction guard armed for N attempts w dzienniku Gateway bezpośrednio po zdarzeniu kompaktowania.Dzienniki i oczekiwane działanie
Po wykryciu pętli OpenClaw rejestruje zdarzenie pętli i ostrzega albo blokuje następny cykl narzędzia, zależnie od poziomu istotności. Chroni to przed niekontrolowanym zużyciem tokenów i zawieszeniami, zachowując jednocześnie normalny dostęp do narzędzi.- Najpierw pojawiają się ostrzeżenia.
- Blokowanie następuje, gdy wzorzec utrzymuje się po przekroczeniu progu ostrzeżenia.
- Progi krytyczne blokują następny cykl narzędzia i zapisują jasną przyczynę wykrycia pętli w rekordzie przebiegu.
- Mechanizm ochronny po kompaktowaniu emituje błędy
compaction_loop_persisted, wskazując narzędzie powodujące problem oraz liczbę identycznych wywołań.
Powiązane materiały
Exec approvals
Zasady zezwalania na wykonywanie poleceń powłoki i odmawiania go.
Thinking levels
Poziomy nakładu rozumowania i ich współdziałanie z zasadami dostawcy.
Sub-agents
Uruchamianie izolowanych agentów w celu ograniczenia niekontrolowanego zachowania.
Configuration reference
Pełny schemat
tools.loopDetection i semantyka scalania.