DEV Community

Cover image for Claude Opus 5 vs Claude Fable 5: 7개 실제 API 테스트와 프로덕션 라우팅 제안
Jenny Met
Jenny Met

Posted on • Originally published at crazyrouter.com

Claude Opus 5 vs Claude Fable 5: 7개 실제 API 테스트와 프로덕션 라우팅 제안

Claude Opus 5 vs Claude Fable 5: 7개 실제 API 테스트와 프로덕션 라우팅 제안

Claude Opus 5와 Claude Fable 5의 실제 API 비교

Claude Opus 5와 Claude Fable 5, 둘 중 무엇을 골라야 할까요? 한 번의 성공 응답만 보면 두 모델 모두 아주 멋진 수학 유도까지 잘해냅니다. 하지만 실제 프로덕션 경험을 좌우하는 건 대개 다른 세 가지입니다. 작업을 안정적으로 끝까지 전달할 수 있는지, 지연 시간이 상호작용에 적합한지, 실패 후 자동 복구가 가능한지입니다.

우리는 2026년 7월 25일, 동일한 OpenAI-compatible API를 통해 같은 프롬프트와 같은 파라미터로 두 모델에 대해 7종류의 작업을 테스트했습니다. 결과는 “더 큰 모델이 무조건 더 좋다”는 단순한 서사로는 설명되지 않았습니다.

  • claude-fable-5는 공통 성공 작업에서 더 빠르고 더 간결했습니다.
  • claude-opus-5는 최종적으로 7개 작업 전부를 커버했습니다.
  • Fable 5는 일반 코드 리뷰와 사고 JSON 프롬프트에서 연속으로 content_filter를 트리거했습니다.
  • Opus 5는 물리 문제에서 처음 두 번 HTTP 200을 반환했지만, 실제로는 인사말 한 줄만 답했고, 3번째 시도에서야 정상 완료했습니다.

즉, 프로덕션에서의 선택 기준은 모델 ID 하나로 끝나면 안 됩니다. 더 안정적인 방식은 작업 유형별로 주 모델을 정하고, 그 위에 콘텐츠 검증, 재시도, 모델 폴백을 덧씌워 이상 케이스를 감싸는 것입니다.

같은 API로 Opus 5와 Fable 5를 테스트하기

빠른 결론

질문 이번 테스트의 답
어떤 모델이 더 많은 작업을 커버했나? Opus 5: 본 테스트 6/7, 재시도 후 7/7
어떤 모델이 더 빠른가? 공통 성공 작업에서 Fable 5의 P50 총 지연이 약 24% 낮음
어떤 모델이 더 간결한가? Fable 5, 평균 가시 출력 token이 약 43% 적음
어떤 모델이 코드 리뷰와 엄격한 JSON에 더 적합한가? 이번에는 Opus 5가 더 안정적; Fable 5는 두 문제에서 연속 3회 필터링됨
HTTP 200만 보면 되는가? 안 된다; 두 모델 모두 HTTP 200이지만 작업이 전달되지 않은 사례가 있었다
라우팅은 어떻게 하는 것이 좋은가? 검증된 작업은 Fable 5 우선, 필터링 또는 빈 본문이면 Opus 5로 회귀; Opus의 이상 인사말은 자동 재시도

입력 유형이 예측 불가능하거나, 일반 비즈니스 프롬프트가 필터링되는 일을 최대한 피해야 한다면 Opus 5를 우선 고려하세요. 반대로 작업 구조가 고정돼 있고 이미 회귀 테스트를 마쳤으며, 상호작용 속도와 출력 길이가 더 중요하다면 Fable 5가 첫 번째 선택으로 더 적합합니다.

테스트 방법

테스트 전에 모델 목록 API를 호출해, 두 개의 정확한 모델 ID가 모두 보이는지 확인했습니다.

GET https://cn.crazyrouter.com/v1/models

