0Pricing
AI Engineering Academy · Lektion

Fehler und Endlosschleifen von Agents behandeln

Fügen Sie Zeitlimits, maximale Iterationszahlen und Prompts zur Fehlerbehebung hinzu, damit Agents nicht endlos Schleifen ausführen oder wiederholt fehlerhafte Tools aufrufen.

Fehler und Endlosschleifen von Agents behandeln ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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 Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum Agenten fehlschlagen und Schleifen bilden

Agenten können aus mehreren Gründen in Fehlerschleifen stecken bleiben: Ein fehlerhaftes Tool gibt einen Fehler zurück, aus dem der Agent nicht herausfindet, das Modell erzeugt wiederholt eine fehlerhafte Action-Syntax, eine Aufgabe ist mit den verfügbaren Tools nicht lösbar oder der Agent ruft dasselbe Tool mit geringfügigen Abweichungen immer wieder auf und hofft auf ein anderes Ergebnis. Ohne Sicherheitsvorkehrungen verbraucht dies das API-Budget, ohne jemals zu einer Lösung zu gelangen.

Maximale Iterationslimits

Der einfachste Schutz ist eine feste Obergrenze für die Anzahl der Thought/Action/Observation-Zyklen. LangChains AgentExecutor akzeptiert einen max_iterations-Parameter. Sobald das Limit erreicht ist, beendet der Executor die Schleife und gibt eine Nachricht zurück, dass der Agent die Aufgabe nicht abschließen konnte.

from langchain.agents import AgentExecutor

agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    max_iterations=10,             # Hard stop after 10 steps
    max_execution_time=30.0,       # Also stop after 30 wall-clock seconds
    early_stopping_method='generate',  # Ask the model for a partial answer at the limit
    verbose=True
)

Frühes Beenden: Eine endgültige Antwort erzwingen

Wenn der Agent sein Iterationslimit erreicht, fordert early_stopping_method='generate' das Modell ein letztes Mal auf mit: „Sie haben Ihr Schrittlimit erreicht. Geben Sie auf Grundlage dessen, was Sie bisher wissen, Ihre bestmögliche endgültige Antwort.“ Das ist besser, als eine leere Antwort zurückzugeben oder abzustürzen, da die Benutzer dadurch zumindest eine nützliche Antwort erhalten.

# The 'generate' early_stopping_method adds this system instruction
# when max_iterations is reached:
#
# 'You have {N} steps remaining but the task is not complete.
#  Give your best final answer based on the information gathered so far.'
#
# Contrast with 'force' which abruptly terminates without generating an answer.

agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    max_iterations=7,
    early_stopping_method='generate'
)

Parsing-Fehler elegant behandeln

Wenn das Modell eine Ausgabe erzeugt, die nicht dem Thought/Action-Format entspricht — etwa weil das Action-Schlüsselwort fehlt, der falsche Tool-Name verwendet wird oder ein freier Text ausgegeben wird — löst der Agent eine OutputParserException aus. Setzen Sie handle_parsing_errors=True, um den Fehler als Observation zurückzugeben, damit das Modell sich selbst korrigieren kann.

agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    handle_parsing_errors=True,
    # Custom error message fed back to the model:
    # handle_parsing_errors='Please format your response as Thought/Action/Action Input.'
)

# When a parse error occurs, the executor automatically adds:
# Observation: Could not parse LLM output. Please follow the format:
#   Thought: ...
#   Action: tool_name
#   Action Input: ...

Wiederholende Schleifen erkennen und unterbrechen

Ein häufiges Schleifenmuster sieht so aus: Der Agent ruft dreimal hintereinander search('same query') auf und erhält jedes Mal dasselbe nutzlose Ergebnis. Implementieren Sie eine Schleifenerkennung, indem Sie kürzlich verwendete (Tool, Eingabe)-Paare speichern. Wenn dieselbe Kombination mehr als zweimal vorkommt, fügen Sie eine Observation ein, die einen anderen Ansatz nahelegt.

