Fable 5 API 거부 처리 방법

Fable 5 요청은 Opus 4.8의 응답을 받아 돌아올 수 있습니다. response.model을 통해 재라우팅을 감지하고, 베타 폴백(fallbacks) 파라미터를 사용하며, 거절 경로를 테스트하는 방법을 알아보세요.

Ashley Innocent

Ashley Innocent

2 July 2026

Fable 5 API 거부 처리 방법

Apidog 엔터프라이즈

온프레미스 배포

SSO & RBAC

SOC 2 준수

Apidog Enterprise 살펴보기

claude-fable-5를 호출하고 응답이 정상적으로 보이지만, model 필드를 확인하면 claude-opus-4-8로 표시됩니다. 이는 귀하의 요청이 안전 분류기를 통과하여 Fable 5가 답변을 거부하고 다른 모델이 개입했음을 의미합니다. 이는 버그가 아닙니다. Fable 5가 작동하도록 설계된 방식이며, 통합 시 의도적으로 처리해야 합니다.

우리는 이러한 아키텍처의 배경을 Fable 5의 안전 장치에 대한 설명에서 다루었습니다. 이 문서는 실용적인 동반자입니다. 여기서는 재라우팅을 유발하는 요인, 코드에서 이를 감지하는 방법, 베타 fallbacks 매개변수가 재시도를 자동화하는 방법, 그리고 실제 사용자가 거부 처리를 접하기 전에 테스트하는 방법을 배울 것입니다.

Fable 5가 일부 요청을 재라우팅하는 이유

Claude Fable 5는 들어오는 요청을 심사하는 안전 분류기와 함께 제공됩니다. 이 분류기는 세 가지 도메인을 모니터링합니다: 사이버 보안, 생물학 및 화학, 그리고 모델 증류. 분류기가 작동하면 Fable 5는 요청을 거부합니다. Claude의 소비자 표면에서는 요청이 Claude Opus 4.8에 의해 처리되며 사용자에게 이 사실이 통지됩니다. API에서는 복구는 귀하의 몫이며, 여기서 fallbacks 매개변수가 등장합니다.

분류기는 고정되어 있지 않습니다. 6월 중단 이후, Anthropic은 보고된 탈옥 기법에 대해 분류기를 재훈련했습니다; 업데이트된 버전은 시도의 99% 이상을 차단합니다. Fable 5는 새로운 분류기가 적용되어 2026년 7월 1일에 재배포되었습니다. 중단 기간 동안 통합을 일시 중지했다면, 저희 Fable 5 복귀 허브에서 전체 타임라인과 변경 사항을 확인할 수 있습니다.

여기서 한 가지 더 도움이 되는 맥락이 있습니다. 분류기는 모델 내부에 있는 것이 아니라 모델 앞에 있습니다. Claude Mythos 5는 분류기가 없는 동일한 모델이며, 접근은 Project Glasswing 참가자에게 제한됩니다. Fable 세션의 95% 이상은 전혀 폴백이 없으며, 이러한 세션에서 Fable 5의 성능은 Mythos 5와 실질적으로 동일합니다. Fable 5 vs Mythos 5에서 차이점을 자세히 설명합니다.

재라우팅이 앱에 미치는 영향

Fable 5와 Opus 4.8은 모두 강력한 모델이지만, 엔지니어링 관점에서 서로 대체할 수 없습니다. Fable 5는 1백만 토큰 컨텍스트 창과 최대 128K 출력을 지원하며, 입력 토큰 백만 개당 $10, 출력 토큰 백만 개당 $50의 요금이 부과됩니다. Opus 4.8은 자체 가격 및 동작 프로필을 가집니다. 모델 개요에서 두 모델의 현재 사양을 확인할 수 있습니다. Fable 5에 맞춰 조정된 프롬프트는 Opus 4.8에서 다른 길이, 다른 형식 또는 다른 도구 호출 패턴을 생성할 수 있습니다.

이것이 중요한지는 사용 사례에 따라 다릅니다:

프로그래밍 방식으로 폴백 감지하기

가장 신뢰할 수 있는 신호는 응답의 model 필드입니다. 모든 Messages API 응답은 응답을 생성한 모델의 이름을 명시하므로, claude-fable-5로 전송된 요청이 claude-opus-4-8을 반환했다면 재라우팅된 것입니다. 이는 표준 Messages API 동작이므로, 이를 읽기 위해 베타 기능이 필요하지 않습니다.

