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 lidar com potenciais violações de política. Este recurso de segurança ajuda a manter a conformidade de conteúdo durante o streaming em tempo real.
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",
"stop_details": {
"type": "refusal",
"category": "cyber",
"explanation": "This request was declined because it could enable cyber harm."
}
}No fluxo de eventos, stop_details chega no evento message_delta junto com stop_reason.
Quando você receber stop_reason: refusal, você 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.
Veja como detectar e lidar com 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-5",
) as stream:
for event in stream:
# Verifica se há 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 lida com 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 recusa |
stop_reason: refusal no seu tratamento de errosSe você construiu o tratamento de recusas quando este recurso foi lançado pela primeira vez, ou está adicionando-o a uma integração existente, verifique o seguinte:
stop_reason: "refusal", então o monitoramento construído apenas sobre taxas de erro não a detectará. Acompanhe 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 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", então faça a ramificação com base no motivo de parada em vez de no comportamento específico do modelo.Tente novamente solicitações recusadas em outro modelo Claude, no lado do servidor ou no seu cliente.
Todos os valores de stop_reason e como lidar com cada um.
Faça streaming de respostas e leia stop_reason dos eventos message_delta conforme eles chegam.
Atenda usuários em vários idiomas com as capacidades multilíngues do Claude.
Was this page helpful?