Middleware degli SDK
Intercetta e modifica le richieste e le risposte dell'SDK.
L'SDK di Claude fornisce un hook di "middleware" (software intermedio), o interceptor, che ti consente di eseguire codice prima che una richiesta venga inviata e dopo che la risposta è stata ricevuta. Usa il middleware per esigenze trasversali come il logging, i nuovi tentativi personalizzati, l'annotazione delle richieste e la gestione del fallback in caso di rifiuto.
Ogni middleware può ispezionare o sostituire la richiesta prima di chiamare next(), e la risposta dopo che next() restituisce il controllo.
Registrazione del middleware
Ogni middleware è una funzione che riceve la richiesta in uscita e il gestore successivo. Chiama call_next(request) per inoltrare la richiesta al resto della catena (o direttamente al core dell'SDK se questo è l'ultimo middleware) e restituisci la sua risposta. Tutto ciò che precede quella chiamata viene eseguito all'andata; tutto ciò che la segue viene eseguito al ritorno.
def logging_middleware(request: APIRequest, call_next: CallNext) -> APIResponse[Any]:
# Prima della richiesta
print(f"-> {request.method} {request.url}")
# Inoltra la richiesta al resto della catena
response = call_next(request)
# Dopo la richiesta
print(f"<- {response.status_code}")
return response
client = Anthropic(middleware=[logging_middleware])Ordine dei middleware
Quando registri più middleware, questi vengono applicati nell'ordine indicato: il codice "before" (prima) del primo middleware viene eseguito per primo, e il suo codice "after" (dopo) viene eseguito per ultimo. I middleware registrati sul client vengono eseguiti prima dei middleware passati come opzione per singola richiesta.
Nell'SDK Go, le chiamate ripetute a option.WithMiddleware vengono concatenate (prima quelle del client, poi quelle del metodo). Negli altri SDK, passa un array; le voci successive avvolgono quelle interne.
Sostituzione del client HTTP
L'SDK accetta anche un client HTTP personalizzato (per la configurazione del proxy, TLS personalizzato o il connection pooling). Viene utilizzato un solo client HTTP per ogni client SDK; impostarlo sostituisce quello predefinito. Il client HTTP personalizzato riceve le richieste dopo che tutti i middleware sono stati eseguiti.
Middleware integrati
L'SDK include un middleware di fallback in caso di rifiuto che ritenta automaticamente su un modello di fallback una richiesta che Claude rifiuta (stop_reason: "refusal"). Rifiuti e fallback elenca i modelli i cui classificatori di sicurezza possono rifiutare le richieste, e Rilevare e ritentare su un modello di fallback illustra la configurazione e gli esempi per ciascun linguaggio.
Was this page helpful?