claude-opus-5
claude-fable-5
Enter fullscreen mode Exit fullscreen mode

모든 정식 요청은 동일한 endpoint로 보냈습니다.

POST https://cn.crazyrouter.com/v1/chat/completions
Enter fullscreen mode Exit fullscreen mode

공통 조건은 다음과 같습니다.

동일한 system prompt
동일한 user prompt
temperature = 1
각 문제에 동일한 max_tokens 사용
stream = true
도구 및 인터넷 사용 비활성화
Enter fullscreen mode Exit fullscreen mode

통일된 system prompt는 정확한 응답과 출력 형식 준수만 요구했고, 어느 모델에도 유리한 역할 설정은 넣지 않았습니다.

Answer the user's task accurately. Follow every requested output format and length constraint exactly. Do not use external tools.
Enter fullscreen mode Exit fullscreen mode

우리가 기록한 것은 최종 텍스트만이 아닙니다. 다음도 함께 기록했습니다.

  • HTTP 상태와 finish_reason
  • response ID와 반환된 model
  • 첫 번째 가시 token 시점과 총 지연 시간
  • completion tokens, reasoning tokens
  • 가시 응답이 작업 검증을 통과했는지 여부
  • 비정상 요청이 같은 파라미터로 재시도 시 복구되는지 여부

이 테스트는 특정 상위 채널 하나를 지정한 실험이 아니라, Crazyrouter 게이트웨이의 end-to-end 테스트입니다. 따라서 결과는 모델 동작뿐 아니라 상위 필터링, 게이트웨이 라우팅, 당시 채널 상태까지 함께 반영합니다. 즉, “사용자가 이 API를 통해 실제로 무엇을 겪게 되는가”를 답하는 데 적합하고, Claude 계열의 순수 오프라인 능력 순위표로 포장하기에는 적절하지 않습니다.

모델 테스트에서 왜 finish_reason과 출력 예산을 기록해야 하는지 궁금하다면, Claude Fable 5 vs GPT-5.5의 max_tokens 재검증도 함께 보세요.

7개 결과 총표

Claude Opus 5와 Claude Fable 5의 7개 작업 결과 매트릭스

테스트 항목 Claude Opus 5 Claude Fable 5 프로덕션 영향
정확한 수학: 마르코프 체인 통과 통과 두 모델 모두 1차 모멘트, 2차 모멘트, 분산을 정확히 도출
수치 물리: 결합 진동자 처음 두 번은 인사말만, 3번째에 통과 1차 호출에 통과 Opus는 콘텐츠 수준 검증과 재시도가 필요
제약 탐색 통과 통과 두 모델 모두 유일해를 찾음
통계적 오류 수정 통과 통과 두 모델 모두 잘못된 전제를 거부하고 올바른 상한을 제시
Python 코드 리뷰 통과 연속 3회 content_filter Fable은 현재 회귀 테스트 없이 코드 리뷰 트래픽에 적합하지 않음
엄격한 JSON 사고 요약 통과 연속 3회 content_filter Fable은 현재 이런 유형의 운영 사고 텍스트에 적합하지 않음
실험 설계 통과 통과 두 모델 모두 비짝지어진 샘플과 난이도 혼합을 식별 가능

주 테스트의 1회 전달률은 다음과 같습니다.

Claude Opus 5: 6 / 7 = 85.7%
Claude Fable 5: 5 / 7 = 71.4%
Enter fullscreen mode Exit fullscreen mode

재시도를 포함하면:

Claude Opus 5: 7 / 7
Claude Fable 5: 5 / 7
Enter fullscreen mode Exit fullscreen mode

여기서 “전달”은 요청 성공이 아니라, 비즈니스가 문제 요구사항에 맞는 가시 응답을 받는다는 뜻입니다. HTTP 200, 모델명, token usage가 존재하더라도, 본문이 비어 있거나 필터링되었거나 인사말만 돌아오면 여전히 작업 실패입니다.

