À partir des modèles Claude 4, les réponses en streaming de l'API de Claude renvoient stop_reason : "refusal" lorsque les classificateurs de streaming interviennent pour gérer des violations potentielles des politiques. Cette fonctionnalité de sécurité aide à maintenir la conformité du contenu pendant le streaming en temps réel.
Lorsque les classificateurs de streaming détectent du contenu qui viole les politiques d'Anthropic, l'API renvoie cette réponse :
{
"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."
}
}Dans le flux d'événements, stop_details arrive sur l'événement message_delta aux côtés de stop_reason.
Lorsque vous recevez stop_reason : refusal, vous devez réinitialiser le contexte de la conversation avant de continuer. Vous pouvez supprimer ou reformuler le tour qui a déclenché le refus, ou effacer entièrement l'historique de la conversation. Tenter de continuer sans réinitialiser entraînera des refus continus.
Voici comment détecter et gérer les refus en streaming dans votre application :
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:
# Vérifier le refus dans le delta du message
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")L'API gère actuellement les refus de trois manières différentes :
| Type de refus | Format de réponse | Quand cela se produit |
|---|---|---|
| Refus des classificateurs de streaming | stop_reason : refusal | Pendant le streaming lorsque le contenu viole les politiques |
| Validation des entrées de l'API et des droits d'auteur | Codes d'erreur 400 | Lorsque l'entrée échoue aux vérifications de validation |
| Refus générés par le modèle | Réponses textuelles standard | Lorsque le modèle lui-même refuse |
stop_reason : refusal dans votre gestion des erreursSi vous avez construit la gestion des refus lorsque cette fonctionnalité a été lancée pour la première fois, ou si vous l'ajoutez à une intégration existante, vérifiez les points suivants :
stop_reason : "refusal", donc une surveillance basée uniquement sur les taux d'erreur ne le fera pas apparaître. Suivez les refus comme un signal à part entière.stop_details qui identifie la catégorie de politique à l'origine du refus. Consultez Refus et repli pour la forme complète de la réponse.stop_reason : "refusal", et non comme un résultat en erreur.stop_reason. L'API continue de consolider la gestion des refus autour de stop_reason : "refusal", donc effectuez un branchement sur la raison d'arrêt plutôt que sur un comportement spécifique au modèle.Réessayez les requêtes refusées sur un autre modèle Claude, côté serveur ou dans votre client.
Chaque valeur de stop_reason et la manière de la gérer.
Diffusez les réponses en streaming et lisez stop_reason à partir des événements message_delta au fur et à mesure de leur arrivée.
Servez des utilisateurs dans toutes les langues grâce aux capacités interlinguistiques de Claude.
Was this page helpful?