두 가지 다른 필드도 같은 로그 라인에 속합니다. stop_reason은 요청이 완전히 거부되었는지 여부를 알려줍니다: 폴백 처리가 없는 거부된 요청은 stop_reason"refusal"로 설정되고 사용할 수 있는 콘텐츠가 없는 HTTP 200을 반환하므로, response.content를 읽기 전에 이를 확인하십시오. 그리고 usage는 비용을 청구한 모델에 할당하는 데 필요한 토큰 수를 제공합니다.

response = client.messages.create(
    model="claude-fable-5",
    max_tokens=16000,
    messages=[{"role": "user", "content": prompt}],
)

if response.stop_reason == "refusal":
    # Declined with no fallback configured: no usable content came back
    handle_refusal(response)
elif not response.model.startswith("claude-fable-5"):
    logger.info(
        "fallback served_by=%s in=%d out=%d",
        response.model,
        response.usage.input_tokens,
        response.usage.output_tokens,
    )

API를 처음부터 연결하는 경우, Claude Fable 5 API 사용 방법에 대한 가이드부터 시작하여 첫 호출이 작동하면 이 확인을 추가하십시오.

fallbacks 매개변수

아무런 폴백 구성이 없으면 거부된 API 요청은 단순히 중지됩니다. 거부 응답을 받고 사용자는 아무것도 얻지 못하며, 재시도 로직은 직접 작성해야 합니다. fallbacks 매개변수는 이러한 재시도를 서버로 옮깁니다: Fable 5가 거부하면, API는 동일한 호출 내에서 지정한 모델로 동일한 요청을 다시 실행하고 해당 모델의 답변을 반환합니다.

이 매개변수는 Claude API 및 AWS의 Claude 플랫폼에서 베타 버전으로 제공되며, Anthropic의 거부 및 폴백 페이지에 문서화되어 있습니다. 베타 헤더를 사용하여 옵트인할 수 있으며, 출시 시점에는 claude-opus-4-8만이 유일하게 지원되는 폴백 대상입니다:

response = client.beta.messages.create(
    model="claude-fable-5",
    max_tokens=16000,
    betas=["server-side-fallback-2026-06-01"],
    fallbacks=[{"model": "claude-opus-4-8"}],
    messages=[{"role": "user", "content": prompt}],
)

print(response.model)  # claude-opus-4-8 if the request was rerouted

청구는 귀하에게 유리하게 작동합니다. 출력이 생성되기 전에 거부된 요청은 전혀 청구되지 않습니다; 복구 시도는 폴백 모델의 자체 요율로 청구됩니다. 감지는 이전과 동일합니다: response.model은 응답을 제공한 모델의 이름을 나타냅니다.

알아두어야 할 몇 가지 제한 사항이 있습니다. 이 매개변수는 Batches API에서는 거부되며, Amazon Bedrock, Google Vertex AI 또는 Microsoft Foundry에서는 사용할 수 없습니다; 이러한 플랫폼에서는 클라이언트 측에서 재시도를 처리해야 합니다. 그리고 폴백 모델도 거부하는 경우, 최종 응답에는 stop_reason: "refusal"이 포함되므로, 폴백을 활성화하더라도 이전 섹션의 거부 분기 처리를 유지해야 합니다.

처리 정책 설계하기

감지와 재시도는 메커니즘입니다. 실제 결정은 폴백이 발생했을 때 제품이 무엇을 할 것인지이며, 세 가지 합리적인 정책이 있습니다:

Opus 답변 수락. 채팅 제품, 어시스턴트, 대부분의 에이전트에 적합합니다. fallbacks를 활성화하고 이벤트를 기록한 다음 진행하십시오. 사용자는 오류 대신 한 번의 왕복으로 답변을 받게 됩니다.

변경된 요청으로 재시도. 모델 일관성이 지연 시간보다 더 중요한 파이프라인에 적합합니다. 동일한 프롬프트를 Fable 5에 다시 보내지 마십시오. 한 번 거부한 분류기는 다시 거부할 것입니다. 트리거에서 벗어나 프롬프트를 다시 작성하거나, 전체 작업을 Opus 4.8로 라우팅하거나, 수동 검토를 위해 대기열에 추가하십시오.

