0Pricing
AI Agents · Lezione

Rilevare e gestire gli errori degli strumenti

Quando uno strumento restituisce un errore 500, lo comunichi al modello, così potrà tentare un approccio diverso invece di interrompersi.

Rilevare e gestire gli errori degli strumenti è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.

Gli strumenti si guastano. Preparatevi.

Ogni strumento reale può non funzionare:

  • Timeout di rete
  • Limiti di frequenza
  • Argomenti errati forniti dal modello
  • Indisponibilità dei servizi esterni
  • Autenticazione non valida

Gli agenti in produzione devono recuperare dagli errori in modo corretto.

Restituire sempre, non generare mai eccezioni

All'interno del ciclo dell'agente, intercettate tutti gli errori degli strumenti e restituiteli come contenuto. Non lasciate mai che un'eccezione interrompa il ciclo:

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}'}

Formato strutturato degli errori

Usate una struttura coerente, così il modello riconosce gli errori:

error = {'ok': False, 'error_type': 'TimeoutError', 'error_message': 'Tavily timed out after 10s', 'retryable': True}
print(error)

Distinguere gli errori ritentabili da quelli permanenti

Alcuni errori giustificano un nuovo tentativo (timeout), altri no (404). Comunicatelo al modello:

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)}

Riprovare automaticamente gli errori temporanei

Per le chiamate di rete, riprovate usando un backoff esponenziale:

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()

Convalida degli argomenti

Prima di chiamare lo strumento, convalidate gli argomenti con un modello Pydantic:

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}'}

Mostrare l'errore al modello

Aggiungete l'errore come risultato dello strumento e chiamate nuovamente il modello. Spesso il modello si corregge da solo:

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...'

Evitare i cicli di errore infiniti

Quando ricevono un errore, alcuni modelli ripetono la stessa chiamata errata. Ponete un limite al ciclo e rilevate le ripetizioni:

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)

Recupero specifico per strumento

Per gli strumenti notoriamente instabili, implementi la logica dei tentativi all'interno dello strumento, non del ciclo:

def search_with_fallback(query):
    try:
        return tavily_search(query)
    except Exception:
        return bing_search(query)   # secondary provider

Timeout per ogni chiamata

Ogni chiamata esterna richiede un timeout. In caso contrario, un singolo servizio lento blocca l'intero agente:

import requests
response = requests.get(url, timeout=10)  # 10s

# For LLM calls:
from openai import OpenAI
client = OpenAI(timeout=30.0)

Circuit breaker

Quando uno strumento non riesce ripetutamente, "apra" il circuito e lo salti per un certo periodo:

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)

Registrare gli errori con il contesto

Registri informazioni sufficienti per eseguire il debug in un secondo momento: nome dello strumento, argomenti, tipo di errore, stack trace, ID della richiesta, ID dell'utente, ID della traccia. Invii tutto allo strumento di osservabilità.

Degrado controllato

Quando uno strumento critico non è disponibile, informi onestamente l'utente invece di fingere che l'agente abbia avuto successo:

if all_search_tools_failed:
    return 'I was unable to search the web right now. Please try again in a few minutes.'

Pattern per gli errori degli strumenti

Qual è il modo più sicuro per gestire le eccezioni degli strumenti all'interno del ciclo dell'agente?

Riepilogo

Gli strumenti possono non riuscire. Intercetti, classifichi e trasformi gli errori in contenuti strutturati, quindi lasci che l'agente recuperi. Aggiunga timeout, tentativi e circuit breaker per garantire l'affidabilità in produzione.

Domande Frequenti

La lezione «Rilevare e gestire gli errori degli strumenti» è gratuita?

Sì — il testo completo di «Rilevare e gestire gli errori degli strumenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.

Cosa imparerò in «Rilevare e gestire gli errori degli strumenti»?

Quando uno strumento restituisce un errore 500, lo comunichi al modello, così potrà tentare un approccio diverso invece di interrompersi. Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Agents?

Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Rilevare e gestire gli errori degli strumenti»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Agents?

Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. ReAct: pattern Ragionamento + Azione
  2. Implementare ReAct da zero
  3. Set di strumenti comuni (Web, calcolatrice, RAG)
  4. Rilevare e gestire gli errori degli strumenti
← Torna a AI Agents