수학, 제약, 통계: 두 모델 모두 신뢰할 수 있음

수학 문제는 3상태 마르코프 체인을 사용해, 상태 1에서 상태 3에 처음 도달할 때까지의 대기 시간을 계산하도록 요구했습니다.

E1[τ]
E1[τ²]
Var1(τ)
Enter fullscreen mode Exit fullscreen mode

두 모델 모두 다음 값을 제시했습니다.

E1[τ] = 5
E1[τ²] = 43
Var1(τ) = 18
Enter fullscreen mode Exit fullscreen mode

또한 둘 다 transient matrix Q와 1차, 2차 모멘트 방정식을 제시했습니다. 이 문제에서는 “최종 숫자는 맞지만 유도는 서로 다르다” 같은 일도 없었습니다.

제약 탐색 문제는 A, B, C, D, E 다섯 개 발표를 다섯 개 시간대에 배치하되, 즉시 인접, 선후 관계, 간격, 비인접 조건을 모두 만족시키도록 요구했습니다. 두 모델 모두 다음의 유일한 순서를 찾았습니다.

A, C, E, B, D
Enter fullscreen mode Exit fullscreen mode

통계 오류 수정 문제는 일부러 잘못된 결론을 제시했습니다. “평균이 10이고 분산이 4이므로 P(X≥14)=0.5”라는 주장입니다. 두 모델 모두 2차 모멘트만으로는 꼬리 확률을 유일하게 정할 수 없다고 지적했고, 단측 Chebyshev/Cantelli 부등식을 통해 다음을 도출했습니다.

P(X >= 14) <= 0.2
Enter fullscreen mode Exit fullscreen mode

이 세 가지 작업은 Fable 5의 속도 우위가 기초 추론 정확성을 희생해서 얻어진 것이 아님을 보여줍니다. 명확하고 짧고 검증 가능한 수학·논리 작업에서는 Fable 5를 더 가벼운 첫 번째 hop으로 써도 충분합니다.

이전의 Claude Fable 5 vs Claude Sonnet 5 API 테스트GLM-5.2 vs Fable 5 출력 예산 테스트도, 어떤 모델이 프로덕션에 적합한지 판단하려면 정확성, 출력 예산, 전달 형태를 함께 봐야 한다는 점을 보여줍니다.

물리 문제: Fable은 1차에 완료, Opus는 3번째에 복구

물리 문제는 접지 감쇠와 결합 감쇠가 있는 2자유도 진동자를 다루며, 두 개의 비감쇠 고유 진동수와 ω=8 rad/s에서 두 질량 블록의 복소 주파수 응답을 계산하도록 요구했습니다.

참고값은 다음과 같습니다.

ω1 = 10.0204 rad/s
ω2 = 16.2149 rad/s
|X1| = 0.14929 m, phase = -12.15°
|X2| = 0.07174 m, phase = -13.90°
Enter fullscreen mode Exit fullscreen mode

Fable 5는 첫 호출에서 곧바로 모든 정답을 냈습니다. 반면 Opus 5의 처음 두 호출은 프로덕션 팀이 특히 주의해야 할 이상 징후를 보였습니다. 인터페이스는 HTTP 200과 finish_reason=stop을 반환했지만, 본문은 아래 한 줄뿐이었습니다.

Hi! How can I help you today?
Enter fullscreen mode Exit fullscreen mode

이 두 응답의 prompt tokens는 모두 10으로, 실제 입력과는 분명히 맞지 않았습니다. 같은 요청을 3번째 실행했을 때, Opus 5는 34.901초 후 완전한 응답을 반환했고, 여섯 개 수치가 모두 검증을 통과했습니다.

따라서 이런 이상은 “물리 문제를 틀렸다”가 아니라 “요청 컨텍스트가 정상 처리되지”로 분류해야 합니다. 가장 간단한 방어선은 사람이 로그를 보는 일이 아니라, 호출 측에서 작업 수준의 검증을 두는 것입니다. 즉, 답변에 ω1, ω2, X1, X2가 모두 포함되어야 하며, 하나라도 빠지면 재시도해야 합니다.

