Claude Fable 5: резервный переход на Opus 4.8 — объяснение

Узнайте, как защитные механизмы Claude Fable 5 взаимодействуют с резервным поведением Opus 4.8 в производственных API-системах.

By Dora 9 min read

Это Дора. Я направляю продакшн-трафик на Claude Fable 5 примерно неделю. Достаточно долго, чтобы наблюдать за срабатыванием механизма fallback, и достаточно недолго, чтобы ещё помнить, что меня удивило. Этот материал — для тех, кто только что интегрировал Fable 5 и увидел stop_reason: "refusal" в ответ на совершенно безобидный запрос, — или для тех, кто собирается интегрировать и предпочёл бы не узнавать об этом в два часа ночи.

Коротко: fallback Claude Fable 5 — это не ошибка. Это задокументированная часть того, как работает модель. Когда классификатор безопасности отклоняет запрос, API возвращает HTTP 200 с причиной остановки «refusal», и Anthropic предоставляет три способа повторить запрос на Claude Opus 4.8, не потеряв пользователя. Если обрабатывать это как исключение, оно будет обрабатываться неверно. Если воспринимать это как решение о маршрутизации — всё встаёт на своё место.

Я разберу что вызывает fallback, что именно возвращает API, как реализовать повторный запрос и что это значит для биллинга.

Почему Opus 4.8 важен в маршрутизации Fable 5

Защитные механизмы Fable 5 и поведение fallback

Fable 5 — самая мощная из широко доступных моделей Anthropic, и она поставляется с классификаторами безопасности, работающими перед моделью. Когда классификатор помечает запрос, Fable 5 не отвечает. Запрос можно повторно выполнить на Claude Opus 4.8, и пользователь получает уведомление об этом. Это задокументировано в объявлении Anthropic о Claude Fable 5 и Mythos 5.

Anthropic утверждает, что классификаторы срабатывают менее чем в 5% сессий в среднем. Это число соответствует тому, что я наблюдала до сих пор. Большую часть времени механизм fallback незаметен.

Контекст ограниченного доступа к Mythos 5

Mythos 5 — та же базовая модель, что и Fable 5, но без классификаторов. Она не является общедоступной. Доступ осуществляется через Project Glasswing, который в настоящее время ограничен партнёрами в области кибербезопасности и небольшим числом исследователей в области биологии в рамках отдельной программы доверенного доступа. Если у вас нет доступа, вы строите на Fable 5. Брендинг anthropic mythos может вводить в заблуждение — Mythos — это класс модели, а Fable 5 — публично доступный её представитель.

В остальной части материала предполагается, что ваш код вызывает Fable 5.

Почему fallback — это функция продукта, а не просто путь обработки ошибок

На понимание этого у меня ушло некоторое время. Opus 4.8 — не деградированный опыт. Это флагман предыдущего поколения, по-прежнему мощный, и он не использует те же классификаторы. Таким образом, логика маршрутизации такова: сначала пробуется самая мощная модель, и если классификатор отклоняет запрос, происходит переход к модели, которая была флагманом два месяца назад. Пользователь получает ответ в любом случае. В этом весь замысел.

Fallback — это не отчёт об ошибке. Это решение о маршрутизации, которое ваш код принимает от имени пользователя.

Что вызывает fallback или refusal

Категории кибербезопасности, биологии/химии и дистилляции

Поле stop_details.category сообщает, какой классификатор сработал. Опубликованные категории для Fable 5 включают cyber, bio и reasoning_extraction — последняя предназначена для запросов, которые выглядят как попытки реверс-инжиниринга или дистилляции выходных данных модели в нарушение Условий использования Anthropic. Актуальный список и точное поведение описаны в документации по refusals и fallback в Claude API docs.

Я не видела срабатывания bio ни на чём из того, что делаю. cyber срабатывал дважды. Оба раза запрос был связан с безопасностью, но безвреден — один раз вопрос касался структуры конкретного формата логов, другой раз — CVE многолетней давности, уже полностью закрытой. Никаких попыток что-либо сделать не было. Классификатор увидел поверхностный паттерн и отказал.

Ложные срабатывания и консервативные защитные механизмы

Anthropic открыто заявляет, что классификаторы настроены консервативно — строже, чем было бы идеально, по их собственному признанию. Таков компромисс. Они предпочтут отклонить безобидный вопрос о кибербезопасности и перенаправить вас на Opus 4.8, чем пропустить реальный случай злоупотребления. Fallback существует именно потому, что частота ложных срабатываний ненулевая по замыслу.

Если строить с этим допущением, сюрпризы исчезают. Если строить, считая отказы редкими чрезвычайными ситуациями, первый же отказ что-нибудь сломает.

Что API возвращает при отклонении запросов

Ответ — обычный HTTP 200. Структура примерно такая:

{
  "role": "assistant",
  "content": [],
  "stop_reason": "refusal",
  "stop_details": {
    "type": "refusal",
    "category": "cyber",
    "explanation": "..."
  },
  "usage": { "input_tokens": 106, "output_tokens": 1 }
}

Вы не платите за запрос, отклонённый до генерации какого-либо вывода. Если продолжить тот же разговор без сброса отклонённого хода, отказы будут продолжаться — это описано в документации Anthropic по потоковым отказам. Удалите или перепишите ход перед повторной попыткой.

Поле category носит информационный характер. Не разветвляйте пользовательский текст на его основе. Оно также может быть null в некоторых контекстах, включая результаты пакетной обработки, поэтому обнаруживайте отказы, проверяя stop_reason напрямую.

Как разработчикам реализовать fallback

Три способа. Выберите один. Не комбинируйте их.

Серверный параметр fallback

