• Сообщения
  • Управляемые агенты
  • Администрирование
Search...
⌘K
Первые шаги
Знакомство с ClaudeБыстрый старт
Разработка с Claude
Обзор возможностейИспользование Messages APIПричины остановки и резервный вариантОтказы и резервный вариантРезервный кредит
Возможности модели
Расширенное мышлениеАдаптивное мышлениеУсилиеБюджеты задач (бета)Быстрый режим (исследовательская предварительная версия)Структурированные выходные данныеЦитированиеПотоковая передача сообщенийПакетная обработкаРезультаты поискаПотоковая передача отказовМногоязычная поддержкаЭмбеддинги
Инструменты
ОбзорКак работает использование инструментовРуководство: создание агента с использованием инструментовОпределение инструментовОбработка вызовов инструментовПараллельное использование инструментовTool Runner (SDK)Строгое использование инструментовИспользование инструментов с кэшированием подсказокСерверные инструментыУстранение неполадокИнструмент веб-поискаИнструмент загрузки веб-страницИнструмент выполнения кодаИнструмент советникаИнструмент памятиИнструмент BashИнструмент использования компьютераИнструмент текстового редактора
Инфраструктура инструментов
Справочник по инструментамУправление контекстом инструментовКомбинации инструментовПоиск инструментовПрограммный вызов инструментовДетальная потоковая передача инструментов
Управление контекстом
Контекстные окнаСжатиеРедактирование контекстаКэширование подсказокСистемные сообщения в середине разговораСоздание режима оркестрацииДиагностика кэша (бета)Подсчёт токенов
Работа с файлами
Files APIПоддержка PDFИзображения и компьютерное зрение
Навыки
ОбзорБыстрый стартРекомендацииНавыки для предприятийНавыки в API
MCP
Удалённые серверы MCPКоннектор MCP
Claude на облачных платформах
Amazon BedrockAmazon Bedrock (устаревшая версия)Claude Platform на AWSMicrosoft FoundryVertex AI
Log in
Отказы и резервный вариант
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Сообщения/Разработка с Claude

Отказы и резервная модель

Как Claude Fable 5 возвращает отказы классификатора и как повторно отправить отклонённые запросы на резервную модель.

Claude Fable 5 включает классификаторы безопасности, которые могут отклонить запрос. Когда это происходит, вы получаете обычный ответ, а не ошибку, со значением stop_reason: "refusal". Как правило, вы всё равно можете получить ответ, отправив тот же запрос другой модели Claude. На этой странице показано, как распознать отказ и как настроить такую повторную попытку.

Прочитайте эту страницу, если вы разрабатываете на базе Claude Fable 5 и хотите, чтобы отклонённые запросы автоматически передавались другой модели. Она также пригодится, если вы только что увидели "refusal" в ответе и хотите понять, что делать дальше.

Полный список значений stop_reason приведён на странице Причины остановки и резервная модель. Подробности о том, как тарифицируются отклонённые запросы и как избежать двойной оплаты за кэширование подсказок при повторной попытке, приведены на странице Кредит резервной модели. Вспомогательный компонент SDK, который оборачивает всё это, описан на странице Промежуточное ПО SDK. Полный сквозной пример см. в руководстве по резервной модели и тарификации.

Простейшая настройка: укажите резервную модель в запросе, и API выполнит повторную попытку.

await client.beta.messages.create({
  model: "claude-fable-5",
  max_tokens: 1024,
  messages,
  betas: ["server-side-fallback-2026-06-01"],
  fallbacks: [{ model: "claude-opus-4-8" }]
});

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

Как выглядит отказ

Отказ — это успешный ответ HTTP 200 со значением stop_reason: "refusal":

{
  "id": "msg_01XFUDYJgAACzvnptvVoYEL",
  "type": "message",
  "role": "assistant",
  "model": "claude-fable-5",
  "content": [],
  "stop_reason": "refusal",
  "stop_details": {
    "type": "refusal",
    "category": "cyber",
    "explanation": "This request was declined because it could enable cyber harm."
  },
  "usage": {
    "input_tokens": 412,
    "output_tokens": 0
  }
}

