Tool-Fehler erkennen und beheben
Wenn ein Tool den Fehler 500 zurückgibt, senden Sie den Fehler an das Modell, damit es einen anderen Ansatz versucht, statt abzustürzen.
Tool-Fehler erkennen und beheben ist eine kostenlose AI Agents-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 Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.
Tools schlagen fehl – planen Sie dafür
Jedes echte Tool schlägt gelegentlich fehl:
- Netzwerk-Timeouts
- Rate-Limits
- Falsche Argumente vom Modell
- Ausfall externer Dienste
- Ungültige Authentifizierung
Produktionsagenten müssen sich davon ordnungsgemäß erholen.
Immer zurückgeben, nie Exceptions auslösen
Fangen Sie innerhalb der Agentenschleife alle Tool-Fehler ab und geben Sie sie als Inhalt zurück. Lassen Sie niemals zu, dass eine Exception die Schleife beendet:
def safe_dispatch(tool_call):
try:
args = json.loads(tool_call.function.arguments)
return TOOLS[tool_call.function.name](**args)
except json.JSONDecodeError:
return {'error': 'Arguments are not valid JSON.'}
except KeyError:
return {'error': f'Unknown tool: {tool_call.function.name}'}
except Exception as e:
return {'error': f'{type(e).__name__}: {e}'}Strukturiertes Fehlerformat
Verwenden Sie eine einheitliche Struktur, damit das Modell Fehler erkennt:
error = {'ok': False, 'error_type': 'TimeoutError', 'error_message': 'Tavily timed out after 10s', 'retryable': True}
print(error)
Wiederholbare und dauerhafte Fehler unterscheiden
Manche Fehler rechtfertigen einen erneuten Versuch (Timeout), andere nicht (404). Teilen Sie dem Modell Folgendes mit:
if isinstance(e, requests.Timeout):
return {'ok': False, 'retryable': True, 'error': str(e)}
if isinstance(e, ValueError):
return {'ok': False, 'retryable': False, 'error': str(e)}Vorübergehende Fehler automatisch erneut versuchen
Bei Netzwerkaufrufen sollten Sie Wiederholungsversuche mit exponentiellem Backoff durchführen:
from tenacity import retry, wait_exponential, stop_after_attempt, retry_if_exception_type
@retry(
wait=wait_exponential(multiplier=1, max=10),
stop=stop_after_attempt(3),
retry=retry_if_exception_type((requests.Timeout, requests.ConnectionError))
)
def web_search(query):
return requests.get('https://api.tavily.com/search', ...).json()Argumente validieren
Validieren Sie die Argumente vor dem Tool-Aufruf mit einem Pydantic-Modell:
from pydantic import BaseModel, ValidationError
class SearchArgs(BaseModel):
query: str
k: int = 5
try:
args = SearchArgs.model_validate_json(tool_call.function.arguments)
except ValidationError as e:
return {'error': f'Bad arguments: {e}'}Zeigen Sie dem Modell den Fehler
Fügen Sie den Fehler als Tool-Ergebnis an und rufen Sie das Modell erneut auf. Das Modell korrigiert sich häufig selbst:
messages.append({
'role': 'tool',
'tool_call_id': tc.id,
'content': json.dumps({'error': 'Argument k must be an integer'})
})
# Next model call: 'Sorry, let me retry with k=5...'Endlose Fehlerschleifen vermeiden
Manche Modelle wiederholen denselben fehlerhaften Aufruf, wenn man ihnen einen Fehler zeigt. Begrenzen Sie die Schleife und erkennen Sie Wiederholungen:
recent_calls = []
for tc in msg.tool_calls:
key = (tc.function.name, tc.function.arguments)
if recent_calls.count(key) >= 3:
return 'Agent stuck in retry loop, aborting.'
recent_calls.append(key)Tool-spezifische Fehlerbehebung
Bei bekanntermaßen fehleranfälligen Tools sollten Sie die Wiederholungslogik IN DAS TOOL und nicht in die Schleife integrieren:
def search_with_fallback(query):
try:
return tavily_search(query)
except Exception:
return bing_search(query) # secondary providerFür jeden Aufruf ein Timeout
Jeder externe Aufruf benötigt ein Timeout. Andernfalls friert ein langsamer Dienst Ihren gesamten Agenten ein:
import requests
response = requests.get(url, timeout=10) # 10s
# For LLM calls:
from openai import OpenAI
client = OpenAI(timeout=30.0)Circuit Breaker
Wenn ein Tool wiederholt fehlschlägt, „öffnen“ Sie den Circuit und überspringen Sie das Tool für eine gewisse Zeit:
import time
class CircuitOpen(Exception):
pass
def circuit(failure_threshold=5, recovery_timeout=60):
def decorator(func):
state = {'failures': 0, 'open_until': 0}
def wrapper(*args, **kwargs):
if time.time() < state['open_until']:
raise CircuitOpen('circuit is open')
try:
result = func(*args, **kwargs)
state['failures'] = 0
return result
except Exception:
state['failures'] += 1
if state['failures'] >= failure_threshold:
state['open_until'] = time.time() + recovery_timeout
raise
return wrapper
return decorator
@circuit(failure_threshold=3, recovery_timeout=1)
def fragile_tool(x):
if x < 0:
raise ValueError('bad input')
return x * 2
for x in [1, -1, -1, -1, -1]:
try:
print('ok', fragile_tool(x))
except CircuitOpen as e:
print('blocked:', e)
except ValueError as e:
print('failed:', e)
Fehler mit Kontext protokollieren
Protokollieren Sie genügend Informationen, um den Fehler nachträglich zu analysieren: Toolname, Argumente, Fehlertyp, Stacktrace, Request-ID, Benutzer-ID und Trace-ID. Senden Sie diese an Ihr Observability-Tool.
Graceful Degradation
Wenn ein kritisches Tool nicht verfügbar ist, teilen Sie dem Benutzer dies ehrlich mit, anstatt so zu tun, als hätte der Agent die Aufgabe erfolgreich ausgeführt:
if all_search_tools_failed:
return 'I was unable to search the web right now. Please try again in a few minutes.'Muster für Tool-Fehler
Wie lassen sich Tool-Ausnahmen innerhalb der Agentenschleife am sichersten behandeln?
Zusammenfassung
Tools können fehlschlagen. Fangen Sie Fehler ab, klassifizieren Sie sie, strukturieren Sie sie als Inhalt und ermöglichen Sie dem Agenten die Wiederherstellung. Fügen Sie für zuverlässigen Produktivbetrieb Timeouts, Wiederholungen und Circuit Breaker hinzu.
Häufig gestellte Fragen
Ist die Lektion „Tool-Fehler erkennen und beheben“ kostenlos?
Ja — der vollständige Text von „Tool-Fehler erkennen und beheben“ 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 „Tool-Fehler erkennen und beheben“?
Wenn ein Tool den Fehler 500 zurückgibt, senden Sie den Fehler an das Modell, damit es einen anderen Ansatz versucht, statt abzustürzen. 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 4 von 4.
Wie lange dauert die Lektion „Tool-Fehler erkennen und beheben“?
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
- ReAct: Muster aus Schlussfolgern und Handeln
- ReAct von Grund auf implementieren
- Gängige Tool-Sets (Web, Taschenrechner, RAG)
- Tool-Fehler erkennen und beheben