Infinite Agent Loop: wenn ein KI-Agent nicht stoppt

Infinite loop entsteht, wenn ein Agent weiter neue Schritte erzeugt, ohne echten Fortschritt. Warum das passiert und wie man es in Production stoppt.
Auf dieser Seite
  1. Das Problem
  2. Warum das passiert
  3. Welche AusfÀlle am hÀufigsten auftreten
  4. Harte Schleife (Hard loop)
  5. Weiche Schleife (Soft loop)
  6. Retry-Sturm (Retry storm)
  7. Semantische Schleife (Semantic loop)
  8. Wie man diese Probleme erkennt
  9. Wie man Fehler von einer wirklich komplexen Aufgabe unterscheidet
  10. Wie man solche AusfÀlle stoppt
  11. Wo das in der Architektur umgesetzt wird
  12. Selbstcheck
  13. FAQ
  14. Verwandte Seiten

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:

  1. LLM schlÀgt die nÀchste Aktion vor;
  2. der Agent ruft tool auf;
  3. er bekommt eine Beobachtung, aber ohne neues Signal;
  4. 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.

MetrikLoop-SignalWas tun
steps_per_taskstarker Schrittanstieg ohne Abschlusshartes max_steps und stop reason ergÀnzen
repeated_tool_signature_rateWiederholungen von tool+args innerhalb eines Runsdedupe aktivieren und Wiederholungs-Limit setzen
no_progress_stepsmehrere Schritte ohne neue Fakten/ArtifactsRun per no-progress-window-Regel stoppen
stop_reason_distributionviele timeout und max_steps_reachedretry policy und runtime-gates prĂŒfen
tokens_per_taskKosten steigen, QualitĂ€t bleibt gleichcontext/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_answer annĂ€hert.

GefÀhrlich, wenn:

  • 3-5 Schritte in Folge nichts Neues bringen;
  • dasselbe tool sich 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:

  1. harte runtime-Limits setzen: max_steps, timeout, max_tool_calls, max_tokens;
  2. dedupe ĂŒber tool+args plus Wiederholungs-Limit hinzufĂŒgen;
  3. Run stoppen, wenn ĂŒber N Schritte kein Fortschritt da ist;
  4. kontrollierten stop reason und Teilergebnis zurĂŒckgeben, nicht stillen Fehler.

Minimaler loop-guard in runtime:

PYTHON
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:

⏱ 6 Min. Lesezeit ‱ Aktualisiert 12. MĂ€rz 2026Schwierigkeit: ★★☆
In OnceOnly umsetzen
Guardrails for loops, retries, and spend escalation.
In OnceOnly nutzen
# onceonly guardrails (concept)
version: 1
budgets:
  max_steps: 25
  max_tool_calls: 12
  max_seconds: 60
  max_usd: 1.00
policy:
  tool_allowlist:
    - search.read
    - http.get
controls:
  loop_detection:
    enabled: true
    dedupe_by: [tool, args_hash]
  retries:
    max: 2
    backoff_ms: [200, 800]
stop_reasons:
  enabled: true
logging:
  tool_calls: { enabled: true, store_args: false, store_args_hash: true }
Integriert: Production ControlOnceOnly
Guardrails fĂŒr Tool-Calling-Agents
Shippe dieses Pattern mit Governance:
  • Budgets (Steps / Spend Caps)
  • Kill switch & Incident Stop
  • Audit logs & Nachvollziehbarkeit
  • Idempotenz & Dedupe
  • Tool-Permissions (Allowlist / Blocklist)
Integrierter Hinweis: OnceOnly ist eine Control-Layer fĂŒr Production-Agent-Systeme.
Beispiel-Policy (Konzept)
# Example (Python — conceptual)
policy = {
  "budgets": {"steps": 20, "seconds": 60, "usd": 1.0},
  "controls": {"kill_switch": True, "audit": True},
}

Autor

Nick — Engineer, der Infrastruktur fĂŒr KI-Agenten in Produktion aufbaut.

Fokus: Agent-Patterns, Failure-Modes, Runtime-Steuerung und SystemzuverlÀssigkeit.

🔗 GitHub: https://github.com/mykolademyanov


Redaktioneller Hinweis

Diese Dokumentation ist KI-gestĂŒtzt, mit menschlicher redaktioneller Verantwortung fĂŒr Genauigkeit, Klarheit und Produktionsrelevanz.

Der Inhalt basiert auf realen AusfÀllen, Post-Mortems und operativen VorfÀllen in produktiv eingesetzten KI-Agenten-Systemen.