A partir de los modelos Claude 4, las respuestas en streaming de la API de Claude devuelven stop_reason: "refusal" cuando los clasificadores de streaming intervienen para manejar posibles violaciones de políticas. Esta característica de seguridad ayuda a mantener el cumplimiento del contenido durante el streaming en tiempo real.
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",
"stop_details": {
"type": "refusal",
"category": "cyber",
"explanation": "This request was declined because it could enable cyber harm."
}
}En el flujo de eventos, stop_details llega en el evento message_delta junto con stop_reason.
Cuando recibes stop_reason: refusal, debes restablecer el contexto de la conversación antes de continuar. Puedes eliminar o reformular el turno que desencadenó el rechazo, o borrar el historial de la conversación por completo. Intentar continuar sin restablecer resultará en rechazos continuos.
Así es como puedes detectar y manejar rechazos en streaming en tu aplicación:
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:
# Verificar si hay un rechazo en el delta del mensaje
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")La API actualmente maneja los rechazos de tres maneras 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 las políticas |
| Validación de entrada de la API y de derechos de autor | Códigos de error 400 | Cuando la entrada no pasa las verificaciones de validación |
| Rechazos generados por el modelo | Respuestas de texto estándar | Cuando el propio modelo se rehúsa |
stop_reason: refusal en tu manejo de erroresSi construiste el manejo de rechazos cuando esta característica se lanzó por primera vez, o la estás agregando a una integración existente, verifica lo siguiente:
stop_reason: "refusal", por lo que el monitoreo basado solo en tasas de error no lo detectará. Rastrea los rechazos como su propia señal.stop_details que identifica la categoría de política detrás de la negativa. Consulta Rechazos y respaldo para ver la forma completa de la respuesta.stop_reason: "refusal", no como un resultado con error.stop_reason. La API continúa consolidando el manejo de rechazos en torno a stop_reason: "refusal", así que ramifica según la razón de detención en lugar de según el comportamiento específico del modelo.Reintenta solicitudes rechazadas en otro modelo de Claude, del lado del servidor o en tu cliente.
Cada valor de stop_reason y cómo manejarlo.
Transmite respuestas en streaming y lee stop_reason de los eventos message_delta a medida que llegan.
Atiende a usuarios en distintos idiomas con las capacidades multilingües de Claude.
Was this page helpful?