Объект stop_details объясняет причину отклонения. Его поле category указывает область политики, которая активировала классификатор. Его поле explanation — это человекочитаемое описание; текст не является стабильным, поэтому отображайте его, а не анализируйте программно. Оба поля равны null, когда отказ не соответствует именованной категории, и null — это нормальное постоянное значение, а не заглушка. Сам объект stop_details равен null для всех причин остановки, кроме refusal.

categoryЧто это означает
"cyber"Запрос может способствовать киберугрозам, например разработке вредоносного ПО или эксплойтов. Безобидная работа в области кибербезопасности также может активировать эту категорию.
"bio"Запрос может способствовать биологическим угрозам, например опасным лабораторным методам. Полезная работа в области наук о жизни также может активировать эту категорию.
"reasoning_extraction"Запрос просит модель воспроизвести её внутренние рассуждения в тексте ответа. Чтобы получить рассуждения в структурированной форме, используйте адаптивное мышление.

Отказ может поступить до какого-либо вывода или в середине потока после частичного вывода. В любом случае считайте любой частичный вывод незавершённым и отбрасывайте его.

Как тарифицируются отказы: при отказе до какого-либо вывода поле content остаётся пустым, и плата не взимается (количество токенов отображается в usage, но не тарифицируется, и запрос не учитывается в ограничениях скорости). При отказе в середине потока входные токены и уже переданный вывод тарифицируются по обычным ставкам.

Выбор подхода к резервной модели

Существует три способа повторить отклонённый запрос на другой модели. Правильный выбор зависит от того, где вы работаете и какой уровень контроля вам нужен.

Ваша ситуацияИспользуйтеПочему
Claude API или Claude Platform на AWS, простейшая настройкаСерверная резервная модельОдин запрос, один ответ. API выполняет повторную попытку.
Любая платформа с SDK для TypeScript, Python, Go, Java или C#Промежуточное ПО SDKНастраивается один раз на клиенте. Повторные попытки происходят автоматически.
Ruby, PHP, прямой HTTP или собственная логика повторных попытокРучная повторная попытка с кредитом резервной моделиПолный контроль. Кредит резервной модели снижает стоимость.

Серверная резервная модель и промежуточное ПО SDK применяют кредит резервной модели за вас, поэтому та страница нужна только при самостоятельной реализации повторной попытки.

Серверная резервная модель

Серверная резервная модель повторяет отклонённый запрос внутри одного вызова API. Вы указываете до трёх резервных моделей, и когда Claude Fable 5 отклоняет запрос, API запускает следующую модель в цепочке с тем же запросом. Вы получаете один ответ, в котором указана ответившая модель, так что ваш пользователь получает ответ за один цикл обмена.

Серверная резервная модель находится в бета-версии на Claude API и Claude Platform на AWS. Параметр fallbacks отклоняется в Message Batches API и недоступен на Amazon Bedrock, Vertex AI и Microsoft Foundry. На этих платформах используйте вместо этого промежуточное ПО SDK.

Выполнение запроса

Укажите резервные модели в параметре fallbacks и отправьте бета-заголовок server-side-fallback-2026-06-01.

К списку fallbacks применяется несколько правил:

  • Записи пробуются по порядку. Каждая должна отличаться от других записей и от запрошенной модели.
  • Каждая запись должна быть одной из разрешённых целей запрошенной модели. При установленном бета-заголовке этот список публикуется как allowed_fallback_models в записи модели в Models API.
  • Каждая запись указывает model и может переопределить max_tokens и thinking только для этой попытки.
  • Запрос должен быть валидным как прямой запрос к каждой указанной модели. Если резервная модель не поддерживает функцию, используемую в запросе, API отклоняет запрос заранее.
  • Только отклонение классификатором безопасности активирует резервную модель. Ограничение скорости, перегрузка или ошибка сервера на запрошенной модели возвращаются вам как есть.

