Claude 4 모델부터 Claude API의 스트리밍 응답은 스트리밍 분류기가 잠재적인 정책 위반을 처리하기 위해 개입할 때 **stop_reason: "refusal"**을 반환합니다. 이 안전 기능은 실시간 스트리밍 중 콘텐츠 규정 준수를 유지하는 데 도움이 됩니다.
이 페이지는 스트리밍 응답에서 거부가 어떻게 나타나는지 다룹니다. 모든 stop_reason 값과 처리 방법은 중지 사유 및 대체를 참조하세요. 거부된 요청을 다른 Claude 모델에서 재시도하려면 거부 및 대체를 참조하세요.
스트리밍 분류기가 Anthropic의 정책을 위반하는 콘텐츠를 감지하면 API는 다음 응답을 반환합니다:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello.."
}
],
"stop_reason": "refusal"
}추가적인 거부 메시지는 포함되지 않습니다. 응답을 처리하고 적절한 사용자 대상 메시지를 제공해야 합니다.
**stop_reason: refusal**을 받으면 계속하기 전에 대화 컨텍스트를 재설정해야 합니다. 거부를 유발한 턴을 제거하거나 다시 표현하거나, 대화 기록을 완전히 지울 수 있습니다. 재설정하지 않고 계속 시도하면 거부가 계속 발생합니다.
응답이 거부된 경우에도 사용량 지표는 응답에 계속 제공됩니다.
Claude가 출력을 생성하기 전에 거부가 도착하면 Claude API에서 해당 요청에 대해 요금이 청구되지 않으며, 해당 응답의 사용량 수치는 정보 제공용입니다. Claude가 거부 전에 출력을 생성한 경우에는 해당 요청에 대해 요금이 청구됩니다.
컨텍스트 재설정이 유일한 복구 방법은 아닙니다. 거부된 요청을 다른 Claude 모델에서 재시도할 수도 있으며, 거부 및 대체 페이지에서 서버 측 대체, SDK 미들웨어 또는 수동 재시도로 이를 설정하는 방법을 확인할 수 있습니다.
애플리케이션에서 스트리밍 거부를 감지하고 처리하는 방법은 다음과 같습니다:
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:
# 메시지 델타에서 거부 여부 확인
if event.type == "message_delta":
if event.delta.stop_reason == "refusal":
reset_conversation()
break
except Exception as e:
print(f"Error: {e}")API는 현재 세 가지 방식으로 거부를 처리합니다:
| 거부 유형 | 응답 형식 | 발생 시점 |
|---|---|---|
| 스트리밍 분류기 거부 | stop_reason: refusal | 스트리밍 중 콘텐츠가 정책을 위반할 때 |
| API 입력 및 저작권 검증 | 400 오류 코드 | 입력이 검증 확인에 실패할 때 |
| 모델 생성 거부 | 표준 텍스트 응답 | 모델 자체가 거부하기로 결정할 때 |
향후 API 버전에서는 stop_reason: refusal 패턴을 확장하여 모든 유형에 걸쳐 거부 처리를 통합할 예정입니다.
stop_reason: refusal 확인을 포함하세요이 기능이 처음 출시되었을 때 거부 처리를 구축했거나 기존 통합에 추가하는 경우 다음 사항을 확인하세요:
stop_reason: "refusal"과 함께 성공적인 HTTP 200 응답으로 도착하므로, 오류율만을 기반으로 구축된 모니터링으로는 이를 감지할 수 없습니다. 거부를 자체 신호로 추적하세요.stop_details 객체도 포함됩니다. 전체 응답 형태는 거부 및 대체를 참조하세요.stop_reason: "refusal"과 함께 성공한 결과로 반환됩니다.stop_reason을 중심으로 처리를 통합하세요. API는 거부 처리를 stop_reason: "refusal" 중심으로 계속 통합하고 있으므로, 모델별 동작이 아닌 중지 사유를 기준으로 분기하세요.서버 측 또는 클라이언트에서 거부된 요청을 다른 Claude 모델에서 재시도하세요.
모든 stop_reason 값과 처리 방법입니다.
응답을 스트리밍하고 도착하는 message_delta 이벤트에서 stop_reason을 읽으세요.
Claude의 교차 언어 기능으로 여러 언어의 사용자를 지원하세요.
Was this page helpful?