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.
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",
"stop_details": {
"type": "refusal",
"category": "cyber",
"explanation": "This request was declined because it could enable cyber harm."
}
}Nel flusso di eventi, stop_details arriva nell'evento message_delta insieme a stop_reason.
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.
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-5",
) 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 dei classificatori di streaming | stop_reason: refusal | Durante lo streaming quando i contenuti violano 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 di testo standard | Quando il modello stesso rifiuta |
stop_reason: refusal nella tua gestione degli erroriSe hai costruito 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 rifiuto. 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 sullo stop reason piuttosto che sul comportamento specifico del modello.Riprova le richieste rifiutate su un altro modello Claude, lato server o nel tuo client.
Ogni valore di stop_reason e come gestirlo.
Trasmetti le risposte in streaming e leggi stop_reason dagli eventi message_delta man mano che arrivano.
Servi utenti in più lingue con le capacità cross-linguistiche di Claude.
Was this page helpful?