코드와 엄격한 JSON: 이번 라운드 최대 차이는 Fable의 필터링

코드 문제에서는 Python DFS 사이클 탐지기를 리뷰하게 했습니다. 버그는 아주 평범했습니다. 노드의 DFS가 끝난 뒤 visiting 집합에서 제거하지 않아, 이미 완료된 노드가 여전히 재귀 스택에 있는 것으로 잘못 인식되고, 그 결과 DAG에서도 순환이 있다고 오탐지하는 문제였습니다.

Opus 5는 최소 수정으로 다음을 정확히 지적했습니다.

visiting.discard(node)
visited.add(node)
return False
Enter fullscreen mode Exit fullscreen mode

Fable 5는 코드 분석 대신 finish_reason=content_filter를 반환했고, 본문은 비어 있었습니다. system prompt 편향이나 우발적 라우팅을 배제하기 위해 우리는 세 차례 테스트했습니다. 원본 테스트, 정제한 system prompt로 재검증, 독립 단문 재시도. 결과는 모두 content_filter였습니다.

엄격한 JSON 문제에도 위험한 내용은 없었습니다. 입력은 15분 내 요청 총수, 실패 수, 채널 귀인, 재시도 복구 수, 처리 조치만 포함했고, 출력은 JSON 객체 하나였습니다. Opus 5의 JSON은 바로 파싱 가능했지만, Fable 5는 역시 3회 연속 필터링되었습니다.

이 두 실패는 안전 필터 자체가 모델 API의 프로덕션 능력 중 하나임을 보여줍니다. 일반적인 코드 리뷰나 사고 회고 텍스트에서 안정적으로 오필터링되는 모델이라면, 수학 문제에서 더 빠르더라도 그대로 모든 업무 트래픽을 맡길 수는 없습니다.

두 개의 독립 재시도 response ID는 다음과 같습니다.

코드 리뷰: gen-1784915384-vGI1PtuNXZG0IJ2YiaCz
사고 JSON: gen-1784915390-buOWZQSnqjgHeJ6nUogF
Enter fullscreen mode Exit fullscreen mode

지연 시간과 출력 길이

실패 요청의 짧은 소요 시간을 “속도 우위”로 잘못 계산하지 않기 위해, 여기서는 두 모델이 모두 성공한 네 개 공통 작업만 비교했습니다. 수학, 제약 탐색, 통계 오류 수정, 실험 설계입니다.

Claude Opus 5와 Claude Fable 5의 공통 성공 작업 지연 시간

지표 Claude Opus 5 Claude Fable 5
P50 총 지연 10.729 s 8.147 s
P50 첫 번째 가시 token 8.376 s 6.974 s
평균 가시 completion tokens 797.5 452.3

이 작은 샘플에서는 Fable 5의 P50 총 지연이 약 24% 낮고, 첫 번째 가시 token은 약 17% 낮으며, 답변은 약 43% 짧았습니다. 채팅, 대량 요약, 고빈도 구조화 작업에서는 이런 차이가 사용자 대기 시간과 하위 처리량에 직접적인 영향을 줍니다.

다만 4문항의 중앙값을 SLA처럼 쓰면 안 됩니다. 상위 부하, 캐시, 라우팅, rate limit은 모두 지연을 바꿀 수 있습니다. 정식 출시 전에는 반드시 자신의 비즈니스 프롬프트로 20~50회 반복 테스트를 하고, P50, P95, P99와 각 통과 결과의 실제 비용을 집계해야 합니다.

