Claude Opus 5 vs Claude Fable 5: 7 реальных API-тестов и рекомендации по production-маршрутизации
Как выбрать между Claude Opus 5 и Claude Fable 5? Если смотреть только на один успешный ответ, обе модели способны написать аккуратное математическое решение. Но на production-опыт обычно сильнее влияют три другие вещи: стабильно ли задача доводится до результата, подходит ли задержка для интерактивного сценария и можно ли автоматически восстановиться после сбоя.
25 июля 2026 года мы протестировали обе модели на 7 типах задач через один и тот же OpenAI-compatible API, с одинаковыми промптами и параметрами. Результаты не укладываются в простую формулу «более крупная модель всегда лучше»:
-
claude-fable-5была быстрее и лаконичнее в задачах, которые успешно решили обе модели; -
claude-opus-5в итоге покрыла все 7 типов задач; - Fable 5 несколько раз подряд срабатывала на
content_filterв обычных промптах для code review и JSON-сводки инцидента; - Opus 5 в задаче по физике первые два раза вернула HTTP 200, но ответила только приветствием; нормальный результат появился лишь с 3-й попытки.
Это значит, что production-выбор не должен сводиться к одному model ID. Более надежный подход: сначала выбирать основную модель по типу задачи, а затем закрывать аномалии через проверку содержимого, retry и fallback на другую модель.
Протестировать Opus 5 и Fable 5 через один API
Краткие выводы
| Вопрос | Ответ по этому тесту |
|---|---|
| Какая модель покрыла больше задач? | Opus 5: 6/7 в основном тесте, 7/7 после retry |
| Какая модель быстрее? | В задачах, успешно решенных обеими моделями, P50 общей задержки у Fable 5 примерно на 24% ниже |
| Какая модель отвечает лаконичнее? | Fable 5: в среднем примерно на 43% меньше видимых output tokens |
| Какая модель лучше подходит для code review и строгого JSON? | В этом тесте Opus 5 стабильнее; Fable 5 в двух задачах 3 раза подряд была отфильтрована |
| Можно ли ориентироваться только на HTTP 200? | Нет; у обеих моделей были случаи HTTP 200 без фактического выполнения задачи |
| Какую маршрутизацию рекомендовать? | Для проверенных задач — сначала Fable 5; при фильтрации или пустом теле — fallback на Opus 5; при аномальном приветствии от Opus — автоматический retry |
Если тип входных данных непредсказуем или вам важно минимизировать риск фильтрации обычных бизнес-промптов, в первую очередь стоит рассматривать Opus 5. Если структура задач фиксирована, уже покрыта regression-тестами, а скорость интеракции и длина ответа важнее, Fable 5 лучше подходит как первая модель в цепочке.
Как мы тестировали
Перед тестом мы вызвали endpoint со списком моделей и убедились, что оба точных model ID доступны:
GET https://cn.crazyrouter.com/v1/models
claude-opus-5
claude-fable-5
Все основные запросы шли через один endpoint:
POST https://cn.crazyrouter.com/v1/chat/completions
Общие условия:
Одинаковый system prompt
Одинаковый user prompt
temperature = 1
Для каждой задачи одинаковый max_tokens
stream = true
Без инструментов и доступа к интернету
Единый system prompt требовал только точного ответа и соблюдения формата вывода, без роли или установки, смещающей поведение в пользу какой-либо модели:
Answer the user's task accurately. Follow every requested output format and length constraint exactly. Do not use external tools.
Мы фиксировали не только итоговый текст, но и:
- HTTP-статус и
finish_reason; - response ID и returned model;
- время до первого видимого token и общую задержку;
- completion tokens, reasoning tokens;
- проходит ли видимый ответ проверку по условиям задачи;
- восстанавливается ли аномальный запрос повтором с теми же параметрами.
Это end-to-end-тест через шлюз Crazyrouter, а не эксперимент с жестко заданным единственным upstream-каналом. Поэтому результаты одновременно отражают поведение модели, upstream-фильтрацию, маршрутизацию шлюза и состояние каналов на тот момент. Они хорошо отвечают на вопрос «с чем реально столкнется пользователь через этот API», но не подходят для упаковки в чистый офлайн-рейтинг возможностей семейства Claude.
Если вам важно понять, почему при тестировании моделей нужно фиксировать finish_reason и бюджет вывода, посмотрите также повторный max_tokens-тест Claude Fable 5 vs GPT-5.5.
Сводная таблица по 7 задачам
| Тестовое направление | Claude Opus 5 | Claude Fable 5 | Production-эффект |
|---|---|---|---|
| Точная математика: цепь Маркова | Пройдено | Пройдено | Обе модели получили правильные первый момент, второй момент и дисперсию |
| Численная физика: связанные осцилляторы | Первые два раза только приветствие, с 3-й попытки пройдено | Пройдено с первой попытки | Для Opus нужны проверка содержимого и retry на уровне задачи |
| Поиск с ограничениями | Пройдено | Пройдено | Обе модели нашли единственное решение |
| Статистическая коррекция | Пройдено | Пройдено | Обе модели отвергли неверную предпосылку и дали корректную верхнюю границу |
| Code review на Python | Пройдено | 3 раза подряд content_filter
|
В текущем тесте Fable не подходит для code-review-трафика без regression-проверки |
| Строгая JSON-сводка инцидента | Пройдено | 3 раза подряд content_filter
|
В текущем тесте Fable не подходит для такого текста production-инцидента |
| Дизайн эксперимента | Пройдено | Пройдено | Обе модели распознали непарные выборки и смешение по сложности |
Доля задач, доставленных с первой основной попытки:
Claude Opus 5: 6 / 7 = 85.7%
Claude Fable 5: 5 / 7 = 71.4%
С учетом retry:
Claude Opus 5: 7 / 7
Claude Fable 5: 5 / 7
Под «доставкой» здесь понимается не успешный HTTP-запрос, а наличие видимого ответа, который бизнес-логика может принять как соответствующий заданию. Даже если есть HTTP 200, имя модели и token usage, но тело пустое, отфильтровано или содержит только приветствие, задача считается невыполненной.
Математика, ограничения и статистика: обе модели надежны
Математическая задача использовала трехсостоянийную цепь Маркова и требовала вычислить время первого достижения состояния 3 из состояния 1:
E1[τ]
E1[τ²]
Var1(τ)
Обе модели выдали:
E1[τ] = 5
E1[τ²] = 43
Var1(τ) = 18
Обе также выписали транзиентную матрицу Q и уравнения для первого и второго моментов. В этой задаче не было ситуации, когда финальные числа правильные, а вывод противоречивый.
В задаче на поиск с ограничениями нужно было расставить пять докладов A, B, C, D, E по пяти слотам с условиями непосредственного соседства, порядка, расстояния и отсутствия соседства. Обе модели получили единственный порядок:
A, C, E, B, D
В задаче на статистическую коррекцию намеренно давался неверный вывод: «среднее равно 10, дисперсия равна 4, значит P(X≥14)=0.5». Обе модели указали, что двух моментов недостаточно для однозначного определения хвостовой вероятности, и через одностороннее неравенство Чебышева/Кантелли получили:
P(X >= 14) <= 0.2
Эти три класса задач показывают, что преимущество Fable 5 в скорости не достигается за счет потери базовой корректности рассуждений. В четких, коротких и проверяемых математических и логических задачах она вполне может быть более легкой первой моделью.
Предыдущие материалы — API-тест Claude Fable 5 vs Claude Sonnet 5 и тест output budget GLM-5.2 vs Fable 5 — также показывают: чтобы понять, подходит ли модель для production, нужно рассматривать корректность, бюджет вывода и форму доставки результата вместе.
Физика: Fable справилась с первой попытки, Opus восстановилась на третьей
Задача по физике требовала обработать двухстепенной осциллятор с демпфированием на землю и связующим демпфированием, вычислить две собственные частоты без демпфирования, а также комплексный частотный отклик двух масс при ω=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°
Fable 5 с первой попытки дала все правильные результаты. У Opus 5 в первых двух вызовах возникла аномалия, на которую production-командам стоит обратить особое внимание: API вернул HTTP 200 и finish_reason=stop, но тело ответа содержало только:
Hi! How can I help you today?
В обеих этих реакциях prompt tokens равнялись всего 10, что очевидно не соответствовало реальному входу. При 3-м выполнении того же запроса Opus 5 через 34.901 секунды вернула полный ответ, и все шесть численных значений прошли проверку.
Поэтому такую аномалию не стоит классифицировать как «модель ошиблась в физике». Правильнее считать это случаем, когда контекст запроса не был нормально обработан. Самая простая защита — не ручной просмотр логов, а task-level acceptance check на стороне клиента: ответ должен содержать ω1, ω2, X1, X2; если отсутствует хотя бы одно поле, выполняется retry.
Код и строгий JSON: фильтрация Fable стала главным отличием теста
Задача по коду просила модель проверить Python-реализацию DFS-детектора циклов. Ошибка была вполне обычной: после завершения DFS для узла он не удалялся из множества visiting, из-за чего уже обработанный узел продолжал считаться находящимся в рекурсивном стеке, и на DAG ошибочно находился цикл.
Opus 5 корректно указала минимальное исправление:
visiting.discard(node)
visited.add(node)
return False
Fable 5 не вернула анализа кода: finish_reason=content_filter, тело пустое. Чтобы исключить смещение system prompt и случайную маршрутизацию, мы провели три раунда: исходный тест, повторный тест с чистым system prompt и независимый retry одной задачи. Во всех случаях результатом был content_filter.
Задача со строгим JSON также не содержала опасного контента. Во входе были только общее число запросов за 15 минут, число ошибок, attribution каналам, число восстановленных retry и предпринятые действия; требовалось вывести один JSON-объект. JSON, который вернула Opus 5, можно было сразу распарсить; Fable 5 снова 3 раза подряд была отфильтрована.
Эти два типа сбоев показывают: **сам safety-фильтр — тоже часть production-качества model API. Если модель стабильно дает ложную фильтрацию на нормальном code review или тексте postmortem-инцидента, она не может напрямую принять на себя весь бизнес-трафик, даже если в математических задачах быстрее.
response ID двух независимых retry:
Ревью кода: gen-1784915384-vGI1PtuNXZG0IJ2YiaCz
JSON инцидента: gen-1784915390-buOWZQSnqjgHeJ6nUogF
Задержка и длина ответа
Чтобы не засчитывать короткое время неуспешных запросов как «преимущество в скорости», здесь сравниваются только четыре задачи, которые успешно выполнили обе модели: математика, поиск с ограничениями, статистическая коррекция и дизайн эксперимента.
| Метрика | 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 |
В этой небольшой выборке P50 общей задержки у Fable 5 примерно на 24% ниже, время до первого видимого token — примерно на 17% ниже, а ответы короче примерно на 43%. Для чатов, пакетных сводок и высокочастотных структурированных задач такие различия напрямую влияют на ожидание пользователя и нагрузку на последующую обработку.
Но не стоит превращать медиану по 4 задачам в SLA. Upstream-нагрузка, кеши, маршрутизация и rate limiting могут менять задержку. Перед полноценным запуском нужно повторить тесты на собственных бизнес-промптах 20–50 раз, а затем посчитать P50, P95, P99 и реальную стоимость каждого результата, прошедшего acceptance check.
В основных ответах Fable 5 присутствовало поле cost; суммарно за7 вызовов получилось около $0.24596. В usage для Opus 5 не было поля cost той же методики, поэтому в статье не делается вывод о победителе по цене в долларах. Отсутствие поля не означает бесплатность, и его не следует заполнять непроверенными ценами.
Рекомендуемая production-стратегия маршрутизации
Вызов одной модели проще всего реализовать, но он напрямую показывает конечному пользователю все случайные особенности поведения модели. Для двух моделей из этого теста разумнее такое разделение ролей:
Fable 5 как первая модель
Подходит для:
- математических задач, reasoning с ограничениями и коротких сводок, уже прошедших regression-тесты;
- интерактивных сценариев, чувствительных ко времени до первого token и общей задержке;
- задач, где нужно контролировать длину ответа и уменьшать нагрузку на постобработку.
Условие: семейство задач уже проверено на фильтрацию, а вызывающая сторона проверяет content_filter, пустое тело и отсутствие обязательных полей.
Opus 5 как fallback с более широким покрытием
Подходит для:
- непредсказуемых типов входных данных;
- code review, строгого JSON, сложной физики и других сценариев, где нужно более широкое покрытие задач;
- случаев, когда после фильтрации Fable 5 нужно автоматически восстановить пользовательский запрос.
Opus 5 тоже нельзя оставлять без проверки. Аномалия с приветствием в этом тесте показывает, что HTTP 200 и stop все равно могут не содержать бизнес-ответа.
OpenAI-compatible пример на Python
Пример ниже сначала вызывает Fable 5, а при фильтрации, пустом теле или провале acceptance check переключается на Opus 5; если Opus по-прежнему возвращает только приветствие, выполняется еще один retry.
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)
В production-реализации также стоит записывать model, response ID, finish_reason, общую задержку и причину провала acceptance check. Только так можно отличить ошибку вычисления, обрезанный вывод, content-фильтрацию и потерю входного контекста при маршрутизации, а не складывать все в расплывчатую категорию «модель не справилась».
Если вы проектируете multi-model-инфраструктуру, можно также посмотреть материалы о различиях между AI API Gateway, агрегатором и прямыми model API, а также семимерный тест Kimi K3 vs Opus 4.8.
Финальная рекомендация
Самый ценный вывод этого теста не в том, кто набрал больше очков, а в том, что формы отказа у двух моделей разные:
- Преимущество Fable 5 — более высокая скорость и более короткие ответы в общих успешных задачах; риск — стабильное срабатывание фильтрации на части обычных бизнес-промптов.
- Преимущество Opus 5 — покрытие всех задач после retry; риск — редкое возвращение приветствия, не связанного с реальным входом.
Поэтому Fable 5 стоит ставить первой на уже проверенных высокочастотных задачах, Opus 5 — использовать как fallback с более широким покрытием, а на обеих ветках выполнять проверку содержимого на уровне задачи. Так результаты сравнения моделей превращаются в реальную надежность, а не остаются строкой в рейтинговой таблице.
Создать API Key и воспроизвести эту двухмодельную маршрутизацию
FAQ
Claude Opus 5 точно сильнее Claude Fable 5?
Из этой небольшой выборки нельзя сделать вывод, что она сильнее во всех задачах. Обе модели прошли математику, ограничения, статистическую коррекцию и дизайн эксперимента; Fable 5 была быстрее и короче, а Opus 5 дала более полное покрытие задач. Выбор должен опираться на success rate для конкретных задач, а не на название модели.
Подходит ли Claude Fable 5 для production?
Подходит для задач, прошедших regression-тестирование. В этом тесте она корректно и быстро справилась с несколькими reasoning-задачами, но code review и JSON-инцидент несколько раз подряд вызвали фильтрацию. Перед запуском нужно измерить filter rate на реальных промптах и настроить fallback на Opus 5 или другую модель.
Почему HTTP 200 все равно считается провалом?
HTTP 200 означает только то, что API завершил ответ. Пустое тело, finish_reason=content_filter, обрезанный вывод или ответ в виде одного приветствия не решают бизнес-задачу. Production-метрики должны считать «долю ответов, прошедших acceptance check», а не только HTTP success rate.
Почему returned model равен anthropic/claude-fable-5?
В запросе использовался claude-fable-5, а returned model в ответе стабильно был anthropic/claude-fable-5 с provider-префиксом. Это можно считать нормализованным alias; одного изменения префикса недостаточно, чтобы утверждать, что модель была подменена.
Можно ли напрямую сравнить долларовую стоимость двух моделей?
В этом тесте — нет. В ответах Fable 5 было поле cost, а для Opus 5 не было поля в той же методике. Корректное сравнение стоимости должно брать данные из единых billing-логов и считать метрику «стоимость результата, прошедшего acceptance check».
Сколько повторов нужно сделать перед запуском?
Для каждого ключевого семейства задач рекомендуется минимум 20–50 повторов, с покрытием нормальных входов, граничных входов, длинных входов и входов, которые потенциально могут вызвать фильтрацию. Как минимум фиксируйте task success rate, filter rate, долю пустых ответов, truncation rate, P50/P95/P99 задержки и стоимость.
Как начать тестирование?
Используйте https://cn.crazyrouter.com/v1 как OpenAI-compatible base URL и по очереди вызывайте claude-opus-5 и claude-fable-5. Зафиксируйте промпты и параметры, сохраняйте сырые ответы, а затем через локальные assertions или структурную валидацию проверяйте, действительно ли задача выполнена.



Top comments (0)