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 gestionar posibles infracciones de políticas. Esta función de seguridad ayuda a mantener el cumplimiento del contenido durante el streaming en tiempo real.
Esta página explica cómo aparecen los rechazos en las respuestas de streaming. Para conocer cada valor de stop_reason y cómo gestionarlo, consulta Razones de detención y alternativas. Para reintentar solicitudes rechazadas en otro modelo de Claude, consulta Rechazos y alternativas.
Cuando los clasificadores de streaming detectan contenido que infringe 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 gestionar la respuesta y proporcionar mensajes apropiados para el usuario.
Cuando recibas stop_reason: refusal, debes restablecer el contexto de la conversación antes de continuar. Puedes eliminar o reformular el turno que provocó el rechazo, o borrar por completo el historial de la conversación. Si intentas continuar sin restablecer el contexto, seguirás recibiendo rechazos.
Las métricas de uso se siguen proporcionando en la respuesta, incluso cuando esta es rechazada.
Cuando un rechazo llega antes de que Claude genere cualquier salida, no se te factura la solicitud en la API de Claude, y los recuentos de uso en esa respuesta son solo informativos. Cuando Claude genera salida antes del rechazo, sí se te factura esa solicitud.
Restablecer el contexto no es la única forma de recuperarse. También puedes reintentar la solicitud rechazada en un modelo de Claude diferente, y la página Rechazos y alternativas muestra cómo configurarlo con la alternativa del lado del servidor, el middleware del SDK o un reintento manual.
A continuación se muestra cómo detectar y gestionar los rechazos de 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-4-8",
) 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}")Actualmente, la API gestiona los 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 infringe las políticas |
| Validación de entrada de la API y derechos de autor | Códigos de error 400 | Cuando la entrada no supera las comprobaciones de validación |
| Rechazos generados por el modelo | Respuestas de texto estándar | Cuando el propio modelo decide rechazar |
Las futuras versiones de la API ampliarán el patrón stop_reason: refusal para unificar la gestión de rechazos en todos los tipos.
stop_reason: refusal en tu gestión de erroresSi implementaste la gestión de rechazos cuando esta función se lanzó por primera vez, o la estás añadiendo a una integración existente, verifica lo siguiente:
stop_reason: "refusal", por lo que el monitoreo basado únicamente en tasas de error no lo detectará. Rastrea los rechazos como una señal independiente.stop_details que identifica la categoría de política detrás de la negativa. Consulta Rechazos y alternativas para ver la estructura completa de la respuesta.stop_reason: "refusal", no como un resultado con error.stop_reason. La API continúa consolidando la gestión de rechazos en torno a stop_reason: "refusal", así que bifurca 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 gestionarlo.
Transmite respuestas 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?