사용자에게 표시. 고객이 Fable 5에 대해 특별히 비용을 지불하는 경우 또는 규정 준수가 공개를 요구하는 경우에 적합합니다. 어떤 모델이 답변했는지 표시하고 사용자에게 다시 실행할지 여부를 결정하게 하십시오.

어떤 정책을 선택하든 폴백 비율을 추적하십시오. 0에 가까운 비율은 플랫폼 전반의 기준선과 일치합니다. 몇 퍼센트를 넘어서는 비율은 프롬프트가 트리거 도메인에 걸린다는 의미이므로, 볼륨이 증가하기 전에 검토할 가치가 있습니다.

프로덕션 전에 거부 경로 테스트하기

폴백 처리는 데모에서는 작동하지만, 거부가 설계상 드물기 때문에 6주 후에는 실패하는 종류의 코드입니다. 실제 사용자가 분류기를 작동시키기를 기다렸다가 로깅, 재시도 및 UI가 모두 올바르게 작동하는지 알아낼 수는 없습니다. 직접 경로를 유발해야 합니다.

Apidog는 이를 실용적으로 만듭니다. Claude Messages 엔드포인트를 한 번 정의하고, API 키를 환경 변수에 보관하며, 소수의 엣지 케이스 프롬프트(분류기 대상에 가까운 보안 및 생명 과학 관련 프롬프트 몇 개와 재라우팅되어서는 안 되는 양성 제어 프롬프트)로 테스트 시나리오를 구축하십시오. 그런 다음 응답 본문에 대해 어설션하십시오. 각 테스트는 model 필드(제어 프롬프트가 claude-fable-5에 머물렀는지? 엣지 케이스가 claude-opus-4-8에서 반환되었는지?)와 stop_reason(어떤 것이 완전히 거부되었는지?)을 확인합니다.

시나리오를 스케줄에 따라 또는 CI에서 실행하십시오. Anthropic이 분류기를 재훈련할 때(7월 1일 재배포 이전에 그랬던 것처럼), 귀하의 테스트 스위트는 엣지 케이스가 처리 코드의 예상대로 여전히 작동하는지 하루 내에 알려줍니다. 이는 Apidog에서 5분 설정으로 해결할 수 있는 일과, 조용한 프로덕션 환경에서의 예상치 못한 문제 사이의 차이입니다.

자주 묻는 질문

fallbacks 매개변수를 사용하면 추가 비용이 드나요? 아니요. 출력을 생성하기 전에 거부된 요청은 청구되지 않습니다. 폴백 모델이 응답하면, 해당 모델의 정상적인 토큰당 요율로 복구 시도에 대해 비용을 지불하게 됩니다. 동일한 답변에 대해 두 번 청구되는 일은 없습니다.

보안 관련 프롬프트가 항상 폴백을 유발하나요? 아니요. 분류기는 사이버 보안, 생물학 및 화학, 모델 증류 분야의 유해한 요청을 대상으로 하며, 해당 주제 자체를 대상으로 하는 것은 아닙니다. 대부분의 보안 엔지니어링 작업은 영향을 받지 않고 통과합니다. 전체 세션의 95% 이상은 폴백이 발생하지 않습니다. 해당 도메인 근처에서 오탐이 발생할 수 있는데, 이것이 바로 경로를 테스트하고 비율을 기록하는 이유입니다.

6월 중단 기간 동안 Fable 5 사용을 중단했습니다. 다시 돌아와도 안전한가요? 예. 7월 1일 재배포를 통해 재훈련된 분류기가 활성화되었으며 API 표면은 변경되지 않았습니다. Fable 5 API로 다시 전환하는 방법에 대한 가이드에서 재활성화 단계를 안내하며, fallbacks 매개변수는 대부분의 팀이 돌아오는 길에 추가하는 부분입니다.

마무리

Fable 5의 재라우팅은 사고가 아니라 설계 결정이므로, 코드에서 그렇게 취급하십시오. 모든 호출에서 response.model을 확인하고, 폴백이 활성화되어 있어도 거부 분기를 유지하며, 특별한 이유가 없다면 fallbacks 매개변수를 선택하고, Opus 4.8이 답변할 때 제품이 수행할 정책을 선택하십시오. 그런 다음 전체 경로가 작동하는지 증명하십시오: Apidog에서 엣지 케이스 스위트를 구축하고, modelstop_reason에 대해 어설션하며, 스케줄에 따라 실행하십시오. Apidog를 다운로드하면 다음 배포 전에 거부 스위트를 실행할 수 있습니다.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요