왜 지금 봐야 하나
2026년 6월 9일, Anthropic이 Claude Fable 5를 공개했다. "Claude Opus 위에 새로운 최상위 모델"이라는 말은 벤치마크 홍보처럼 들리지만, API를 직접 다루는 엔지니어에게는 구체적인 결과를 낳는다. Fable 5는 Opus 4.8과 파라미터 호환이 일부 깨진다. 코드를 바꾸지 않고 모델 ID만 교체하면 400 에러가 날 수 있고, 조용히 행동이 달라질 수 있다.
변화의 핵심은 세 가지다.
- Adaptive thinking이 항상 켜진다 —
thinking필드를 지정하지 않아도 추론이 동작한다. - Safety classifier가 추가됐다 — 일부 요청이 HTTP 200으로 거부된다(
stop_reason: "refusal"). - 30일 데이터 보존이 필수다 — Zero Data Retention 설정과 충돌한다.
Opus 4.8에서 위 세 가지에 해당하는 코드를 쓰고 있다면, Fable 5 전환 전에 확인이 필요하다.
모델 위치와 스펙
Anthropic은 기존의 Haiku → Sonnet → Opus 계층 위에 Fable/Mythos 계층을 신설했다. Fable 5는 이 새 계층에서 광범위하게 출시된 모델이고, Mythos 5는 동일한 성능을 가지되 Safety classifier가 없는 버전으로 Project Glasswing을 통해 승인된 고객에게만 제공된다.
| 항목 | Claude Opus 4.8 | Claude Fable 5 |
|---|---|---|
| API 모델 ID | claude-opus-4-8 | claude-fable-5 |
| 컨텍스트 창 | 200K | 1M |
| 최대 출력 | 128K | 128K |
| Adaptive thinking 기본 | 비활성 | 활성 |
thinking: {type: "disabled"} | 지원 | 400 에러 |
| Safety classifier | 없음 | 있음 |
| 원시 CoT 반환 | 가능 | 불가 |
| 데이터 보존 | ZDR 가능 | 30일 필수 |
| 가격 (입/출력 per 1M) | $5 / $25 | $10 / $50 |
| Prompt cache 최소 토큰 | 1,024 | 512 |
파괴적 변경 1: Adaptive thinking 자동 활성
무엇이 달라졌나
Opus 4.8에서 thinking 필드를 생략하면 추론 없이 바로 응답을 생성한다. Fable 5에서 같은 요청을 보내면 Adaptive thinking이 자동으로 활성화된다. 이는 두 가지 결과를 낳는다.
max_tokens초과: thinking 토큰이 응답 토큰과 같은 한도를 공유한다. Opus 4.8에서 출력 길이에 맞게 설정한max_tokens값이 Fable 5에서는 too small일 수 있다.- 지연 증가: 응답 전에 내부 추론이 실행되므로 TTFT(Time to First Token)가 늘어난다.
# Opus 4.8 — thinking 없이 실행
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[{"role": "user", "content": "..."}]
)
# → 추론 없이 즉시 답변
# Fable 5 — 동일 코드, 다른 동작
response = client.messages.create(
model="claude-fable-5",
max_tokens=4096, # thinking 토큰이 이 한도를 소모
messages=[{"role": "user", "content": "..."}]
)
# → Adaptive thinking 활성, 출력 잘릴 수 있음thinking: {type: "disabled"} 는 지원되지 않는다
Opus 4.8에서 사용하던 thinking 비활성 코드는 Fable 5에서 400 에러를 반환한다.
# ❌ Fable 5에서 400 에러
client.messages.create(
model="claude-fable-5",
thinking={"type": "disabled"}, # 지원하지 않음
messages=[...]
)마이그레이션
thinking 필드를 제거하고 max_tokens를 늘린다. 추론 깊이는 output_config.effort로 조절한다.
# ✅ Fable 5 권장 패턴
response = client.messages.create(
model="claude-fable-5",
max_tokens=20000, # thinking 토큰 여유 확보
output_config={"effort": "high"}, # 기본값, 생략 가능
messages=[{"role": "user", "content": "..."}]
)effort 파라미터: 비용과 깊이의 트레이드오프
Fable 5에서 추론 깊이를 제어하는 주된 수단은 output_config.effort다. budget_tokens처럼 직접 토큰 수를 지정하는 방식이 아니라, 행동 신호(behavioral signal)에 가깝다.
Fable 5 권장 시작점: high(기본). 이전 모델의 xhigh보다 높은 성능이 나오므로, 처음부터 max로 올릴 필요가 없다. 작업이 충분히 완료되는데 지연이 길다면 medium으로 낮추고 측정한다.
# effort 명시 예
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-fable-5",
max_tokens=32000,
output_config={"effort": "xhigh"}, # 장기 에이전트 루프
messages=[{"role": "user", "content": "..."}]
)파괴적 변경 2: Safety classifier와 Refusal 처리
왜 이게 파괴적인가
기존 코드에서 stop_reason == "end_turn" 이나 stop_reason == "max_tokens" 만 처리하던 경우, Fable 5에서 거부된 요청은 조용히 빈 응답을 낼 수 있다.
Fable 5는 특정 카테고리의 요청(예: 사이버보안 공격 코드, 생물학적 위험 정보)을 Safety classifier가 감지하면 HTTP 200으로 거부를 반환한다. 에러가 아니므로 SDK 예외가 발생하지 않는다.
response = client.messages.create(
model="claude-fable-5",
messages=[{"role": "user", "content": "..."}]
)
# ✅ 올바른 처리
if response.stop_reason == "refusal":
category = response.stop_details.category
# 카테고리 예: "cyber", "bio", "reasoning_extraction"
handle_refusal(category)
elif response.stop_reason == "end_turn":
process_response(response.content)Fallback 처리
거부된 요청을 다른 모델로 재시도할 때, Anthropic은 세 가지 방법을 제공한다.
① 서버 측 Fallback (beta): fallbacks 파라미터로 API가 자동 재시도.
response = client.messages.create(
model="claude-fable-5",
fallbacks=[{"model": "claude-opus-4-8"}],
messages=[...]
)
# Fable 5가 거부하면 Opus 4.8로 자동 재시도② 클라이언트 측 Fallback: SDK 미들웨어 활용.
③ 수동 처리: stop_reason == "refusal" 감지 후 별도 요청.
과금 규칙
- 출력 생성 전에 거부된 요청: 입력 토큰 비용 청구되지 않음.
- Fallback 재시도 시: 첫 요청에서 캐시된 프롬프트 비용이
fallback_credit으로 환급되므로 같은 프롬프트에 두 번 비용이 들지 않는다.
파괴적 변경 3: 30일 데이터 보존 의무
Fable 5와 Mythos 5는 30일 데이터 보존(data retention)이 필수다. Zero Data Retention(ZDR) 계약을 가진 조직에서 Fable 5를 호출하면 400 invalid_request_error가 반환된다.
영향 범위: 금융, 의료, 법률 등 고객 계약에 ZDR 조항이 있는 기업. 해당 조직은 Anthropic 계정 팀에 데이터 보존 조건을 확인해야 한다.
Raw CoT가 반환되지 않는다
Fable 5에서 thinking 블록은 원시 사고 과정을 포함하지 않는다. thinking.display로 제어한다.
thinking.display 값 | 반환 내용 |
|---|---|
"omitted" (기본) | thinking 블록, thinking 필드가 빈 문자열 |
"summarized" | thinking 블록, 사람이 읽을 수 있는 요약 텍스트 |
# thinking 요약 수신 (디버깅, UI 표시용)
response = client.messages.create(
model="claude-fable-5",
max_tokens=16000,
thinking={"display": "summarized"},
messages=[...]
)
for block in response.content:
if block.type == "thinking":
print("추론 요약:", block.thinking) # 요약 텍스트
elif block.type == "text":
print("응답:", block.text)멀티턴 대화 주의: thinking 블록을 다음 요청의 messages에 포함할 때, 내용을 수정하지 않고 그대로 전달해야 한다. Fable 5의 thinking 블록을 다른 모델(Opus 4.8 등)로 전달하는 경우에는 thinking 블록을 제거해야 한다.
비용 재계산
Fable 5는 Opus 4.8 대비 토큰 단가가 2배다.
| 항목 | Opus 4.8 | Fable 5 |
|---|---|---|
| 입력 (per 1M) | $5 | $10 |
| 출력 (per 1M) | $25 | $50 |
| Prompt Cache 최소 | 1,024 토큰 | 512 토큰 |
| Batch API 할인 | 50% | 50% |
Adaptive thinking이 기본 활성이므로, 같은 요청이라도 thinking 토큰이 추가로 발생한다. 실제 비용 증가는 요청 복잡도와 effort 수준에 따라 다르므로, 주요 프롬프트로 실측해야 한다.
Prompt Cache 기준 완화: 512 토큰부터 캐시 가능해졌으므로, 짧은 시스템 프롬프트도 캐시를 적용해 입력 비용을 줄일 수 있다.
지원되는 기능
Fable 5 출시 시 지원되는 기능 목록이다.
| 기능 | 비고 |
|---|---|
output_config.effort | low / medium / high / xhigh / max |
| Task budgets | beta: task-budgets-2026-03-13 헤더 필요 |
| Memory tool | — |
| Code execution tool | — |
| Programmatic tool calling | — |
| Context editing (tool result clearing) | beta: context-management-2025-06-27 헤더 필요 |
| Compaction | — |
| Vision | — |
Task budgets는 에이전트 루프 전체에 토큰 예산을 설정해 Fable 5가 스스로 조절하도록 돕는 기능이다. 장기 실행 에이전트에서 xhigh나 max를 쓸 때 함께 사용하면 효과적이다.
Opus 4.8에서 Fable 5로 마이그레이션 체크리스트
1단계: 코드 변경 확인
- [ ]
model="claude-opus-4-8"→"claude-fable-5"교체 - [ ]
thinking={"type": "disabled"}제거 (Fable 5 미지원, 400 에러) - [ ]
thinking={"type": "enabled", "budget_tokens": N}제거 (400 에러) - [ ]
thinking={"type": "adaptive"}제거 (필드 없어도 자동 활성) - [ ]
stop_reason == "refusal"처리 코드 추가 - [ ]
response.stop_details.category로 거부 카테고리 확인
2단계: 용량·비용 재검토
- [ ]
max_tokens값 증가 (thinking 토큰 포함 여유 필요, ×1.3~2 권장) - [ ] effort 시작 수준 검토 (
high기본,xhigh이상은 측정 후 결정) - [ ] Prompt Cache 적용 범위 확대 (512 토큰까지 낮아짐)
- [ ] 월 비용 예산 재산정 (단가 2배, thinking 토큰 추가)
3단계: 조직 조건 확인
- [ ] ZDR 계약 여부 확인 (해당 시 Fable 5 사용 불가)
- [ ] Fallback 모델 설정 (거부 시 Opus 4.8로 재시도 여부 결정)
- [ ] 스테이징에서 실제 응답 품질·지연 측정
한 줄 결론
Claude Fable 5는 "Opus보다 위" 라는 위치를 코드 레벨에서 세 개의 변화로 구체화한다 — Adaptive thinking 자동 활성, Safety classifier 거부 처리, 30일 데이터 보존 의무. 이 세 가지를 확인하지 않고 모델 ID만 바꾸면 400 에러나 조용한 동작 변화가 기다리고 있다.
References
- Anthropic 공식 문서 — Introducing Claude Fable 5 and Claude Mythos 5: https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5
- Anthropic 공식 문서 — Migrating from Claude Opus 4.8 to Claude Fable 5: https://platform.claude.com/docs/en/about-claude/models/migration-guide
- Anthropic 공식 문서 — Effort parameter: https://platform.claude.com/docs/en/build-with-claude/effort
- Anthropic 공식 문서 — Refusals and fallback: https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback
- Anthropic 공식 문서 — Adaptive thinking and cost: https://platform.claude.com/docs/en/build-with-claude/thinking-steering-and-cost
- Anthropic 공식 문서 — Task budgets: https://platform.claude.com/docs/en/build-with-claude/task-budgets
- Claude Fable 5 소개 — Build Fast With AI: https://www.buildfastwithai.com/blogs/claude-fable-5-review-price-benchmarks-api
- Claude Fable 5 API 마이그레이션 실전 패턴 — Developers Digest: https://www.developersdigest.tech/blog/fable-5-api-production-patterns-rate-limits