from collections import Counter

class LoopDetector:
    def __init__(self, max_repeats: int = 2):
        self.max_repeats = max_repeats
        self.call_counts = Counter()

    def check(self, tool_name: str, tool_input: str) -> bool:
        key = f'{tool_name}:{tool_input}'
        self.call_counts[key] += 1
        if self.call_counts[key] > self.max_repeats:
            return True  # Loop detected
        return False

    def get_warning(self) -> str:
        return ('You have called this tool with the same input multiple times. '
                'Try a different approach, different search terms, or a different tool.')

Fehlerbehandlung auf Tool-Ebene

Robuste Agenten benötigen robuste Tools. Jedes Tool sollte seine eigenen Exceptions abfangen und strukturierte Fehlermeldungen zurückgeben, statt Python-Exceptions auszulösen. Geben Sie den Fehlertyp und einen Vorschlag für den Agenten an, damit er weiß, ob er es erneut versuchen, seinen Ansatz ändern oder den Fall eskalieren sollte.

from langchain_core.tools import tool
import requests

@tool
def get_company_data(company_name: str) -> str:
    '''Retrieve company information from the business database.
    Input: company name as a string.
    '''
    try:
        resp = requests.get(
            f'https://api.example.com/companies/{company_name}',
            timeout=5
        )
        if resp.status_code == 404:
            return f'No company found with name "{company_name}". Try the exact legal name or ticker symbol.'
        if resp.status_code == 429:
            return 'Rate limit exceeded. Wait 60 seconds before trying again.'
        resp.raise_for_status()
        return resp.json().get('summary', 'No summary available.')
    except requests.Timeout:
        return 'The database is not responding. Try searching the web instead.'

Exponentielles Backoff bei API-Fehlern

Wenn Tools externe APIs aufrufen, treten vorübergehende Fehler häufig auf. Fügen Sie in der Tool-Funktion eine Wiederholungslogik mit exponentiellem Backoff ein — versuchen Sie es bis zu dreimal erneut und verlängern Sie die Wartezeit zwischen den Versuchen. So werden Ratenlimits und kurze Ausfälle transparent behandelt, ohne dass der Agent etwas über die Wiederholungen wissen muss.

import time
import requests
from langchain_core.tools import tool

@tool
def reliable_search(query: str) -> str:
    '''Search with automatic retry on failure. Input: search query string.'''
    max_retries = 3
    for attempt in range(max_retries):
        try:
            resp = requests.get(
                'https://api.duckduckgo.com/',
                params={'q': query, 'format': 'json'},
                timeout=10
            )
            resp.raise_for_status()
            data = resp.json()
            return data.get('AbstractText', 'No results found.')
        except requests.RequestException as e:
            if attempt < max_retries - 1:
                wait = 2 ** attempt  # 1s, 2s, 4s
                time.sleep(wait)
            else:
                return f'Search failed after {max_retries} attempts: {str(e)}'

Timeout-Budgets auf Agent-Ebene

Wiederholungen einzelner Tools sind sinnvoll, aber Sie benötigen zusätzlich ein Gesamtlimit für die verstrichene Zeit des gesamten Agent-Laufs. Wenn die Aufgabe länger dauert, als Ihr SLA erlaubt (beispielsweise 30 Sekunden), beenden Sie die Schleife und geben Sie eine Antwort mit kontrollierter Funktionseinschränkung zurück. LangChains max_execution_time-Parameter übernimmt dies auf Executor-Ebene.

import asyncio

async def run_with_timeout(user_input: str, timeout_seconds: float = 30.0) -> str:
    try:
        result = await asyncio.wait_for(
            agent_executor.ainvoke({'input': user_input}),
            timeout=timeout_seconds
        )
        return result['output']
    except asyncio.TimeoutError:
        return ('I am taking longer than expected to answer this question. '
                'Please try again with a simpler question, or check back later.')

Fehler zur Analyse protokollieren