Бета-заголовок должен содержать именно дату 2026-06-01. При любом другом значении server-side-fallback-* параметр fallbacks отклоняется с ошибкой 400. Если вы разрабатывали на основе более ранней предварительной версии этой функции, обновите бета-заголовок и форматы запроса и ответа одновременно до тех, что приведены на этой странице.

Что содержит ответ

Ответ выглядит как любое другое сообщение, с двумя дополнениями:

  • Поле model верхнего уровня указывает модель, которая создала возвращённое сообщение, будь то запрошенная модель или резервная.
  • Блок контента fallback отмечает каждую точку в content, где вывод одной модели сменяется выводом следующей: {"type": "fallback", "from": {"model": ...}, "to": {"model": ...}}. from.model повторяет строку модели, которую вы отправили, когда отклоняющий шаг — это запрошенная модель. to.model — это всегда разрешённый идентификатор модели, которая продолжает работу.

При отказе до какого-либо вывода блок fallback является первым блоком контента:

{
  "id": "msg_01XFUDYJgAACzvnptvVoYEL",
  "type": "message",
  "role": "assistant",
  "model": "claude-opus-4-8",
  "content": [
    {
      "type": "fallback",
      "from": { "model": "claude-fable-5" },
      "to": { "model": "claude-opus-4-8" }
    },
    { "type": "text", "text": "Hi! How can I help you today?" }
  ],
  "stop_reason": "end_turn",
  "stop_details": null,
  "usage": {
    "input_tokens": 412,
    "output_tokens": 264,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0,
    "iterations": [
      {
        "type": "message",
        "model": "claude-fable-5",
        "input_tokens": 535,
        "output_tokens": 0,
        "cache_read_input_tokens": 0,
        "cache_creation_input_tokens": 0
      },
      {
        "type": "fallback_message",
        "model": "claude-opus-4-8",
        "input_tokens": 412,
        "output_tokens": 264,
        "cache_read_input_tokens": 0,
        "cache_creation_input_tokens": 0
      }
    ]
  }
}

Массив usage.iterations фиксирует каждую попытку. Модель, которая отклонила запрос, отображается как обычная запись message, а модель, обслужившая ход, — как запись fallback_message. Если каждая модель в цепочке отклоняет запрос, ответом является отказ последней модели с записью message для каждого предыдущего шага и записью fallback_message для последнего.

Продолжение разговора

На следующем ходе отправьте контент ассистента обратно в том виде, в каком вы его получили. После переключения на резервную модель в середине вывода content может включать типы блоков, которые отклонившая модель создала до передачи; в таблице ниже указано, какие из них сохранить, а какие отбросить при повторении хода.

Тип блокаНа следующем ходе
fallbackСохраните его точно там, где он появился. API использует его позицию для валидации блоков мышления вокруг него, поэтому запрос, повторяющий блоки мышления с обеих сторон границы, отклоняется, если блок пропущен или перемещён.
textСохраните.
Любой блок после последнего блока fallbackСохраните.
thinking, redacted_thinking или connector_text до последнего блока fallbackОтбросьте.
Клиентский tool_use до последнего блока fallbackОтбросьте.
server_tool_use до последнего блока

Блок connector_text содержит текст повествования, который некоторые ответы с использованием инструментов включают между вызовами инструментов.

Потоковая передача

При потоковом запросе повторная попытка происходит в том же потоке, и ничто из уже полученного вами не становится недействительным. Когда отклонение происходит до какого-либо вывода, message_start указывает резервную модель, а блок fallback является первым блоком контента; поскольку message_start ожидает начала попытки резервной модели, время до первого байта включает отклонённую попытку. Когда отклонение происходит в середине вывода, открытый блок контента закрывается, блок fallback (обычная пара content_block_start и content_block_stop без дельт) отмечает границу, и резервная модель продолжает с частичного вывода. Только блоки text частичного вывода передаются резервной модели в качестве контекста; другие типы блоков остаются в content. В случае отклонения в середине вывода message_start уже указал запрошенную модель, поэтому считывайте обслуживающую модель из поля to.model блока fallback и из записи fallback_message в usage.iterations финального message_delta.

