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 politiche. Questa nuova funzione di sicurezza aiuta a mantenere la conformità dei contenuti durante lo streaming in tempo reale.
Per ulteriori informazioni sui rifiuti attivati dai filtri di sicurezza dell'API per Claude Sonnet 4.5, consulta Understanding Sonnet 4.5's API Safety Filters.
Quando i classificatori di streaming rilevano contenuti che violano le politiche di Anthropic, l'API restituisce questa risposta:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}Nessun messaggio di rifiuto aggiuntivo è incluso. Devi gestire la risposta e fornire messaggi appropriati rivolti all'utente.
Quando ricevi stop_reason: refusal, devi ripristinare il contesto della conversazione rimuovendo o aggiornando il turno che è stato rifiutato prima di continuare. Il tentativo di continuare senza ripristinare comporterà rifiuti continui.
Le metriche di utilizzo sono ancora fornite nella risposta per scopi di fatturazione, anche quando la risposta è rifiutata.
Ti verrà addebitato per i token di output fino al rifiuto.
Se incontri frequentemente motivi di stop refusal mentre utilizzi Claude Sonnet 4.5 o Opus 4.1, puoi provare ad aggiornare le tue chiamate API per utilizzare Haiku 4.5 (claude-haiku-4-5-20251001), che ha diverse restrizioni di utilizzo. Scopri di più su understanding Sonnet 4.5's API safety filters.
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-sonnet-4-6",
) as stream:
for event in stream:
# Check for refusal in message delta
if hasattr(event, "type") and 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 politiche |
| 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 decide di rifiutare |
Le versioni future dell'API espanderanno il modello stop_reason: refusal per unificare la gestione dei rifiuti in tutti i tipi.
stop_reason: refusal nella gestione degli erroriWas this page helpful?