Elf Möglichkeiten, endlose Schleifen von KI-Agenten zu durchbrechen
Erkennen Sie blockierte Werkzeugzyklen, fügen Sie Stoppsbedingungen hinzu und beheben Sie Probleme mithilfe von Kontrollpunkten anstelle weiterer Token.
Quellen: **Your AI Agent Is Stuck in a Loop. Here Are 11 Ways to Fix It**
Agent
↓
Tool
↓
Result
↓
Agent
↓
Same Tool
↓
Same Tool
↓
Same Tool
↓
💸
1. Warum geraten KI-Agenten in Schleifen?
Search customer
→ Find customer
→ Check order
→ Check order again
→ Search customer again
→ Check order again
Bad tool selection
Ambiguous tool results
State not changing
Weak stopping conditions
Repeated failed attempts
Model choosing the same strategy again
track_package("12345")
Status: In transit
Estimated delivery: Tomorrow
2. Die naive Agentenschleife
Fügen Sie menschliche Freigabe für Transaktionen hinzu, bei denen Geld ausgegeben oder Produktionsdaten geändert werden. Eine Verkabelung zur Kompilierzeit bedeutet noch nicht vollständige Abdeckung der Geschäftsprozesse.
while (!done) {
const action = await model.decide(context);
const result = await executeTool(action);
context.push(result);
}
Model
↓
Tool
↓
Result
↓
Model
↓
Tool
↓
Result
↓
...
Beispiel aus der Praxis
Zum Praxisbeispiel sollten die Eingaben, der Verantwortliche für den Schritt sowie die Abbruchkriterien vor dem Codeändern definiert werden. Die Bediener sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf verborgene Zustände schließen zu müssen. Dokumentieren Sie gemeinsam den erfolgreichen Ablauf sowie den Notfallweg. Wiederholungsversuche, menschliche Überprüfungen und die Handhabung von Fehlern gehören zum Produkt selbst, nicht zu späteren Optimierungen. Setzen Sie menschliche Freigabe für Schritte voraus, die Geld ausgeben oder Produktionsdaten ändern. Eine Verkabelung zur Kompilierzeit bedeutet noch nicht vollständige Geschäftsabdeckung. Zum Praxisbeispiel sollten die Eingaben, der Verantwortliche für den Schritt sowie die Abbruchkriterien vor dem Codeändern definiert werden. Die Bediener sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf verborgene Zustände schließen zu müssen. Betrachten Sie diese Phase als Vertrag zwischen den Eingaben und den validierten Ausgaben. Benennen Sie die Artefakte, definieren Sie Erfolgskontrollen und lehnen Sie stille, unvollständige Abschlüsse ab.
get_refund_status()
Refund pending
get_refund_status()
3. Weisen Sie dem Agenten ein Budget zu
Beim Bearbeiten von Schritt 3 „Weisen Sie dem Agenten ein Budget zu“ sollten Sie zunächst den Vertrag aufschreiben: erforderliche Eingaben, Erfolgsindikatoren sowie das Vorgehen bei teilweisen Fehlern. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Notieren Sie die Laufzeiten sowie die Kosten für Tokens oder Abfragen neben den funktionalen Ergebnissen. Eine frühzeitige Sichtbarkeit der Kosten verhindert überraschende Rechnungen, wenn der Prozess von einer Demo-Umgebung in gemeinsam genutzte Umgebungen wechselt. Legen Sie nach teuren Schritten einen Kontrollpunkt an. Das Wiederaufnehmen des Vorgangs sollte keine erneute Gebühr für denselben LLM-Aufruf veranlassen, wenn ein Operator einen späteren Knoten erneut ausführt.
const MAX_STEPS = 12;
const MAX_TOOL_CALLS = 20;
const MAX_RUNTIME_MS = 30_000;
Warum mehrere Limits verwenden?
Beim Arbeiten an dem Thema „Warum mehrere Grenzwerte verwenden?“, sollten Sie zunächst den Ablaufplan aufschreiben: erforderliche Eingaben, Erfolgsignal sowie was bei einem teilweisen Versagen geschieht. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Bewahren Sie die Konfiguration außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher sowie Feature-Flags sollten an einem Ort zusammengefasst sein, den Betreuer ohne das Durchlesen des gesamten Systems überprüfen können. Legen Sie nach aufwändigen Schritten einen Checkpoint an. Das Wiederaufnehmen des Vorgangs sollte keine erneute Abrechnung für denselben LLM-Aufruf veranlassen, wenn ein Betreuer einen späteren Knoten erneut ausführt.
Steps → reasoning budget
Tool calls → external API budget
Time → latency budget
Tokens → model cost
Beispiele
Beim Arbeiten mit Beispielen sollten Sie zunächst den Vertrag aufschreiben: erforderliche Eingaben, Erfolgsignal sowie das Vorgehen bei teilweisen Fehlern. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Dokumentieren Sie sowohl den erfolgreichen Ablauf als auch den Wiederherstellungsprozess gemeinsam. Wiederholte Versuche, menschliche Überprüfungen sowie die Handhabung von Fehlern gehören zum Produkt selbst und nicht zu späteren Optimierungen. Legen Sie nach aufwändigen Schritten einen Kontrollpunkt an – das Resume sollte keine doppelten Abrechnungen für denselben LLM-Aufruf tätigen, wenn ein Operator einen späteren Knoten erneut versucht. Beim Arbeiten mit Beispielen sollten Sie zunächst den Vertrag aufschreiben: erforderliche Eingaben, Erfolgssignal sowie das Vorgehen bei teilweisen Fehlern. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Betrachten Sie diese Phase als Vertrag zwischen Eingaben und validierten Ausgaben. Benennen Sie die Ergebnisdokumente, definieren Sie Erfolgsprüfungen und lehnen Sie stille, teilweise abgeschlossene Vorgänge ab.
Search restaurant
→ Search restaurant
→ Search restaurant
→ Check table
→ Check table
→ Check table
→ Search restaurant again
Maximum 8 actions
Maximum 15 seconds
Maximum 5 reservation checks
4. Wiederholte Aktionen erkennen
- Die Erkennung wiederholter Aktionen funktioniert am besten, wenn sie als messbarer Ansatz betrachtet wird. Erfassen Sie ein optimales Beispiel, einen Fehlerfall sowie eine Notiz zur Rücksetzung, bevor Sie den Umfang erweitern. Erfassen Sie außerdem die Laufzeiten sowie die Kosten für Tokens oder Abfragen zusammen mit den funktionalen Ergebnissen. Eine frühzeitige Sichtbarkeit der Kosten verhindert überraschende Rechnungen, wenn sich der Einsatzbereich von einer Demo auf gemeinsam genutzte Umgebungen verschiebt. Halten Sie den Zustand der Graphen einfach und typisiert. Verschachtelte Datenblöcke verbergen, welcher Knoten welches Feld geschrieben hat, und führen zu Unterbrechungen beim Fortsetzen der Verarbeitung.
search_users(...)
search_users(...)
search_users(...)
const signature = `${toolName}:${JSON.stringify(args)}`;
if (seenActions.has(signature)) {
throw new Error("Repeated tool invocation detected");
}
seenActions.add(signature);
Aber eine exakte Übereinstimmung reicht nicht aus
Aber eine exakte Übereinstimmung reicht nicht aus – sie funktioniert am besten, wenn sie als messbare Struktur betrachtet wird. Erfassen Sie ein gelungenes Beispiel, einen Fehlerfall sowie die Notizen zum Rollback, bevor Sie den Umfang erweitern. Bewahren Sie die Konfiguration außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher und Feature-Flags sollten an einem Ort gesammelt sein, den Betreuer ohne das Durchlesen des gesamten Graphen überprüfen können. Halten Sie den Zustand des Graphen flach und typisiert. Verschachtelte Datenblöcke verbergen, welcher Knoten welches Feld geschrieben hat, und führen zu Unterbrechungen beim Fortsetzen der Verarbeitung.
search("Node.js latency")
search("nodejs latency")
search("Node latency")
5. Mangelnden Fortschritt erkennen
- Die Erkennung von Fortschrittsmangel funktioniert am besten, wenn sie als messbarer Aspekt betrachtet wird. Erfassen Sie ein „goldenes Transkript“, einen Fehlerfall sowie eine Notiz zur Rücksetzung, bevor Sie den Umfang erweitern. Dokumentieren Sie gleichzeitig den erfolgreichen Ablauf sowie den Wiederherstellungsprozess. Wiederholversuche, menschliche Kontrollen sowie die Handhabung von Fehlern gehören zum Produkt selbst und nicht zu späteren Optimierungen. Halten Sie den Zustand der Graphen strukturiert und typisiert. Verschachtelte Datenstrukturen verbergen, welcher Knoten welches Feld geschrieben hat, und führen zu Unterbrechungen beim Fortsetzen der Verarbeitung.
- Die Erkennung von Fortschrittsmangel funktioniert am besten, wenn sie als messbarer Aspekt betrachtet wird. Erfassen Sie ein „goldenes Transkript“, einen Fehlerfall sowie eine Notiz zur Rücksetzung, bevor Sie den Umfang erweitern. Betrachten Sie diese Phase als Vertrag zwischen Eingaben und validierten Ausgaben. Benennen Sie die relevanten Artefakte, definieren Sie Erfolgskontrollen und lehnen Sie stille, unvollständige Abschlüsse ab.
Step 1 → Search customer
Step 2 → Search customer by email
Step 3 → Search customer by name
Step 4 → Search customer by phone
Step 1
Find customer → ✅
Step 2
Find order → ✅
Step 3
Check shipment → ✅
Step 4
Check shipment → same result
Step 5
Check shipment → same result
Ein nützliches mentales Modell
Zum Erstellen eines nützlichen mentalen Modells sollten vor der Codeänderung die Eingaben, der Verantwortliche für den Schritt sowie die Abbruchkriterien definiert werden. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Erfassen Sie neben den funktionalen Ergebnissen auch die Laufzeiten sowie die Kosten für Tokens oder Abfragen. Eine frühzeitige Sichtbarkeit der Kosten verhindert überraschende Rechnungen, wenn der Ablauf von einer Demo-Umgebung in eine gemeinsam genutzte Umgebung wechselt. Wählen Sie bei dem nächsten Schritt, der eine Codeausführung oder einen Toolaufruf beinhaltet, strukturierte Ausgaben mit Schema-Validierung statt freier Prosa.
How many actions did the agent take?
What changed after each action?
6. Versuchen Sie nicht blind, es erneut
Für Punkt 6: Versuchen Sie nicht blind, sondern definieren Sie vor dem Ändern des Codes die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien. Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Bewahren Sie die Konfiguration außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher und Feature-Flags sollten an einem Ort gesammelt sein, den Operator überprüfen können, ohne den gesamten Ablauf durchzulesen. Setzen Sie menschliche Freigabe für Kanten voraus, die Geld ausgeben oder Produktionsdaten ändern. Eine Verkabelung zur Kompilierzeit bedeutet nicht automatisch vollständige Geschäftsabdeckung.
charge_card()
→ timeout
Das gleiche Prinzip gilt für Agenten
Für dieselbe Regel gilt auch für Agenten: Definieren Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien, bevor Sie Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Dokumentieren Sie sowohl den erfolgreichen Ablauf als auch den Notfallweg gemeinsam. Wiederholungsversuche, menschliche Überprüfungen sowie die Handhabung von Fehlern gehören zum Produkt selbst und nicht zu späteren Optimierungen. Setzen Sie menschliche Freigabe bei Vorgängen ein, die Geld kosten oder Produktionsdaten ändern. Kompilierzeitbezogene Verbindungen bedeuten noch keine vollständige Geschäftsabwicklung. Für dieselbe Regel gilt auch für Agenten: Definieren Sie die Eingaben, den Verantwortlichen für den Schritt sowie die Abbruchkriterien, bevor Sie Code ändern. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen. Betrachten Sie diese Phase als Vertrag zwischen den Eingaben und den validierten Ausgaben. Benennen Sie die Ergebnisdokumente, definieren Sie Erfolgskontrollen und lehnen Sie stille, unvollständige Abschlüsse ab.
for (let i = 0; i < 10; i++) {
await callTool();
}
Timeout
→ Retry may make sense
Invalid input
→ Retry with same arguments makes no sense
Permission denied
→ Try a different strategy
Same successful result
→ Stop
7. Geben Sie dem Agenten eine Wiederherstellungsstrategie
Beim Arbeiten an Punkt 7 „Geben Sie dem Agenten eine Wiederherstellungsstrategie“ sollten Sie zunächst den Vertrag aufschreiben: erforderliche Eingaben, Erfolgsindikator sowie das Vorgehen bei teilweisen Fehlern. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Notieren Sie die Laufzeiten sowie die Kosten für Tokens oder Abfragen neben den funktionalen Ergebnissen. Eine frühzeitige Sichtbarkeit der Kosten verhindert überraschende Rechnungen, wenn der Ablauf von einer Demo-Umgebung in gemeinsam genutzte Umgebungen wechselt. Legen Sie nach teuren Schritten einen Checkpoint an. Das Wiederaufnehmen des Vorgangs sollte keine erneuten Gebühren für denselben LLM-Aufruf verursachen, wenn ein Operator einen späteren Knoten erneut ausführt.
search_invoices(customer_id)
→ No result
search_invoices(customer_id)
→ No result
→ search_invoices(customer_id)
→ No result
→ search_invoices(customer_id)
Search by customer ID
↓
No result
↓
Search by email
↓
Still no result
↓
Search archived invoices
if (isStuck(state)) {
return replan({
reason: "No progress detected",
previousActions
});
}
8. Machen Sie „erledigt“ explizit
Beim Arbeiten an Schritt 8 sollte man klar markieren, dass etwas abgeschlossen ist – schreiben Sie zunächst den Vertrag auf: erforderliche Eingaben, Erfolgsindikator sowie das Vorgehen bei teilweisen Fehlern. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Bewahren Sie die Konfiguration außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher und Feature-Flags sollten an einem Ort gesammelt sein, den Betreuer ohne das Durchlesen des gesamten Systems überprüfen können. Erstellen Sie nach aufwändigen Schritten einen Checkpoint. Das Wiederaufnehmen des Vorgangs sollte keine doppelte Abrechnung für denselben LLM-Aufruf verursachen, wenn ein Betreuer einen späteren Knoten erneut ausführt.
I found an order.
Done.
Task:
Find latest order
Done when:
- customer identified
- orders retrieved
- orders sorted by date
- latest order selected
- result returned
Reale Analogie
Beim Arbeiten mit einer Realwelt-Analogie sollte man zunächst den Vertrag aufschreiben: erforderliche Eingaben, Erfolgsignal sowie das Vorgehen bei teilweisen Fehlern. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Dokumentieren Sie sowohl den erfolgreichen Ablauf als auch den Wiederherstellungsprozess gemeinsam. Wiederholte Versuche, menschliche Überprüfungen sowie die Handhabung von Fehlern gehören zum Produkt selbst und nicht zu späteren Optimierungen. Legen Sie nach aufwändigen Schritten einen Kontrollpunkt an. Das System sollte bei erneuten Versuchen eines Operators keine doppelten Abrechnungen für denselben LLM-Aufruf tätigen. Beim Arbeiten mit einer Realwelt-Analogie sollte man zunächst den Vertrag aufschreiben: erforderliche Eingaben, Erfolgssignal sowie das Vorgehen bei teilweisen Fehlern. Diese Checkliste sorgt dafür, dass spätere Codeänderungen transparent bleiben. Betrachten Sie diese Phase als Vertrag zwischen Eingaben und validierten Ausgaben. Benennen Sie die Ergebnisse, definieren Sie Erfolgsprüfungen und lehnen Sie stille, teilweise abgeschlossene Abläufe ab.
Destination reached
9. Fügen Sie Überwachungsfunktionen hinzu, bevor Sie sie benötigen
- Add observability before you need it works best when treated as eine messbare Größe. Erfassen Sie ein „goldenes“ Transkript, einen Fehlerfall sowie eine Notiz zur Rücksetzung, bevor Sie den Umfang erweitern. Erfassen Sie außerdem die Laufzeiten sowie die Kosten für Tokens oder Abfragen zusammen mit den funktionalen Ergebnissen. Eine frühzeitige Sichtbarkeit der Kosten verhindert überraschende Rechnungen, wenn sich der Einsatzbereich von einer Demo auf gemeinsam genutzte Umgebungen verschiebt. Halten Sie den Zustand der Graphen einfach und typisiert – verschachtelte Datenstrukturen verbergen, welcher Knoten welches Feld geschrieben hat, und führen zu Unterbrechungen beim Fortsetzen der Verarbeitung.
run_id
step
tool
arguments
duration
result size
retry count
token usage
termination reason
Run: abc123
Step 1
search_users
210ms
Step 2
get_user
130ms
Step 3
get_orders
180ms
Step 4
get_orders
175ms
Step 5
get_orders
172ms
Step 6
LOOP DETECTED
Reason: No state change
10. Ein sichererer Agentenzyklus
- Ein sichererer Agenten-Loop funktioniert am besten, wenn er als messbare Struktur betrachtet wird. Erfassen Sie ein gelungenes Beispiel, einen Fehlerfall sowie die Notizen zur Rücksetzung, bevor Sie den Umfang erweitern. Bewahren Sie die Konfiguration außerhalb des Anwendungscode auf. Umgebungsdateien, Geheimdatenspeicher und Feature-Flags sollten an einem Ort gesammelt sein, den Betreuer ohne Durchsicht des gesamten Graphen prüfen können. Halten Sie den Zustand des Graphen flach und typisiert. Verschachtelte Datenblöcke verbergen, welcher Knoten welches Feld geschrieben hat, und führen zu Unterbrechungen beim Wiederaufnehmen der Ausführung.
while (!done) {
if (steps >= MAX_STEPS) {
return terminate("Step budget exceeded");
}
if (Date.now() - startTime > MAX_RUNTIME_MS) {
return terminate("Time budget exceeded");
}
const action = await model.decide(context);
if (isRepeated(action)) {
return replan("Repeated action detected");
}
const previousState = snapshot(state);
const result = await executeTool(action);
state = updateState(state, result);
if (!hasProgress(previousState, state)) {
markNoProgress();
}
if (tooMuchNoProgress()) {
return replan("No meaningful progress");
}
if (isComplete(state)) {
done = true;
}
}
11. Das Modell entscheidet. Die Infrastruktur sorgt für die Einhaltung.
- Das Modell trifft die Entscheidung. Der Rahmen sorgt für die Umsetzung. Es funktioniert am besten, wenn es als messbare Oberfläche behandelt wird. Erfassen Sie vor der Erweiterung des Umfangs ein „goldenes“ Transkript, einen Fehlerfall sowie eine Notiz zur Rücksetzung. Dokumentieren Sie gemeinsam den erfolgreichen Ablauf sowie den Wiederherstellungsprozess. Wiederholversuche, menschliche Kontrollen und die Handhabung von Fehlern gehören zum Produkt selbst, nicht zu späteren Optimierungen. Legen Sie Budgetgrenzen pro Turnus und pro Sitzung fest. Agentenbasierte Tools erweitern den Kontext stark; feste Obergrenzen verhindern, dass Demonstrationen zu unerwarteten Rechnungen werden.
- Das Modell trifft die Entscheidung. Der Rahmen sorgt für die Umsetzung. Es funktioniert am besten, wenn es als messbare Oberfläche behandelt wird. Erfassen Sie vor der Erweiterung des Umfangs ein „goldenes“ Transkript, einen Fehlerfall sowie eine Notiz zur Rücksetzung. Betrachten Sie diese Phase als Vertrag zwischen den Eingaben und den validierten Ausgaben. Benennen Sie die Ergebnisdokumente, definieren Sie Erfolgskontrollen und lehnen Sie stille, teilweise abgeschlossene Ergebnisse ab.
What should I do next?
How many times can you act?
How long can you run?
Have you repeated yourself?
Are you making progress?
Did the state change?
Are you allowed to call this tool?
When should execution stop?
Speed limiter
Brake system
Fuel gauge
Navigation system
Collision warning
Ziel ist es nicht, Schleifen zu beseitigen
Write code
→ Run tests
→ See failure
→ Fix code
→ Run tests
→ See failure
→ Fix code
→ Tests pass
→ Stop
Did the agent loop?
Did the agent make progress?
Produktions-Checkliste
☑ Is there a maximum step count?
☑ Is there a runtime limit?
☑ Is there a tool-call budget?
☑ Can repeated actions be detected?
☑ Can we detect lack of progress?
☑ Are retries failure-aware?
☑ Can the agent re-plan?
☑ Is "done" explicitly defined?
☑ Can we see every tool call in production?
☑ Do we know why an agent terminated?
Letzter Gedanke
Dank Ihnen, dass Sie Teil der Community sind
Betriebs-Checkliste
Überarbeitungsmarke 1 für 3372f6d9932d: Formulieren Sie die umliegenden Aussagen in der Sprache der Operator, lassen Sie die [[CODE_n]]-Felder unverändert und vermeiden Sie das Wiederholen von Quellsätzen.
Überarbeitungsmarke 2 für 3372f6d9932d: Formulieren Sie die umliegenden Aussagen in der Sprache der Operator, lassen Sie die [[CODE_n]]-Felder unverändert und vermeiden Sie das Wiederholen von Quellsätzen.
Überarbeitungsmarke 3 für 3372f6d9932d: Formulieren Sie die umliegenden Aussagen in der Sprache der Operator, lassen Sie die [[CODE_n]]-Felder unverändert und vermeiden Sie das Wiederholen von Quellsätzen.
Überschreiben Sie Markierer 4 für 3372f6d9932d: Formulieren Sie die umliegenden Aussagen in der Sprache der Operator, lassen Sie die [[CODE_n]]-Felder unverändert und vermeiden Sie das Wiederholen der Quellsätze.
Überschreiben Sie Markierer 5 für 3372f6d9932d: Formulieren Sie die umliegenden Aussagen in der Sprache der Operator, lassen Sie die [[CODE_n]]-Felder unverändert und vermeiden Sie das Wiederholen der Quellsätze.
Überschreiben Sie Markierer 6 für 3372f6d9932d: Formulieren Sie die umliegenden Aussagen in der Sprache der Operator, lassen Sie die [[CODE_n]]-Felder unverändert und vermeiden Sie das Wiederholen der Quellsätze.
Überschreiben Sie Markierer 7 für 3372f6d9932d: Formulieren Sie die umliegenden Aussagen in der Sprache der Operator, lassen Sie die [[CODE_n]]-Felder unverändert und vermeiden Sie das Wiederholen der Quellsätze.