При непотоковом запросе отклонение в середине вывода ведёт себя иначе: ответ не включает частичный вывод отклонившей модели, и резервная модель отвечает с нуля. Результат выглядит как отклонение до какого-либо вывода, с блоком fallback в начале. Отклонённая попытка и её выходные токены всё равно отображаются в usage.iterations.

Когда отклонение срабатывает после того, как серверные инструменты (например, веб-поиск или выполнение кода) уже выполнились в рамках запроса, API возвращает отказ вместо перехода к резервной модели. Если заголовок fallback-credit-2026-06-01 также установлен, этот отказ содержит токен кредита, который можно использовать, продолжив частичный ответ, так что выполненная работа инструментов не теряется. Это относится только к серверным инструментам, итерирующим в рамках одного запроса; разговоры, использующие клиентские инструменты, переключаются на резервную модель обычным образом.

Клиентская резервная модель с промежуточным ПО SDK

SDK для TypeScript, Python, Go, Java и C# включают промежуточное ПО для переключения на резервную модель при отказе. Вы настраиваете его один раз на клиенте со своим списком резервных моделей. Вызовы через client.beta.messages затем автоматически повторяют отклонённые запросы на любой платформе. Промежуточное ПО также отправляет бета-заголовок fallback-credit-2026-06-01 с каждым обрабатываемым запросом, поэтому повторные попытки пересчитываются по цене без настройки для каждого запроса.

Вспомогательный компонент промежуточного ПО для переключения на резервную модель при отказе пока недоступен в SDK для Ruby и PHP. В этих SDK реализуйте шаблон «обнаружить и повторить» напрямую.

Настройка

Передайте промежуточное ПО в конструктор клиента и используйте один экземпляр BetaFallbackState для всех запросов разговора.

Как оно работает

  • Повторные попытки проходят по вашему списку резервных моделей по порядку. Резервная модель, которая сама отказывает, передаёт запрос следующей записи.
  • Исходный ответ с отказом возвращается только тогда, когда каждая модель в списке отклонила запрос. Промежуточное ПО не вызывает для этого ошибку.
  • Блоки мышления от Claude Fable 5 обрабатываются за вас: промежуточное ПО удаляет их из повторной попытки и управляет ими в истории разговора при последующих запросах.
  • Ответы, обслуженные через промежуточное ПО, включают блок контента fallback на каждой границе моделей, так же как и ответы серверной резервной модели. Промежуточное ПО управляет этими блоками за вас при последующих запросах.
  • Модель, которая приняла запрос, записывается в BetaFallbackState, поэтому последующие запросы, использующие это состояние, остаются закреплёнными за ней, а не повторно обращаются к модели, которая отказала.

Промежуточное ПО и серверный параметр fallbacks выполняют одну и ту же работу. Настраивайте одно или другое, но никогда оба в одном запросе. Чтобы отправить запрос с серверным fallbacks из приложения, которое устанавливает промежуточное ПО, используйте отдельный экземпляр клиента без него.

Отказы в Message Batches

Отклонённый запрос в Message Batch возвращается как result.type: "succeeded" со значением stop_reason: "refusal". Поле stop_details может быть null в результатах пакета, поэтому обнаруживайте отказы, проверяя stop_reason напрямую.

Серверная резервная модель недоступна для пакетов (пакетный запрос, включающий fallbacks, создаёт результат с ошибкой для каждого элемента). Чтобы повторить отклонённые элементы пакета:

  1. Соберите отклонённые элементы из результатов.
  2. Удалите блоки мышления Claude Fable 5 из любых многоходовых историй.
  3. Повторно отправьте их на резервную модель как новый пакет или как прямые запросы.

