← 전체 글
Guide

작업과 예산에 맞춰 Claude Fable 5, Opus 4.8, Sonnet 4.6 라우팅하기

A cream-background editorial illustration of three Claude model lanes labeled by abstract icons: a small fast lane, a ba

Anthropic은 프런티어급 자율성에 분명한 가격표를 붙였다. Claude API 기준 Claude Fable 5는 입력 토큰 100만 개당 $10, 출력 토큰 100만 개당 $50이고, Sonnet 4.6은 $3/$15, Opus 4.8은 $5/$25다 (Fable, Sonnet, Opus). 이 가격 차이가 곧 제품 의사결정의 전부다.

모든 코딩 프롬프트를 Fable로 보내고 있다면, 그건 “프런티어”답게 운영하는 게 아니다. 아키텍처를 건너뛰고 있는 것이다.

2026년 6월 16일 현재, 가용성 이슈도 하나 있다. Anthropic의 Fable 페이지는 Fable 5가 현재 사용할 수 없다고 표시하고 있으며, Anthropic은 Fable 5와 Mythos 5를 대상으로 한 미국 정부 지침 이후 6월 12일에 접근을 중단했다고 밝혔다 (Anthropic statement). 그렇다고 라우팅 계층의 쓸모가 줄어드는 건 아니다. 오히려 더 급해진다. 엔지니어를 깨우지 않고도 앱이 Fable에서 Opus나 Sonnet으로 자연스럽게 강등할 줄 알아야 한다.

이 가이드는 그 계층을 만든다. 기본은 Sonnet, 리스크 큰 프로덕션 작업은 Opus, Fable은 올바른 결과의 가치가 토큰 비용을 이기는 장기 실행 에이전트 작업에만 쓴다.

Sonnet 4.6, Opus 4.8, Fable 5를 위한 세 개의 세로 막대와 y축이 있는 커버 스타일 가격 및 성능 비교 차트

라우팅 규칙: Fable은 기본값이 아니라 전문가다

먼저 거칠고 명확한 표부터 보자.

ModelAPI model IDInput / output priceUse it for
Claude Sonnet 4.6claude-sonnet-4-6100만 토큰당 $3 / $15일상적인 코딩, 리뷰, 지원, 추출, 대부분의 에이전트
Claude Opus 4.8claude-opus-4-8100만 토큰당 $5 / $25프로덕션급 코드, 복잡한 리뷰, 판단이 필요한 에이전트 단계
Claude Fable 5claude-fable-5100만 토큰당 $10 / $50실제 업사이드가 있는 장기 실행 고가치 에이전트 작업

Anthropic의 자체 포지셔닝도 이 구분과 잘 맞는다. Sonnet 4.6은 코딩, 에이전트, 전문 워크플로에 쓰는 다재다능한 일상 모델로 소개되며, 현재 API 베타에서 100만 토큰 컨텍스트 창을 제공한다 (Anthropic Sonnet). Opus 4.8은 진지한 코딩, 에이전트형 워크플로, 고위험 엔터프라이즈 작업을 위한 모델로 자리 잡고 있다 (Anthropic Opus). Fable 5는 단계별 계획, 위임, 자체 검증이 가능한 야심 찬 장기 프로젝트와 에이전트를 위한 Mythos급 모델로 설명된다 (Anthropic Fable).

그러면 정책은 깔끔해진다.

  1. 기본은 Sonnet으로 둔다. 대부분의 프롬프트는 출력 $50/M 모델을 쓸 만큼 중요하지 않다.
  2. 실패 비용이 비쌀 때 Opus로 올린다. 스키마 마이그레이션, 보안 민감 PR 리뷰, 재무 분석, 멀티 파일 리팩터링을 떠올리면 된다.
  3. 작업이 크고, 모호하고, 더 큰 비용을 감당할 가치가 있을 때만 Fable을 쓴다. 며칠짜리 에이전트 실행, 코드베이스 현대화, 깊은 리서치 패키지, “이 프로젝트를 끝까지 가져가라”류의 워크플로가 여기에 들어간다.

