Häufige Fehler in Agentenschleifen
Endlosschleifen, wiederholte Tool-Aufrufe und das Ausbleiben einer finalen Antwort.
Häufige Fehler in Agentenschleifen ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Die Agentenschleife und ihre Fehlermodi
Eine Agentenschleife wird wiederholt ausgeführt: überlegen → Werkzeug aufrufen → Ergebnis beobachten → erneut überlegen. Diese Schleife ist leistungsfähig, aber anfällig. Mehrere bekannte Fehlermodi können einen Agenten in eine Sackgasse führen, Tokens verschwenden und keine brauchbare Ausgabe erzeugen.
Diese Fehler zu verstehen, ist der erste Schritt, um sich gegen sie abzusichern.
Fehler 1: Endlosschleifen
Eine Endlosschleife tritt auf, wenn der Agent wiederholt dasselbe Werkzeug mit denselben Argumenten aufruft, ohne Fortschritte zu machen. Das kann passieren, wenn das Werkzeug ein nicht hilfreiches Ergebnis zurückgibt und der Agent sich daraus nicht herausarbeiten kann.
# Example of an agent in an infinite loop:
# Step 1: reasoning='Need to search for Python docs'
# tool='search_web', args={'query': 'Python documentation'}
# Step 2: reasoning='Search result was unhelpful, try again'
# tool='search_web', args={'query': 'Python documentation'}
# Step 3: reasoning='Search result was unhelpful, try again'
# tool='search_web', args={'query': 'Python documentation'}
# ... repeats until max_iterations or token budget is exhausted
print('Symptom: same tool + same arguments appearing repeatedly in steps')
print('Fix: detect repeated (tool, args) pairs and break the loop')Fehler 2: Festgefahrener Zustand
Ein festgefahrener Zustand ist eine subtilere Variante einer Endlosschleife. Der Agent überlegt weiter und ruft verschiedene Werkzeuge auf, kann aber keine abschließende Antwort finden. Er wechselt zwischen Ansätzen hin und her, ohne Fortschritte zu machen.
# Example of a stuck agent:
# Step 1: tool='search_web', args={'query': 'topic A'}
# Step 2: tool='search_web', args={'query': 'topic B'} # different args
# Step 3: tool='search_web', args={'query': 'topic A'} # back to first
# Step 4: tool='read_document', args={'url': '...'}
# Step 5: tool='search_web', args={'query': 'topic A'}
# ... no FINAL_ANSWER ever produced
print('Symptom: agent takes many steps but never calls FINAL_ANSWER')
print('Fix: max_iterations guard + force final answer if limit is near')Fehler 3: Fehlende abschließende Antwort
Manche Agenten laufen weiter, ohne jemals zu erkennen, dass die Aufgabe abgeschlossen ist. Sie sammeln Informationen, halten aber nie inne, um sie zusammenzufassen und zurückzugeben. Das verschwendet Tokens und Zeit.
# An agent that never concludes:
def run_agent_bad(query: str, max_steps: int = 20) -> str:
for step in range(max_steps):
action = llm_decide_action(query, history)
if action['type'] == 'tool':
result = execute_tool(action)
history.append(result)
# BUG: No check for 'final_answer' type!
# The agent loops until max_steps, returning None
return None # never actually returns an answer
# Fix: explicitly check for final_answer signal
def run_agent_good(query: str, max_steps: int = 20) -> str:
for step in range(max_steps):
action = llm_decide_action(query, history)
if action['type'] == 'final_answer':
return action['answer'] # exit cleanly
execute_tool(action)
return 'Reached step limit without a conclusion.'Fehler 4: Parse-Fehler bei Werkzeugaufrufen
Wenn das LLM ungültiges JSON für einen Funktionsaufruf erzeugt, kann der Werkzeug-Executor es nicht parsen. Ein schlecht geschriebener Agent stürzt ab oder überspringt den Schritt stillschweigend. Ein robuster Agent fängt Parse-Fehler ab und gibt den Fehler an das LLM zurück.
import json
def safe_parse_tool_call(arguments_str: str) -> dict:
try:
return json.loads(arguments_str)
except json.JSONDecodeError as e:
print(f'Failed to parse tool arguments: {e}')
print(f'Raw: {arguments_str}')
return None
def execute_step(tool_call) -> str:
args = safe_parse_tool_call(tool_call.function.arguments)
if args is None:
# Feed the error back to the LLM in the next step
return f'ERROR: Could not parse tool arguments. Raw: {tool_call.function.arguments}'
return run_tool(tool_call.function.name, args)Fehler 5: Das Werkzeug liefert keine brauchbaren Daten
Ein Werkzeug kann technisch erfolgreich sein (also keine Ausnahme auslösen), aber leere oder unbrauchbare Daten zurückgeben. Der Agent muss diesen Fall behandeln und darf nicht davon ausgehen, dass jeder Werkzeugaufruf verwertbare Informationen liefert.
def run_agent_with_empty_result_handling(query: str) -> str:
for step in range(20):
action = decide_next_action(query, history)
if action['type'] == 'final_answer':
return action['answer']
result = execute_tool(action['tool'], action['args'])
# Detect empty results and provide context
if not result or result.strip() == '':
observation = f'Tool {action["tool"]} returned no data. Try a different approach or different arguments.'
elif 'error' in result.lower():
observation = f'Tool error: {result}. Consider a different tool or query.'
else:
observation = result
history.append({'tool': action['tool'], 'result': observation})
return 'Could not complete task within step limit.'Fehler 6: Halluzinierte Werkzeugnamen
LLMs erzeugen manchmal Werkzeugnamen, die nicht existieren. Validieren Sie den Werkzeugnamen immer gegen Ihre registrierten Werkzeuge, bevor Sie den Aufruf ausführen. Geben Sie dem Agenten in diesem Fall eine aussagekräftige Fehlermeldung zurück.
REGISTERED_TOOLS = {
'search_web': search_web_function,
'get_weather': get_weather_function,
'calculate': calculate_function
}
def dispatch_tool(tool_name: str, args: dict) -> str:
if tool_name not in REGISTERED_TOOLS:
available = ', '.join(REGISTERED_TOOLS.keys())
return (
f'ERROR: Unknown tool "{tool_name}". '
f'Available tools: {available}. '
f'Please use one of the available tools.'
)
tool_fn = REGISTERED_TOOLS[tool_name]
return tool_fn(**args)Fehler 7: Token-Budget erschöpft
Ein langlebiger Agent, der vollständige Werkzeugergebnisse in seinem Kontext speichert, kann das Kontextfenster-Limit des LLMs erreichen. Fassen Sie große Werkzeugergebnisse zusammen oder kürzen Sie sie, bevor Sie sie zum Verlauf hinzufügen.
def truncate_tool_result(result: str, max_chars: int = 2000) -> str:
if len(result) <= max_chars:
return result
truncated = result[:max_chars]
return f'{truncated}\n... [result truncated to {max_chars} chars]'
def add_observation_to_history(history: list, tool_name: str, result: str):
safe_result = truncate_tool_result(result, max_chars=2000)
history.append({
'role': 'tool',
'content': safe_result,
'tool_name': tool_name
})
print(f'[Step] Tool={tool_name}, Result length={len(result)} (stored {len(safe_result)})')
if __name__ == '__main__':
demo_history = []
add_observation_to_history(demo_history, 'search_web', 'x' * 3000)
Den Fehlermodus programmgesteuert erkennen
Schreiben Sie eine Diagnosefunktion, die den Schrittverlauf des Agenten analysiert, um den aufgetretenen Fehlermodus zu ermitteln. Das ist beim Debugging äußerst wertvoll.
def diagnose_agent_failure(steps: list) -> str:
if not steps:
return 'No steps recorded'
# Check for infinite loop: same (tool, args) repeated
seen = {}
for s in steps:
key = (s.get('tool'), str(s.get('args')))
seen[key] = seen.get(key, 0) + 1
repeated = {k: v for k, v in seen.items() if v > 2}
if repeated:
return f'INFINITE_LOOP: repeated actions: {repeated}'
# Check for missing final answer
has_answer = any(s.get('type') == 'final_answer' for s in steps)
if not has_answer and len(steps) >= 15:
return 'STUCK_STATE: many steps taken but no final answer'
# Check for parse errors
errors = [s for s in steps if 'ERROR' in str(s.get('result', ''))]
if len(errors) > 2:
return f'TOOL_ERROR: {len(errors)} tool errors in pipeline'
return 'OK'
if __name__ == '__main__':
demo_steps = [{'tool': 'search_web', 'args': {'q': 'weather'}} for _ in range(3)]
print('Diagnosis:', diagnose_agent_failure(demo_steps))
Ein einfaches Schrittbudget implementieren
Jede Agentenschleife im Produktivbetrieb muss ein festes Schrittlimit haben. Das ist der wichtigste Sicherheitsmechanismus — er garantiert, dass die Schleife unabhängig von der Entscheidung des LLMs beendet wird.
def run_agent_with_budget(query: str, max_steps: int = 15) -> dict:
history = []
for step in range(1, max_steps + 1):
print(f'[Step {step}/{max_steps}]')
action = decide_next_action(query, history)
if action['type'] == 'final_answer':
return {
'status': 'success',
'answer': action['answer'],
'steps_taken': step
}
result = execute_tool(action['tool'], action['args'])
history.append({'step': step, 'tool': action['tool'], 'result': result})
if step == max_steps - 1:
# Warn the agent it must conclude
history.append({'role': 'system',
'content': 'You must provide a FINAL_ANSWER on the next step.'})
return {'status': 'timeout', 'answer': None, 'steps_taken': max_steps}Kurzübersicht: Fehlermodi und Lösungen
Eine Zusammenfassung der sechs Fehlermodi von Agentenschleifen und ihrer Lösungen:
- Endlosschleife: Wiederholte (Werkzeug-, Argumente-)Paare erkennen; mit einer Fehlerrückmeldung abbrechen
- Festgefahrener Zustand:
max_iterations-Schutz einbauen; kurz vor dem Limit eine abschließende Antwort erzwingen - Fehlende abschließende Antwort: Das Signal
final_answerin der Aktion ausdrücklich prüfen - Parse-Fehler: Das JSON-Parsen in try/except einschließen; den Fehler an das LLM zurückgeben
- Leere Werkzeugergebnisse: Leere Zeichenketten erkennen; die Rückmeldung „keine Daten“ geben
- Halluzinierte Werkzeugnamen: Gegen die registrierten Werkzeuge validieren; eine Fehlermeldung zurückgeben
Wissenscheck: Fehler in Agentenschleifen
Testen Sie Ihr Verständnis der häufigsten Fehlermodi von Agentenschleifen.
Zusammenfassung: Häufige Fehler in Agentenschleifen
Sie können jetzt die wichtigsten Fehlermodi von Agentenschleifen erkennen und abfangen:
- Endlosschleifen, festgefahrene Zustände und fehlende abschließende Antworten erfordern alle einen Schutz durch eine maximale Iterationszahl
- Parse-Fehler bei Werkzeugaufrufen benötigen try/except um das JSON-Parsen
- Leere Werkzeugergebnisse müssen erkannt werden und erfordern eine aussagekräftige Rückmeldung an das LLM
- Halluzinierte Werkzeugnamen müssen gegen die Liste der registrierten Werkzeuge validiert werden
- Ein erschöpftes Token-Budget erfordert das Kürzen von Ergebnissen
Eine robuste Agentenschleife rechnet mit all diesen Fehlermodi und behandelt sie angemessen.
Häufig gestellte Fragen
Ist die Lektion „Häufige Fehler in Agentenschleifen“ kostenlos?
Ja — der vollständige Text von „Häufige Fehler in Agentenschleifen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Häufige Fehler in Agentenschleifen“?
Endlosschleifen, wiederholte Tool-Aufrufe und das Ausbleiben einer finalen Antwort. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Agents zu starten?
Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Häufige Fehler in Agentenschleifen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?
Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Häufige Fehler in Agentenschleifen
- Trace-Logging für Agentenschritte
- Endlosschleifen erkennen und unterbrechen
- Techniken zum schrittweisen Debuggen