Распространённые ошибки

  • Повторяйте попытку на другой модели. Повторная отправка отклонённого запроса той же модели обычно приводит к ещё одному отказу. Направляйте повторную попытку на резервную модель.
  • Планируйте бюджет повторных попыток на запрос, а не на ход или сессию. Один ход может породить несколько отказов, например агент плюс его подагенты.
  • Настраивайте резервную модель на каждом пути запроса. Обработчики повторных попыток, ветки восстановления после ошибок и фоновые воркеры — всем им это нужно. Обработчик, который повторно выполняет запрос без резервной модели, теряет защиту именно на тех запросах, которым она нужнее всего.
  • Давайте вызовам подагентов собственную резервную модель. Параметр fallbacks не распространяется на вызовы модели, выполняемые изнутри выполнения инструментов.
  • Делайте резервную модель свойством запроса, а не окружающего состояния. Общий флаг, кэшированное значение конфигурации или глобальный переключатель могут рассинхронизироваться и незаметно оставить запрос без защиты. Когда вы не можете подтвердить, что резервная модель активна, настройте её, а не предполагайте, что она включена.
  • Инструментируйте отказы как отдельный сигнал. Отказ — это HTTP 200, поэтому мониторинг, построенный на частоте ошибок или ответах 5xx, никогда его не увидит. Генерируйте одно событие на каждый отказ и одно на каждый ответ, обслуженный резервной моделью (запись fallback_message в отмечает последнее), затем настройте оповещение на разрыв между двумя счётчиками.

Дальнейшие шаги

Кредит резервной модели

Избегайте двойной оплаты стоимости кэша подсказок при самостоятельной реализации повторной попытки.

Причины остановки и резервная модель

Все значения stop_reason и как их обрабатывать.

Was this page helpful?

  • Как выглядит отказ
  • Выбор подхода к резервной модели
  • Серверная резервная модель
  • Выполнение запроса
  • Что содержит ответ
  • Продолжение разговора
  • Потоковая передача
  • Клиентская резервная модель с промежуточным ПО SDK
  • Настройка
  • Как оно работает
  • Отказы в Message Batches
  • Распространённые ошибки
  • Дальнейшие шаги
client = Anthropic()

response = client.beta.messages.create(
    model="claude-fable-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Claude"}],
    fallbacks=[{"model": "claude-opus-4-8"}],
    betas=["server-side-fallback-2026-06-01"],
)

# Запись fallback_message в usage.iterations означает, что сработала резервная модель;
# сопоставьте её со stop_reason, чтобы убедиться, что ответ дала именно резервная модель.
fallback_ran = any(
    iteration.type == "fallback_message"
    for iteration in response.usage.iterations or []
)
served_by_fallback = fallback_ran and response.stop_reason != "refusal"

print(
    json.dumps(
        {
            "stop_reason": response.stop_reason,
            "model": response.model,
            "served_by_fallback": served_by_fallback,
        }
    )
)
fallback
Сохраните, если он сопряжён со своим результатом. Отбросьте, если у него нет соответствующего результата.
# При отказе промежуточное ПО повторяет запрос на указанной резервной модели и
# автоматически отправляет бета-заголовок резервного кредита с каждым обрабатываемым запросом.
client = Anthropic(
    middleware=[BetaRefusalFallbackMiddleware([{"model": "claude-opus-4-8"}])],
)

state = BetaFallbackState()  # pins follow-ups to the model that accepted

# Потоковая передача: при отказе промежуточное ПО повторяет запрос на резервной модели и
# вставляет её события в открытый поток.
with (
    state,
    client.beta.messages.stream(
        max_tokens=1024,
        model="claude-fable-5",
        messages=[{"role": "user", "content": "Hello, Claude"}],
    ) as stream,
):
    for event in stream:
        if event.type == "text":
            print(event.text, end="", flush=True)
    final_message = stream.get_final_message()
print(f"\nserved by: {final_message.model}")

# Без потоковой передачи: повторное использование состояния сохраняет привязку разговора.
with state:
    message = client.beta.messages.create(
        max_tokens=1024,
        model="claude-fable-5",
        messages=[{"role": "user", "content": "Hello, Claude"}],
    )
print(f"served by: {message.model}")
usage.iterations
  • Ветвитесь по stop_reason, а не по stop_details или content. stop_details носит информационный характер и может быть null при отказе. Проверяйте, что stop_reason равен "refusal", напрямую.
  • Промежуточное ПО SDK

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

    Руководство по миграции

    Перенесите существующее приложение на Claude Fable 5.