Was this page helpful?
A partir de los modelos Claude 4, las respuestas de streaming de la API de Claude devuelven stop_reason: "refusal" cuando los clasificadores de streaming intervienen para manejar posibles violaciones de políticas. Esta nueva característica de seguridad ayuda a mantener el cumplimiento de contenido durante la transmisión en tiempo real.
Para obtener más información sobre los rechazos activados por los filtros de seguridad de API para Claude Sonnet 4.5, consulta Understanding Sonnet 4.5's API Safety Filters.
Cuando los clasificadores de streaming detectan contenido que viola las políticas de Anthropic, la API devuelve esta respuesta:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}No se incluye ningún mensaje de rechazo adicional. Debes manejar la respuesta y proporcionar mensajes apropiados orientados al usuario.
Cuando recibas stop_reason: refusal, debes restablecer el contexto de la conversación eliminando o actualizando el turno que fue rechazado antes de continuar. Intentar continuar sin restablecer resultará en rechazos continuos.
Las métricas de uso se proporcionan en la respuesta para fines de facturación, incluso cuando la respuesta es rechazada.
Se te facturará por los tokens de salida hasta el rechazo.
Si encuentras razones de parada refusal frecuentemente mientras usas Claude Sonnet 4.5 u Opus 4.1, puedes intentar actualizar tus llamadas de API para usar Haiku 4.5 (claude-haiku-4-5-20251001), que tiene restricciones de uso diferentes. Obtén más información sobre understanding Sonnet 4.5's API safety filters.
Aquí te mostramos cómo detectar y manejar rechazos de streaming en tu aplicación:
La API actualmente maneja rechazos de tres formas diferentes:
| Tipo de Rechazo | Formato de Respuesta | Cuándo Ocurre |
|---|---|---|
| Rechazos del clasificador de streaming | stop_reason: refusal | Durante el streaming cuando el contenido viola políticas |
| Validación de entrada de API y derechos de autor | Códigos de error 400 | Cuando la entrada falla las verificaciones de validación |
| Rechazos generados por el modelo | Respuestas de texto estándar | Cuando el modelo decide rechazar por sí mismo |
Las futuras versiones de API expandirán el patrón stop_reason: refusal para unificar el manejo de rechazos en todos los tipos.
stop_reason: refusal en tu manejo de erroresclient = 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}")