간단한 답변
요청이 제공자의 안전 정책을 트리거할 때 Claude는 오류를 반환하지 않습니다. API는 여전히 HTTP 200을 반환하지만:content은 빈 배열[]이며output_tokens는0입니다;stop_reason는refusal입니다;stop_details은 거부 카테고리(예:cyber)를 명시하고 짧은 영어 설명을 포함합니다.
message.content[0]을 직접 읽는 코드는 IndexError을 발생시킵니다. OpenAI 호환 형식을 사용하면 빈 문자열이 반환되며 finish_reason은 refusal입니다.
거부 응답은 보통 1~2초 이내에 반환됩니다. 과금 여부는 카테고리에 따라 다릅니다. cyber 카테고리(및 기타 일부 카테고리)에서 어떠한 출력이 생성되기 전의 거부는 과금되지 않습니다 — 아래의 “과금 규칙”을 참조하십시오.
거부 응답의 형태
다음은 사이버 거부를 유발하는 동일한 요청을 4가지 방식으로 호출한 결과입니다(2026-09-29 측정, ID 마스킹됨):- 네이티브 · 비스트리밍
- 네이티브 · 스트리밍
- OpenAI 호환 · 비스트리밍
- OpenAI 호환 · 스트리밍
POST /v1/messages, stream: false:거부는 스트리밍 도중에도 발생할 수 있습니다. 텍스트의 일부가 먼저 스트리밍된 후 응답이
stop_reason: "refusal"(으)로 종료됩니다. 해당 부분 출력은 불완전하므로 폐기해야 합니다.거부 카테고리
stop_details.category에는 현재 다섯 가지 값이 있습니다:
거부가 명명된 카테고리에 매핑되지 않는 경우,
category과 explanation은 모두 null이며 이는 정상적인 값입니다. explanation 텍스트는 언제든지 변경될 수 있으므로, 그대로 표시하되 문자열 매칭을 수행하지 마십시오.
자주 발생하는 트리거 원인
category: "cyber"는 개발자가 가장 자주 마주치는 문제입니다. Claude에는 사이버 보안 요청에 대한 실시간 보호 조치가 적용되어 있으며, 다음과 같은 작업은 모두 이를 트리거할 수 있습니다:
- 모델에 코드의 버그를 찾도록 요청하거나, 특정 코드에 “취약점이 있는지” 판단하도록 하거나, 취약점 유형(CWE)을 명시하도록 요청하는 작업
- 익스플로잇 코드 또는 모의 침투 테스트 절차를 작성하거나 완성하는 작업
- 악성 코드를 분석하거나 재작성하는 작업
과금 규칙
제공업체의 규칙에 따릅니다(2026년 9월 기준이며, 제공업체가 위양성률을 측정함에 따라 조정될 수 있습니다):
과금 여부와 관계없이, 거부된 요청도 요청 제한 계산에 포함됩니다.
usage에는 여전히 token 수가 표시되지만, 이는 단순 집계 수치일 뿐 반드시 과금을 의미하지는 않습니다.
감지 및 처리 방법
1
콘텐츠를 읽기 전에 stop_reason 확인
네이티브 형식에서는
stop_reason == "refusal"을 확인하고, OpenAI 호환 형식에서는 finish_reason == "refusal"을 확인하십시오. 거부를 배제한 후에만 content을 읽으십시오.2
거부를 결과 유형으로 기록
거부는 네트워크 오류가 아니라 성공적인 호출입니다. 평가 작업의 경우 재시도해야 할 실패로 집계하는 대신,
stop_details.category와 함께 “refused”로 별도 기록하십시오.3
동일한 콘텐츠 재시도 금지
동일한 콘텐츠를 다시 보내면 대개 동일한 거부가 발생하며, 여전히 요청 제한을 소모하고 일부 카테고리의 경우 매번 과금됩니다.
4
다중 턴 대화에서 컨텍스트 재설정
특정 턴이 거부된 경우 계속 진행하기 전에 해당 턴을 제거하거나 다시 작성하거나 대화 기록을 지우십시오. 재설정하지 않으면 이후 요청도 계속 거부됩니다.
5
거부된 콘텐츠 검토
어떤 작업이 거부를 유발하는지 확인하기 위해
category별로 거부를 그룹화한 다음, 해당 콘텐츠를 다른 모델로 전송할지 여부를 결정하십시오.- Anthropic SDK
- OpenAI SDK
정당한 보안 연구는 어떻게 되나요?
거절 문구에 언급된 Cyber Verification Program은 정당한 보안 작업을 위해 제공자가 운영하는 무료 신청 프로그램입니다. 신원 확인을 거치면 익스플로잇이나 공격용 도구 개발과 같은 “고위험 이중 용도” 작업에 대한 제한이 완화될 수 있습니다. 랜섬웨어 개발이나 대규모 데이터 유출과 같은 “금지된 용도”는 모든 경우에 차단됩니다. 해당 프로그램은 퍼스트 파티 제공자 계정에서 조직 관리자가 직접 신청해야 합니다. 서드파티 플랫폼에 대해 제공자는 “모든 플랫폼이 참여하는 것은 아니다”라고 명시하고 있으며, APIYI는 현재 해당 프로그램에 대한 접근을 지원하지 않습니다. 따라서 APIYI를 통해 호출할 때 거부된 샘플의 경우:- 평가 결과에 카테고리별로 그룹화하여 “거절됨”으로 투명하게 기록합니다.
- 또는 해당 콘텐츠를 다른 모델로 처리합니다.
OpenAI 거부와의 차이점
OpenAI 거부 응답이 어떤 형태인지 확인하려면 OpenAI 모델 거부는 어떤 형태인가요?를 참고하십시오.
자주 묻는 질문
거부 시에도 과금됩니까?
거부 시에도 과금됩니까?
카테고리와 시점에 따라 다릅니다.
cyber, general_harms 또는 null의 출력 전 거부는 과금되지 않으며, bio, frontier_llm 및 reasoning_extraction는 입력에 대해 과금됩니다. 스트리밍 도중 발생한 거부는 입력과 이미 스트리밍된 출력을 합산하여 과금됩니다. 위의 “과금 규칙”을 참고하십시오.거부를 비활성화할 수 있습니까?
거부를 비활성화할 수 있습니까?
아닙니다. 거부는 제공업체의 안전 정책에 따라 해당 모델이 결정하며, APIYI에서 이를 비활성화하거나 엄격도를 변경할 수 없습니다. 거부된 콘텐츠는 거부 결과로 기록하거나 다른 모델로 처리하십시오.
동일한 데이터셋에서 일부 샘플만 거부되고 다른 샘플은 거부되지 않는 이유는 무엇입니까?
동일한 데이터셋에서 일부 샘플만 거부되고 다른 샘플은 거부되지 않는 이유는 무엇입니까?
보호 조치가 각 요청의 콘텐츠를 개별적으로 판단하기 때문입니다. 코드 스니펫 자체와 prompt의 표현 방식 모두 결과에 영향을 미치므로, 일반적으로 데이터셋의 일부만 거부됩니다. 자체 테스트 결과, 거부된 동일한 샘플을 다시 전송해도 일관된 결과가 나타났습니다.
거부 발생 시 usage에서 output_tokens가 0인 이유는 무엇입니까?
거부 발생 시 usage에서 output_tokens가 0인 이유는 무엇입니까?
모델이 생성을 시작하기 전에 중단되었으므로 출력은 0이며 입력만 계산됩니다. 이는 거부와
max_tokens 중단을 구분하는 방법이기도 합니다. 후자는 stop_reason: "max_tokens"을 가지며 출력 tokens 수가 설정한 제한과 같습니다.관련 문서
Claude 응답 처리
스트리밍 및 비스트리밍 응답 구조, stop_reason 값
OpenAI 모델 거절은 어떤 형태입니까?
GPT 거절 형태 및 감지 방법
콘텐츠 안전 및 컴플라이언스는 어떻게 보장됩니까?
플랫폼 콘텐츠 안전 및 컴플라이언스 정책