Fable 5의 본 테스트 응답에는 cost 필드가 있었고, 7회 합계는 약 $0.24596였습니다. 반면 Opus 5의 usage에는 동일한 기준의 cost 필드가 제공되지 않았습니다. 따라서 이 글에서는 달러 가격 우열을 판단하지 않습니다. 필드가 없다고 해서 무료라는 뜻도 아니며, 검증되지 않은 가격으로 메우는 것도 옳지 않습니다.

추천하는 프로덕션 라우팅 전략

단일 모델 호출은 작성하기 가장 쉽지만, 모델의 모든 우발적 동작을 최종 사용자에게 그대로 노출합니다. 이번 두 모델에는 다음과 같은 분담이 더 합리적입니다.

Fable 5를 첫 번째 hop으로

다음에 적합합니다.

  • 회귀 테스트를 통과한 수학, 제약 추론, 짧은 요약
  • 첫 token과 전체 지연에 민감한 상호작용
  • 답변 길이를 통제하고 후처리 부담을 줄이고 싶은 작업

단, 작업군이 이미 필터링 테스트를 거쳤고, 호출 측에서 content_filter, 빈 본문, 누락 필드를 검사해야 합니다.

Opus 5를 고커버리지 폴백으로

다음에 적합합니다.

  • 입력 유형이 예측 불가능한 경우
  • 코드 리뷰, 엄격한 JSON, 복잡한 물리처럼 더 넓은 작업 커버리지가 필요한 경우
  • Fable 5가 필터링된 뒤 사용자 요청을 자동 복구해야 하는 경우

Opus 5 역시 무검사로 둘 수는 없습니다. 이번 라운드의 인사말 이상은 HTTP 200과 stop이 여전히 업무 답변이 아닐 수 있음을 보여줍니다.

OpenAI-compatible Python 예제

아래 예제는 먼저 Fable 5를 호출하고, 필터링, 빈 본문, 검증 실패가 발생하면 Opus 5로 폴백합니다. Opus가 여전히 인사말만 반환하면 한 번 더 재시도합니다.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://cn.crazyrouter.com/v1",
)


def valid_answer(text: str, required_terms: tuple[str, ...]) -> bool:
    normalized = (text or "").strip()
    if not normalized:
        return False
    if normalized.lower().startswith("hi! how can i help"):
        return False
    return all(term in normalized for term in required_terms)


def call_model(model: str, prompt: str) -> tuple[str, str | None]:
    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
        temperature=1,
        max_tokens=3000,
    )
    choice = response.choices[0]
    return choice.message.content or "", choice.finish_reason


def routed_completion(prompt: str, required_terms: tuple[str, ...] = ()) -> str:
    for model, attempts in (("claude-fable-5", 1), ("claude-opus-5", 2)):
        for _ in range(attempts):
            text, finish_reason = call_model(model, prompt)
            if finish_reason == "content_filter":
                break
            if valid_answer(text, required_terms):
                return text
    raise RuntimeError("No model produced a valid business answer")


answer = routed_completion(
    "Return a JSON incident summary with keys total, failed, recovered.",
    required_terms=('"total"', '"failed"', '"recovered"'),
)
print(answer)
Enter fullscreen mode Exit fullscreen mode

프로덕션 구현에서는 model, response ID, finish_reason, 총 지연 시간, 검증 실패 사유도 함께 기록해야 합니다. 그래야 모델 계산 오류, 출력 절단, 콘텐츠 필터링, 라우팅 입력 유실을 구분할 수 있습니다. 이 모든 것을 하나의 모호한 “모델 실패”로 뭉개면 안 됩니다.

다중 모델 인프라를 설계 중이라면 AI API Gateway, aggregator, 직결 모델 API의 차이Kimi K3 vs Opus 4.8의 7차원 테스트도 참고할 만합니다.

최종 제안