Самый чистый путь на прямом Claude API или Claude Platform на AWS — параметр fallbacks с опциональным включением. Он сейчас находится в бета-версии. Вы добавляете список fallback-моделей к запросу, и если Fable 5 отказывает, Anthropic повторно выполняет запрос на следующей модели из списка — Opus 4.8 при запуске — и возвращает вам этот ответ. Один round trip с вашей стороны.

Не поддерживается в Message Batches API и в настоящее время недоступен на Amazon Bedrock, Vertex AI или Microsoft Foundry. Для них используйте middleware SDK.

Middleware клиентского SDK

Anthropic SDK поставляются с middleware для fallback при отказе. Вы один раз настраиваете клиент со списком fallback-моделей, и он обрабатывает повторный запрос, бета-заголовок для fallback-кредита и управление историей разговора. Принимающая модель фиксируется для последующих ходов, чтобы разговор оставался согласованным.

Я использовала middleware. Конфигурация — один блок при создании клиента, и после этого client.beta.messages.create ведёт себя точно так же, как обычный клиент — за исключением того, что отказы маршрутизируются автоматически. Это путь, который я рекомендую, если вы на Bedrock, Vertex или Foundry, или если просто хотите единый путь кода везде.

Логирование результатов классификатора без раскрытия конфиденциального содержимого

Когда происходит отказ, логируйте достаточно для отладки — модель, временную метку, категорию — но не логируйте полный запрос в логи приложения, если он может быть конфиденциальным. Классификатор уже его пометил. Относитесь к запросу как к чему-то, что нужно обработать, а не как к чему-то, что нужно индексировать в стеке наблюдаемости.

Я веду счётчик по stop_details.category и частоту выборки полных данных только для среды разработки. Это позволяет получить паттерны ложных срабатываний без утечки содержимого.

Биллинг и пользовательский опыт

Избегание дублирования стоимости кэша запросов там, где это поддерживается

Если ваш исходный запрос к Fable 5 использовал длинный кэшированный префикс, вы не хотите платить за чтение кэша дважды при повторном запросе на Opus 4.8. Fallback-кредит решает эту проблему. Когда отказ создаёт кредит, вы получаете непрозрачный fallback_credit_token в ответе, и передача его в запросе повторной попытки позволяет избежать двойной оплаты кэша. Механизм и бета-заголовок задокументированы в руководстве AWS Bedrock по fallback-кредиту, и middleware SDK отправляет заголовок за вас. Токен действует пять минут.

Если вы использовали серверный параметр fallbacks или middleware, это обрабатывается автоматически. Если вы делаете ручной повторный запрос, вам нужно реализовать это самостоятельно.

Объяснение fallback конечным пользователям

Fallback — это не сбой. Но пользователю нужно знать, что ответ пришёл от другой модели — как для прозрачности, так и потому, что Opus 4.8 может отвечать иначе. Я показываю небольшую встроенную заметку — что-то вроде «Ответ получен с использованием резервной модели» — со ссылкой на страницу справки, объясняющей, что это означает. Не извинение. Метка.

Чего я не делаю — так это не раскрываю пользователю категорию. «cyber» или «bio» вне контекста читается как обвинение, и обычно таковым не является.

Поддержание наблюдаемости поведения системы безопасности

Отслеживайте частоту отказов как обычный SLI. Если она растёт неделя от недели, вы хотите это знать — либо ваше использование смещается в сторону помеченных категорий, либо классификатор был перенастроен. Оба случая оперативно интересны. Оба невидимы, если вы не измеряете.

FAQ

Почему Fable 5 переходит на Opus 4.8?

Потому что Fable 5 поставляется с классификаторами безопасности, которые могут отклонять запросы в определённых категориях (кибербезопасность, биология, химия, дистилляция). Когда это происходит, Fable 5 не отвечает, и запрос можно повторно выполнить на Opus 4.8 — который не использует те же классификаторы — чтобы пользователь всё равно получил ответ.

Как командам API следует обрабатывать ответ с отказом?

Воспринимайте это как обычный результат API, а не исключение. Проверьте stop_reason == "refusal". Либо используйте серверный параметр fallbacks, middleware SDK, либо реализуйте ручной повторный запрос с токеном fallback-кредита. Сбросьте отклонённый ход перед продолжением разговора, иначе отказы будут продолжаться.

Означает ли fallback, что запрос небезопасен?

Нет. Классификаторы настроены консервативно, поэтому безобидные запросы в смежных категориях иногда будут их срабатывать. Anthropic утверждает, что менее 5% сессий получают fallback. Воспринимайте отказ как сигнал маршрутизации, а не как вердикт в отношении пользователя.

Когда Opus 4.8 должен быть моделью по умолчанию?

Когда вам не нужен потолок рассуждений Fable 5 и вы хотите полностью избежать логики маршрутизации. Opus 4.8 стоит примерно вдвое меньше за токен и не использует те же классификаторы. Для рутинной работы Opus 4.8 часто является более разумным выбором по умолчанию. Для долгосрочных агентных запусков — Fable 5 с настроенным fallback.

Заключение

Fallback Claude Fable 5 — это событие маршрутизации, а не ошибка. Классификаторы срабатывают консервативно, API возвращает чистый 200, и Anthropic предоставляет серверный параметр и middleware SDK, которые обрабатывают повторный запрос, биллинг кэша и историю разговора без необходимости писать много кода с вашей стороны.

Объём работы по реализации невелик. Сложнее изменить восприятие. Как только вы перестаёте воспринимать отказ как исключение, всё остальное становится на своё место.

Я продолжаю наблюдать, как часто классификатор cyber срабатывает на правомерные вопросы. Ещё неделя данных должна показать, нужно ли мне что-то настраивать со своей стороны. Продолжение следует.

Предыдущие публикации:

Поделиться