커뮤니티 논쟁은 대부분 세 번째 묶음에 집중되어 있다. Anthropic의 6월 12일 접근 중단에 대한 HN 스레드는 인덱싱된 HN 요약 기준 댓글이 천 개를 넘었고, 논의는 빠르게 안전성, 지정학, 그리고 이런 가격에서 에이전트 사용을 감당할 수 있는지로 갈라졌다 (HN thread, recap reference). Reddit 스레드는 더 직설적이었다. 개발자들은 토큰을 많이 먹는 Claude Code 세션, 구독 허용량, $50/M 출력 가격이 Fable을 엔터프라이즈 전용 영역으로 밀어 넣는지에 대해 불만을 쏟아냈다 (ClaudeCode discussion, ChatGPT subreddit discussion).

대부분의 스레드에서 빠진 실용적인 답은 이거다. 하나의 전역 “최고 모델”을 두고 싸우지 말고, 기대 가치에 따라 라우팅하라.

Step 1: OneHop을 드롭인 접근 계층으로 쓴다

가장 짧은 경로를 원한다면 OneHop을 provider 계층으로 쓰고 앱 코드는 provider 중립적으로 유지하라. OneHop의 Fable 페이지는 anthropic/claude-fable-5를 표시하고, 공식 가격과 OneHop 가격을 나란히 보여주며, 신규 계정은 카드 없이 $10 무료 크레딧을 받는다고 안내한다 (OneHop Fable 5). 현재 페이지는 https://api.onehop.ai/anthropic에서 Anthropic Messages 지원을 제공한다고 되어 있다. Anthropic SDK에는 이 주소를 쓰면 된다.

SDK를 설치한다.

pip install anthropic
export ONEHOP_API_KEY="your_key_here"

최소 호출 예시는 이렇다.

from anthropic import Anthropic

client = Anthropic(
    api_key=os.environ["ONEHOP_API_KEY"],
    base_url="https://api.onehop.ai/anthropic",
)

message = client.messages.create(
    model="anthropic/claude-fable-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Plan a safe Rails 6 to Rails 8 migration."}],
)

print(message.content[0].text)

여기가 통합 지점이다. 라우팅 계층은 그 위에 있어야 하며, 어떤 모델 문자열을 보낼지 결정해야 한다.

여기서 OneHop의 가치는 좋은 의미로 지루하다. 계정 하나, 명확한 모델 페이지, 그리고 애플리케이션을 다시 쓰는 대신 base URL만 바꾸면 된다. Fable이 일시 중단되거나 사용할 수 없더라도 같은 라우터가 고급 작업을 Opus로 보내 제품을 계속 살릴 수 있다.

접근과 크레딧만 빠르게 원한다면 여기서 시작하라. Claude Fable 5 on OneHop을 열고, 이어서 $10 무료로 시작하면 된다.

Step 2: 예산 인지 라우터를 만든다

바로 실행할 수 있는 간결한 Python 라우터다. 요청 비용을 추정하고, 호출당 상한을 적용하고, Fable을 사용할 수 없을 때 폴백하며, 기본값은 Sonnet으로 유지한다.

import os
from dataclasses import dataclass
from anthropic import Anthropic, APIError, RateLimitError

PRICES = {
    "sonnet": {"model": "claude-sonnet-4-6", "in": 3.00, "out": 15.00},
    "opus": {"model": "claude-opus-4-8", "in": 5.00, "out": 25.00},
    "fable": {"model": "anthropic/claude-fable-5", "in": 10.00, "out": 50.00},
}

@dataclass
class Task:
    kind: str
    prompt: str
    max_output_tokens: int = 2000
    budget_usd: float = 0.25
    high_value: bool = False
    long_running: bool = False
    production_risk: bool = False