Jeder Agent-Fehler liefert wertvolle Daten. Protokollieren Sie den vollständigen Trace — Benutzereingabe, alle Zwischenschritte, den Fehlergrund und die Anzahl der verwendeten Iterationen — in einer Datenbank oder Observability-Plattform. Die Analyse von Fehlermustern zeigt, welche Tools unzuverlässig sind, mit welchen Fragetypen der Agent nicht umgehen kann und welche Schleifen am häufigsten auftreten.

import logging
import json

logger = logging.getLogger('agent')

def run_and_log(user_input: str) -> str:
    try:
        result = agent_executor.invoke(
            {'input': user_input},
            return_intermediate_steps=True
        )
        if not result.get('output'):
            logger.warning('Agent returned empty output', extra={
                'input': user_input,
                'steps': len(result.get('intermediate_steps', []))
            })
        return result['output']
    except Exception as e:
        logger.error('Agent failed with exception', extra={
            'input': user_input,
            'error': str(e),
            'error_type': type(e).__name__
        })
        return 'I encountered an error. Please try rephrasing your question.'

Hinweise zur Wiederherstellung in den Prompt einfügen

Wenn Sie ein Fehlermuster erkennen, können Sie dynamisch Wiederherstellungsanweisungen in den nächsten Prompt des Agenten einfügen. Wenn beispielsweise das Suchtool wiederholt fehlschlägt, fügen Sie einen Hinweis wie diesen hinzu: „Das Websuchtool ist derzeit unzuverlässig. Verwenden Sie für diese Anfrage bevorzugt das Wissensdatenbank-Tool.“ Dadurch wird der Agent zu einer funktionierenden Lösung gelenkt, ohne dass fest codierte Fallback-Logik erforderlich ist.

Fehlerszenarien testen

Erstellen Sie eine eigene Testsuite für Fehlerszenarien. Testen Sie, was passiert, wenn alle Tools Fehler zurückgeben, das Modell max_iterations erreicht, die Eingabe keine beantwortbare Frage enthält oder das Modell ein nicht vorhandenes Tool aufruft. Ihr Agent sollte immer eine sinnvolle Nachricht zurückgeben und die Anwendung niemals zum Absturz bringen — unabhängig davon, wie adversarial die Situation ist.

Kurzer Check

Testen Sie Ihr Verständnis der Behandlung von Agent-Fehlern und der Vermeidung von Schleifen.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: max_iterations und max_execution_time setzen feste Grenzen für die Laufzeit des Agenten, handle_parsing_errors gibt Formatfehler zur Selbstkorrektur an das Modell zurück und Tools sollten Exceptions abfangen und beschreibende Fehlerzeichenketten zurückgeben, statt Exceptions auszulösen. Als Nächstes untersuchen wir OpenAIs native Function-Calling-Funktion für die strukturierte Tool-Integration.

Häufig gestellte Fragen

Ist die Lektion „Fehler und Endlosschleifen von Agents behandeln“ kostenlos?

Ja — der vollständige Text von „Fehler und Endlosschleifen von Agents behandeln“ 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 Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Fehler und Endlosschleifen von Agents behandeln“?

Fügen Sie Zeitlimits, maximale Iterationszahlen und Prompts zur Fehlerbehebung hinzu, damit Agents nicht endlos Schleifen ausführen oder wiederholt fehlerhafte Tools aufrufen. Du übst AI Engineering Academy 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 Engineering Academy zu starten?

Keine Vorkenntnisse erforderlich. AI Engineering Academy 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 4 von 4.

Wie lange dauert die Lektion „Fehler und Endlosschleifen von Agents behandeln“?

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 Engineering Academy-Lektion Code schreiben und ausführen?

Ja. Jede AI Engineering Academy-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

  1. Das ReAct-Framework: Denken, Handeln, Beobachten
  2. Tools für Ihren Agenten definieren
  3. Einen ReAct-Agenten mit LangChain erstellen
  4. Fehler und Endlosschleifen von Agents behandeln
← Zurück zu AI Engineering Academy