Das Problem
Die Anfrage wirkt einfach: Bestellstatus finden und eine kurze Antwort zurĂŒckgeben.
In den Logs sieht man, dass der Agent denselben Zyklus wiederholt:
plan â call_tool â analyze â plan â call_tool â analyze
Vor einer Woche wurde so eine Aufgabe in 3-4 Schritten gelöst.
Jetzt kann derselbe Anfrage-Typ 20+ Schritte laufen und mit timeout enden.
In 15 Minuten kann der Agent 60+ Schritte machen und etwa 12 $ fĂŒr eine Aufgabe verbrauchen, die normalerweise ~0.08 $ kostet.
Das System fÀllt nicht sofort aus.
Es verbrennt nur langsam Zeit, Tokens und Geld.
Analogie: Stell dir ein Navi vor, das an jeder Kreuzung sagt "bitte wenden", selbst wenn du schon gewendet hast. Das Auto fÀhrt, aber du kommst dem Ziel nicht nÀher. Infinite loop bei Agenten funktioniert genauso: es gibt Aktionen, aber keinen Fortschritt.
Warum das passiert
LLM-Agenten sind stochastische Systeme. Schon eine kleine Ănderung bei Prompt, Tool-Output oder Kontext kann die Schrittfolge verschieben. Wenn runtime echten Fortschritt nicht prĂŒft, bleibt der Zyklus leicht hĂ€ngen.
In Production sieht es meist so aus:
- LLM schlÀgt die nÀchste Aktion vor;
- der Agent ruft
toolauf; - er bekommt eine Beobachtung, aber ohne neues Signal;
- er geht wieder in denselben Reasoning Loop zurĂŒck.
Infinite loop entsteht nicht dann, wenn der Agent "zu lange nachdenkt", sondern wenn runtime nĂŒtzliche Arbeit nicht von Wiederholung ohne Fortschritt unterscheidet.
Welche AusfÀlle am hÀufigsten auftreten
Um es nicht zu verkomplizieren, sieht man im Infinite-Loop-Szenario meistens vier Muster.
Harte Schleife (Hard loop)
Der Agent ruft dasselbe tool mit denselben Argumenten viele Male auf.
Typische Ursache: kein dedupe auf tool+args oder Wiederholungen ohne Limit.
Weiche Schleife (Soft loop)
Der Agent macht dieselbe Aktion mit minimalen Argument-Ănderungen: zum Beispiel ein Wort zur Suche hinzufĂŒgen und erneut probieren.
Typische Ursache: keine PrĂŒfung "ob etwas Neues erschienen ist".
Retry-Sturm (Retry storm)
Das Tool fÀllt aus, und gleichzeitig retryn sowohl gateway als auch Agent. Dadurch vervielfacht sich die Anzahl der Aufrufe.
Typische Ursache: Retry-Logik ĂŒber mehrere Schichten verteilt, ohne einheitliche Policy.
Semantische Schleife (Semantic loop)
Der Agent wirkt aktiv, bewegt sich aber nicht: er formuliert den Plan um, re-summarized dieselben Daten oder fragt erneut, was bereits bekannt ist.
Typische Ursache: kein klares Fortschrittskriterium in runtime.
Wie man diese Probleme erkennt
Infinite loop erkennt man besser ĂŒber eine Kombination von Signalen als ĂŒber eine einzelne Metrik.
| Metrik | Loop-Signal | Was tun |
|---|---|---|
steps_per_task | starker Schrittanstieg ohne Abschluss | hartes max_steps und stop reason ergÀnzen |
repeated_tool_signature_rate | Wiederholungen von tool+args innerhalb eines Runs | dedupe aktivieren und Wiederholungs-Limit setzen |
no_progress_steps | mehrere Schritte ohne neue Fakten/Artifacts | Run per no-progress-window-Regel stoppen |
stop_reason_distribution | viele timeout und max_steps_reached | retry policy und runtime-gates prĂŒfen |
tokens_per_task | Kosten steigen, QualitĂ€t bleibt gleich | context/tool output begrenzen und progress check einfĂŒhren |
Wie man Fehler von einer wirklich komplexen Aufgabe unterscheidet
Ein langer Run bedeutet nicht immer loop. Die SchlĂŒsselfrage: erscheint ein neues, nĂŒtzliches Signal.
Normal, wenn:
- jeder 1-2 Schritte neue Fakten oder Artifacts bringt;
tool-Aufrufe sich inhaltlich Àndern, nicht nur kosmetisch;- Agent sich schrittweise an
final_answerannÀhert.
GefÀhrlich, wenn:
- 3-5 Schritte in Folge nichts Neues bringen;
- dasselbe
toolsich wiederholt (oder dieselbe Absicht); - Kosten steigen und die AntwortqualitÀt nicht besser wird.
Wie man solche AusfÀlle stoppt
Das Ziel ist einfach: den Run nicht um jeden Preis fortsetzen, sondern kontrolliert beenden.
Praktisch heiĂt das:
- harte runtime-Limits setzen:
max_steps,timeout,max_tool_calls,max_tokens; - dedupe ĂŒber
tool+argsplus Wiederholungs-Limit hinzufĂŒgen; - Run stoppen, wenn ĂŒber N Schritte kein Fortschritt da ist;
- kontrollierten stop reason und Teilergebnis zurĂŒckgeben, nicht stillen Fehler.
Minimaler loop-guard in runtime:
class LoopGuard:
def __init__(self):
self.max_steps = 12
self.max_repeat = 3
self.max_flat_steps = 4
self.steps = 0
self.flat_steps = 0
self.seen = {}
def on_step(self):
self.steps += 1
if self.steps > self.max_steps:
return "max_steps_reached"
return None
def on_tool_call(self, signature: str):
self.seen[signature] = self.seen.get(signature, 0) + 1
if self.seen[signature] >= self.max_repeat:
return "loop_detected:repeated_tool_signature"
return None
def on_progress(self, has_new_signal: bool):
self.flat_steps = 0 if has_new_signal else self.flat_steps + 1
if self.flat_steps >= self.max_flat_steps:
return "loop_detected:no_progress"
return None
Wichtig: In jeder Iteration zuerst on_step() aufrufen, dann on_tool_call(...), und nach der Ergebnisanalyse on_progress(...).
Dieser Guard "heilt" den Agenten nicht. Er verhindert, dass der Loop zu einem Production-Incident wird.
Wo das in der Architektur umgesetzt wird
In Production-Systemen liegt Loop-Kontrolle meist nicht im Agent selbst, sondern in separaten Architekturschichten.
Agent Runtime ist fĂŒr den execution loop zustĂ€ndig: Limits (max_steps, timeout, max_tokens), stop reasons und erzwungene Run-Beendigung. Hier werden LoopGuard und FortschrittsprĂŒfung ĂŒblicherweise umgesetzt.
Tool Execution Layer ist fĂŒr sichere AusfĂŒhrung von tool_call zustĂ€ndig: dedupe von Aufrufen, retry policy und Fehlernormalisierung. Viele Loops - retry storm, repeated tool calls und tool spam - entstehen hier, wenn keine einheitliche Retry-Policy oder Deduplizierung existiert.
Selbstcheck
Schneller Check vor dem Release. Hake die Punkte ab und sieh dir den Status unten an.
Das ist ein kurzer Sanity-Check, kein formales Audit.
Fortschritt: 0/8
â Es gibt Risikosignale
Grundlegende Kontrollen fehlen. SchlieĂen Sie die wichtigsten Checklist-Punkte vor dem Release.
FAQ
Q: Löst ein stÀrkeres Modell infinite loop?
A: Teilweise manchmal, aber nicht die Wurzel. Ohne runtime-gates kann selbst ein starkes Modell loopen.
Q: Wie wÀhlt man max_steps am Anfang?
A: Starte mit einem kleinen konservativen Limit und erhöhe nur dort, wo du bestÀtigten QualitÀtsgewinn siehst.
Q: Muss man immer retries machen?
A: Nein. Bei 401/403 und stabilen Validierungsfehlern verschlechtern retries den loop meistens nur.
Q: Was dem Nutzer zeigen, wenn der Run gestoppt wurde?
A: Stop-Grund, was schon versucht wurde, und Teilergebnis. Das reduziert Wiederholungsstarts ohne Ănderungen.
Infinite loop sieht fast nie wie ein groĂer Ausfall aus. Es ist eine langsame Degradation, die Budget und Zeit auffrisst. Deshalb braucht ein Production-Agent nicht nur ein "smartes" Modell, sondern harte runtime-Kontrolle.
Verwandte Seiten
Um dieses Problem tiefer zu schlieĂen, sieh dir an:
- Warum KI-Agenten scheitern - allgemeine Karte von Production-AusfÀllen.
- Tool-Spam - wie man doppelte Tool-Aufrufe begrenzt.
- Budget Explosion - wie ein loop zu unkontrollierten Ausgaben wird.
- Agent Runtime - wo loop guards und stop reasons umgesetzt werden.
- Tool Execution Layer - wo retries, timeout und Aufrufvalidierung hingehören.