def rough_tokens(text: str) -> int:
    return max(1, len(text) // 4)

def estimate_cost_usd(model_key: str, input_tokens: int, output_tokens: int) -> float:
    price = PRICES[model_key]
    return (input_tokens / 1_000_000 * price["in"]) + (output_tokens / 1_000_000 * price["out"])

def choose_model(task: Task) -> str:
    if task.high_value and task.long_running:
        return "fable"
    if task.production_risk or task.kind in {"migration", "security_review", "architecture"}:
        return "opus"
    return "sonnet"

def route_with_budget(task: Task) -> list[str]:
    first = choose_model(task)
    fallbacks = {
        "fable": ["fable", "opus", "sonnet"],
        "opus": ["opus", "sonnet"],
        "sonnet": ["sonnet"],
    }[first]

    input_tokens = rough_tokens(task.prompt)
    return [
        key for key in fallbacks
        if estimate_cost_usd(key, input_tokens, task.max_output_tokens) <= task.budget_usd
    ] or ["sonnet"]

def run(task: Task) -> str:
    client = Anthropic(
        api_key=os.environ["ONEHOP_API_KEY"],
        base_url="https://api.onehop.ai/anthropic",
    )

    last_error = None
    for key in route_with_budget(task):
        try:
            response = client.messages.create(
                model=PRICES[key]["model"],
                max_tokens=task.max_output_tokens,
                messages=[{"role": "user", "content": task.prompt}],
            )
            return response.content[0].text
        except (APIError, RateLimitError) as exc:
            last_error = exc
            continue

    raise RuntimeError(f"All model routes failed: {last_error}")

if __name__ == "__main__":
    task = Task(
        kind="migration",
        prompt="Create a step-by-step plan to migrate a 200k-line Django app from 3.2 to 5.x.",
        max_output_tokens=3000,
        budget_usd=0.20,
        production_risk=True,
    )
    print(run(task))

중요한 건 토큰 추정기가 아니다. 정책 경계다. 코드베이스 어딘가에 제품이 이렇게 말하는 지점이 필요하다. “이 작업은 결과가 중요하므로 더 많이 써도 된다.”

앱 요청이 라우터로 들어간 뒤 task type, es라고 표시된 정책 검사를 통과하는 아키텍처 흐름 스케치

Step 3: 실제 에이전트 행동에 맞는 상한을 추가한다

에이전트 비용은 튄다. 채팅 completion은 가격을 매기기 쉽다. 코딩 에이전트는 파일을 살펴보고, 도구를 호출하고, 다시 쓰고, 테스트하고, 재시도하고, 요약할 수 있다. 한 Reddit 스레드는 Fable 실행 하나가 한 시간에 수백만 토큰을 태웠다고 주장했다. 일화로 받아들이면 되지만, 패턴 자체는 충분히 현실적이다. 장기 목표를 가진 에이전트는 루프를 통해 토큰 사용량을 증폭시킨다 (Reddit).

상한은 세 가지를 둔다.

  • 호출당 상한: 추정 비용이 요청 예산을 넘으면 거부하거나 더 낮은 모델로 내린다.
  • 작업당 상한: 개별 호출이 유효하더라도 달러 한도에 도달하면 에이전트를 멈춘다.
  • 사용자 또는 워크스페이스당 상한: 한 팀이 공유 계정을 태워버리지 못하게 막는다.

프로덕션에서는 workspace_id, task_id, model을 키로 하는 데이터베이스 테이블에 지출을 저장하라. 벤더 대시보드에만 기대지 마라. 그것들은 청구 대조용이지, 실시간 제품 제어용이 아니다.

또한 prompt caching을 적극적으로 써라. Anthropic은 Fable이 prompt caching에 대해 기존 90% 입력 토큰 할인을 유지한다고 말하며, Sonnet과 Opus 페이지도 prompt caching으로 최대 90% 절감이 가능하다고 안내한다 (Fable, Sonnet, Opus). 안정적인 부분을 캐시하라. repo map, 코딩 표준, API 문서, 스키마 요약, 긴 제품 스펙이 여기에 해당한다. 변동성이 큰 사용자 지시는 캐시하지 마라.

좋은 라우팅 계층은 모든 호출에 대해 이런 필드를 로그로 남겨야 한다.

{
  "task_kind": "migration",
  "chosen_model": "opus",
  "fallback_from": "fable",
  "estimated_cost_usd": 0.18,
  "budget_usd": 0.20,
  "input_tokens": 12000,
  "max_output_tokens": 3000
}

이 로그가 있어야 CFO, 스태프 엔지니어, 그리고 에이전트가 왜 멈췄는지 묻는 사용자에게 답할 수 있다.

Step 4: 폴백을 제품 동작으로 취급한다

Fable에는 대비해야 할 폴백이 두 종류 있다.

첫 번째는 일반적인 인프라 폴백이다. 모델 사용 불가, rate limit, timeout, provider 이슈 같은 것들이다. 현재 Fable 상태는 이게 왜 중요한지 증명한다. Anthropic은 6월 12일 지침이 다른 모델 접근에는 영향을 주지 않았다고 밝혔다 (Anthropic). 그러니 좋은 앱은 Opus나 Sonnet을 통해 계속 작동해야 한다.

두 번째는 안전성 폴백이다. Anthropic은 Fable이 일부 플래그된 사이버보안 및 생물학 요청을 Opus 4.8로 라우팅하며, 재라우팅된 요청에는 Fable 가격을 청구하지 않는다고 말한다 (Anthropic Fable). 출시 글은 이런 안전장치가 평균적으로 세션의 5% 미만에서 작동하며, 일부 오탐이 예상된다고 설명한다 (Anthropic launch).

이 사실을 사용자에게 숨기지 마라. 보안 리뷰 제품이 Fable을 요청했는데 Opus 동작을 받았다면, UI는 대략 이렇게 말해야 한다.

“이 요청은 플래그된 부분에 대해 더 안전한 폴백 경로를 사용했습니다. 결과가 덜 exhaustive할 수 있습니다. 예산 영향은 조정되었습니다.”

모든 답변이 같은 모델에서 나온 척하는 것보다 낫다. eval도 보호한다. Fable을 벤치마크하는데 테스트 세트의 절반이 폴백을 트리거한다면, 당신은 모델만큼이나 classifier 경로를 측정하고 있는 것이다.

불투명한 모델 선택기와 선택된 mod를 보여주는 투명한 라우팅 상태 패널을 비교하는 전후 UI 목업

이번 주에 출시할 것

Fable feature flag를 출시하기 전에 라우터부터 출시하라.

대부분의 개발자 제품에서 내가 추천하는 기본값은 단순하다.

  • 코드 설명, 작은 수정, 테스트, 문서: Sonnet 4.6.
  • PR 리뷰, 프로덕션 버그, 아키텍처 선택: Opus 4.8.
  • 명확한 비즈니스 보상이 있는 수시간 또는 수일짜리 에이전트 작업: 사용 가능할 때 Fable 5, 그리고 Opus 폴백.
  • 범위가 정해지지 않은 모든 것: 사용자가 예산을 설정하기 전까지 Fable 금지.
  • 많은 사용자에게 반복되는 모든 것: 긴 컨텍스트를 캐시하거나 배치 처리.

핵심은 최상위 모델을 숭배하는 게 아니다. 결과를 바꾸는 곳에 프런티어 토큰을 쓰는 것이다.

Fable 5는 이번 주 HN에서 사람들이 논쟁하는 모델일 수 있다. 그래도 대부분의 프로덕션 트래픽은 여전히 Sonnet에서 시작해야 한다. Opus는 신뢰할 수 있는 중간 지점이다. 이기는 구현은 하드 캡, 정직한 폴백, 그리고 품질과 비용을 모두 디버깅할 수 있을 만큼 좋은 로그를 갖춘 지루한 라우터다.

설정을 가장 빠르게 테스트하고 싶다면 Claude Fable 5 on OneHop을 열고 계정을 만든 뒤 $10 무료로 시작하라. 그런 다음 위 라우터를 제품 전체가 아니라 하나의 워크플로에만 연결하라. accepted result당 비용을 측정하라. 그 숫자가 출시 주간 벤치마크보다 훨씬 중요하다.