A partire dai modelli Claude 4, le risposte in streaming dall'API di Claude restituiscono stop_reason: "refusal" quando i classificatori di streaming intervengono per gestire potenziali violazioni delle policy. Questa funzionalità di sicurezza aiuta a mantenere la conformità dei contenuti durante lo streaming in tempo reale.
Questa pagina descrive come i rifiuti appaiono nelle risposte in streaming. Per tutti i valori di stop_reason e come gestirli, consulta Motivi di arresto e fallback. Per riprovare le richieste rifiutate su un altro modello Claude, consulta Rifiuti e fallback.
Quando i classificatori di streaming rilevano contenuti che violano le policy di Anthropic, l'API restituisce questa risposta:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}Non viene incluso alcun messaggio di rifiuto aggiuntivo. Devi gestire la risposta e fornire messaggi appropriati rivolti all'utente.
Quando ricevi stop_reason: refusal, devi reimpostare il contesto della conversazione prima di continuare. Puoi rimuovere o riformulare il turno che ha attivato il rifiuto, oppure cancellare completamente la cronologia della conversazione. Tentare di continuare senza reimpostare comporterà ulteriori rifiuti.
Le metriche di utilizzo vengono comunque fornite nella risposta, anche quando la risposta viene rifiutata.
Quando un rifiuto arriva prima che Claude generi qualsiasi output, non ti viene addebitata la richiesta sull'API di Claude e i conteggi di utilizzo in quella risposta sono solo informativi. Quando Claude genera output prima del rifiuto, la richiesta ti viene addebitata.
Reimpostare il contesto non è l'unico modo per recuperare. Puoi anche riprovare la richiesta rifiutata su un modello Claude diverso, e la pagina Rifiuti e fallback mostra come configurarlo con il fallback lato server, il middleware dell'SDK o un nuovo tentativo manuale.
Ecco come rilevare e gestire i rifiuti in streaming nella tua applicazione:
client = anthropic.Anthropic()
messages = []
def reset_conversation():
"""Reset conversation context after refusal"""
global messages
messages = []
print("Conversation reset due to refusal")
try:
with client.messages.stream(
max_tokens=1024,
messages=messages + [{"role": "user", "content": "Hello"}],
model="claude-opus-4-8",
) as stream:
for event in stream:
# Verifica la presenza di un rifiuto nel delta del messaggio
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")L'API attualmente gestisce i rifiuti in tre modi diversi:
| Tipo di rifiuto | Formato della risposta | Quando si verifica |
|---|---|---|
| Rifiuti del classificatore di streaming | stop_reason: refusal | Durante lo streaming quando il contenuto viola le policy |
| Validazione dell'input API e del copyright | Codici di errore 400 | Quando l'input non supera i controlli di validazione |
| Rifiuti generati dal modello | Risposte testuali standard | Quando il modello stesso decide di rifiutare |
Le versioni future dell'API estenderanno il pattern stop_reason: refusal per unificare la gestione dei rifiuti in tutti i tipi.
stop_reason: refusal nella tua gestione degli erroriSe hai implementato la gestione dei rifiuti quando questa funzionalità è stata rilasciata per la prima volta, o la stai aggiungendo a un'integrazione esistente, verifica quanto segue:
stop_reason: "refusal", quindi un monitoraggio basato solo sui tassi di errore non lo rileverà. Traccia i rifiuti come segnale a sé stante.stop_details che identifica la categoria di policy alla base del diniego. Consulta Rifiuti e fallback per la struttura completa della risposta.stop_reason: "refusal", non come risultato in errore.stop_reason. L'API continua a consolidare la gestione dei rifiuti attorno a stop_reason: "refusal", quindi basa la logica condizionale sul motivo di arresto anziché sul comportamento specifico del modello.Riprova le richieste rifiutate su un altro modello Claude, lato server o nel tuo client.
Tutti i valori di stop_reason e come gestirli.
Trasmetti le risposte in streaming e leggi stop_reason dagli eventi message_delta man mano che arrivano.
Servi utenti in diverse lingue con le capacità cross-linguistiche di Claude.
Was this page helpful?