A partir dos modelos Claude 4, as respostas de streaming da API do Claude retornam stop_reason: "refusal" quando classificadores de streaming intervêm para tratar possíveis violações de política. Esse recurso de segurança ajuda a manter a conformidade do conteúdo durante o streaming em tempo real.
Esta página aborda como as recusas aparecem em respostas de streaming. Para todos os valores de stop_reason e como tratá-los, consulte Motivos de parada e fallback. Para tentar novamente solicitações recusadas em outro modelo Claude, consulte Recusas e fallback.
Quando os classificadores de streaming detectam conteúdo que viola as políticas da Anthropic, a API retorna esta resposta:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}Nenhuma mensagem de recusa adicional é incluída. Você deve tratar a resposta e fornecer mensagens apropriadas voltadas ao usuário.
Quando você recebe stop_reason: refusal, deve redefinir o contexto da conversa antes de continuar. Você pode remover ou reformular o turno que acionou a recusa, ou limpar completamente o histórico da conversa. Tentar continuar sem redefinir resultará em recusas contínuas.
As métricas de uso ainda são fornecidas na resposta, mesmo quando a resposta é recusada.
Quando uma recusa chega antes de o Claude gerar qualquer saída, você não é cobrado pela solicitação na API do Claude, e as contagens de uso nessa resposta são apenas informativas. Quando o Claude gera saída antes da recusa, você é cobrado por essa solicitação.
Redefinir o contexto não é a única forma de recuperação. Você também pode tentar novamente a solicitação recusada em um modelo Claude diferente, e a página Recusas e fallback mostra como configurar isso com fallback do lado do servidor, o middleware do SDK ou uma nova tentativa manual.
Veja como detectar e tratar recusas de streaming em sua aplicação:
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 recusa no delta da mensagem
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")A API atualmente trata recusas de três maneiras diferentes:
| Tipo de recusa | Formato de resposta | Quando ocorre |
|---|---|---|
| Recusas do classificador de streaming | stop_reason: refusal | Durante o streaming, quando o conteúdo viola políticas |
| Validação de entrada da API e de direitos autorais | Códigos de erro 400 | Quando a entrada falha nas verificações de validação |
| Recusas geradas pelo modelo | Respostas de texto padrão | Quando o próprio modelo decide recusar |
Versões futuras da API expandirão o padrão stop_reason: refusal para unificar o tratamento de recusas em todos os tipos.
stop_reason: refusal no seu tratamento de errosSe você implementou o tratamento de recusas quando esse recurso foi lançado pela primeira vez, ou está adicionando-o a uma integração existente, verifique o seguinte:
stop_reason: "refusal", portanto, um monitoramento baseado apenas em taxas de erro não a detectará. Acompanhe as recusas como um sinal próprio.stop_details que identifica a categoria de política por trás da recusa. Consulte Recusas e fallback para ver o formato completo da resposta.stop_reason: "refusal", não como um resultado com erro.stop_reason. A API continua a consolidar o tratamento de recusas em torno de stop_reason: "refusal", portanto, ramifique com base no motivo de parada em vez de em comportamento específico do modelo.Tente novamente solicitações recusadas em outro modelo Claude, do lado do servidor ou no seu cliente.
Todos os valores de stop_reason e como tratá-los.
Faça streaming de respostas e leia stop_reason dos eventos message_delta conforme eles chegam.
Atenda usuários em vários idiomas com os recursos multilíngues do Claude.
Was this page helpful?