À 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é contribue à maintenir la conformité du contenu pendant le streaming en temps réel.
Cette page explique comment les refus apparaissent dans les réponses en streaming. Pour connaître toutes les valeurs de stop_reason et savoir comment les gérer, consultez Raisons d'arrêt et modèle de secours. Pour relancer les requêtes refusées sur un autre modèle Claude, consultez Refus et modèle de secours.
Lorsque les classificateurs de streaming détectent du contenu qui enfreint les politiques d'Anthropic, l'API renvoie cette réponse :
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}Aucun message de refus supplémentaire n'est inclus. Vous devez gérer la réponse et fournir un message approprié destiné à l'utilisateur.
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. Toute tentative de poursuivre sans réinitialisation entraînera des refus répétés.
Les métriques d'utilisation sont toujours fournies dans la réponse, même lorsque celle-ci est refusée.
Lorsqu'un refus survient avant que Claude ne génère une quelconque sortie, la requête ne vous est pas facturée sur l'API Claude, et les décomptes d'utilisation dans cette réponse sont fournis à titre informatif uniquement. Lorsque Claude génère une sortie avant le refus, cette requête vous est facturée.
La réinitialisation du contexte n'est pas le seul moyen de récupérer. Vous pouvez également relancer la requête refusée sur un autre modèle Claude, et la page Refus et modèle de secours explique comment configurer cela avec le mécanisme de secours côté serveur, le middleware du SDK ou une relance manuelle.
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-4-8",
) as stream:
for event in stream:
# Vérifier la présence d'un 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 enfreint les politiques |
| Validation des entrées de l'API et des droits d'auteur | Codes d'erreur 400 | Lorsque l'entrée échoue aux contrôles de validation |
| Refus générés par le modèle | Réponses textuelles standard | Lorsque le modèle lui-même décide de refuser |
Les futures versions de l'API étendront le modèle stop_reason: refusal afin d'unifier la gestion des refus pour tous les types.
stop_reason: refusal dans votre gestion des erreurs.Si vous avez mis en place la gestion des refus lors du lancement initial de cette fonctionnalité, ou si vous l'ajoutez à une intégration existante, vérifiez les points suivants :
stop_reason: "refusal", de sorte qu'une surveillance basée uniquement sur les taux d'erreur ne le détectera pas. Suivez les refus comme un signal distinct.stop_details qui identifie la catégorie de politique à l'origine du refus. Consultez Refus et modèle de secours pour la structure 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 basez vos branchements sur la raison d'arrêt plutôt que sur un comportement spécifique au modèle.Relancez les requêtes refusées sur un autre modèle Claude, côté serveur ou dans votre client.
Toutes les valeurs de stop_reason et comment les gérer.
Diffusez les réponses en streaming et lisez stop_reason depuis les événements message_delta au fur et à mesure de leur arrivée.
Servez des utilisateurs dans plusieurs langues grâce aux capacités interlinguistiques de Claude.
Was this page helpful?