이번 라운드에서 가장 가치 있는 결론은 누가 더 높은 점수를 받았느냐가 아니라, 두 모델의 실패 형태가 다르다는 점입니다.

  • Fable 5의 강점은 공통 작업이 더 빠르고 더 짧다는 점입니다. 반면 일부 일반 업무 프롬프트는 안정적으로 필터링될 수 있습니다.
  • Opus 5의 강점은 재시도 후 전체 작업을 커버한다는 점입니다. 반면 때때로 실제 입력과 무관한 인사말을 반환할 수 있습니다.

따라서 Fable 5는 이미 검증된 고빈도 작업 앞단에 두고, Opus 5는 더 넓은 커버리지의 폴백으로 두는 것이 좋습니다. 그리고 두 경로 모두 콘텐츠 수준 검증을 적용해야 합니다. 그래야 모델 비교 결과를 실제 신뢰성으로 전환할 수 있고, 단순한 순위표에 머무르지 않을 수 있습니다.

API Key를 생성하고 이 듀얼 모델 라우팅을 재현하기

FAQ

Claude Opus 5가 Claude Fable 5보다 항상 더 강한가요?

이 작은 샘플만으로 “모든 작업에서 더 강하다”고 결론내릴 수는 없습니다. 두 모델 모두 수학, 제약, 통계 오류 수정, 실험 설계에서는 통과했습니다. Fable 5는 더 빠르고 더 짧았고, Opus 5는 작업 커버리지가 더 완전했습니다. 선택은 모델 이름이 아니라 구체적인 작업 성공률에 근거해야 합니다.

Claude Fable 5는 프로덕션 환경에 적합한가요?

회귀 테스트를 거친 작업에는 적합합니다. 이번 테스트에서는 여러 추론 작업에서 정확했고 더 빨랐지만, 코드 리뷰와 사고 JSON에서는 연속 필터링이 있었습니다. 출시 전에는 실제 프롬프트로 필터링률을 측정하고, Opus 5나 다른 모델로의 폴백을 구성해야 합니다.

왜 HTTP 200인데도 실패로 보나요?

HTTP 200은 인터페이스가 응답을 완료했다는 뜻일 뿐입니다. 본문이 비어 있거나, finish_reason=content_filter이거나, 출력이 잘렸거나, 인사말만 돌아왔다면 업무를 완료할 수 없습니다. 프로덕션 지표는 HTTP 성공률이 아니라 “검증 통과율”을 집계해야 합니다.

returned model이 왜 anthropic/claude-fable-5인가요?

요청은 claude-fable-5를 사용했지만, 응답의 returned model은 provider 접두사가 붙은 anthropic/claude-fable-5로 안정적으로 반환되었습니다. 이는 정규화된 별칭으로 볼 수 있으며, 접두사 변화만으로 모델 교체가 일어났다고 증명할 수는 없습니다.

두 모델의 달러 비용을 바로 비교할 수 있나요?

이번에는 불가능합니다. Fable 5 응답에는 cost 필드가 있었지만, Opus 5는 같은 기준의 필드를 제공하지 않았습니다. 엄밀한 비용 비교는 통합 과금 로그에서 수집하고, “검증 통과 결과 1건당 비용”을 지표로 삼아야 합니다.

몇 번 반복해야 출시 결정을 내릴 수 있나요?

핵심 작업군마다 최소 20~50회는 반복하고, 정상 입력, 경계 입력, 장문 입력, 필터링을 유발하기 쉬운 입력을 모두 포함하는 것이 좋습니다. 최소한 작업 성공률, 필터링률, 빈 본문율, 절단률, P50/P95/P99 지연, 비용을 기록해야 합니다.

테스트는 어떻게 시작하나요?

OpenAI-compatible base URL로 https://cn.crazyrouter.com/v1를 사용하고, claude-opus-5claude-fable-5를 각각 호출하세요. 프롬프트와 파라미터를 고정하고, 원본 응답을 저장한 뒤, 로컬 assertion 또는 구조 검증으로 작업이 실제로 완료되었는지 판정하면 됩니다.

Claude 듀얼 모델 테스트를 시작하기

Top comments (0)