Ошибка 400 после перехода на Sonnet 5.5: что изменить в API-запросе

Проверьте thinking disabled, принудительные вызовы инструментов, историю диалога и computer use при миграции на Sonnet 5.5. Включён минимальный пример запроса.

Линейная иллюстрация ключа с заголовком Sonnet 5.5 API Migration.

Даже простая замена ID модели может нарушить работу существующей интеграции Sonnet 5. В Sonnet 5.5 изменились допустимые параметры рассуждений, принудительный выбор инструментов, обработка истории рассуждений и совместимость некоторых инструментов. Если после обновления появился HTTP 400, сначала изучите тело ошибки и фактически отправленный запрос, а не меняйте авторизацию и не повторяйте тот же payload.

Основа статьи — руководство по миграции Sonnet 5.5 и описание изменений, проверенные 29 сентября 2026 года. Примеры показывают структуру запросов по документации. Это не утверждение, что Ofox воспроизвёл каждую ошибку на работающем API. Для 401, 429 и специфического для провайдера 404 нужна другая диагностика.

Найдите несовместимое поле

Старая конфигурацияИзменение в Sonnet 5.5Первое действие
thinking.type: disabledОтклоняетсяИспользовать between_tools с effort не выше high
Ручной enabled с budget_tokensОтклоняетсяПерейти на поддерживаемый adaptive thinking или between_tools
tool_choice.type: any или toolОтклоняетсяИспользовать auto и проверять выбор в приложении
Изменённая история с повторной передачей блоков рассужденийМожет нарушить привязку диалогаТолько дополнять историю либо следовать документированному удалению блоков
computer_20251124 в Claude API/Google CloudОтклоняетсяПерейти на поддерживаемый набор computer-инструментов и обновить цикл
Старое сочетание с advisor-модельюНекоторые сочетания отклоняютсяПроверить список поддерживаемых advisor-моделей

Не распространяйте строку computer use на всех провайдеров. На той же официальной странице указано, что Amazon Bedrock принимает старый инструмент computer_20251124. Платформа — часть условий исправления.

Как заменить disabled

Для минимального текстового запроса без инструментов документация допускает такое тело POST /v1/messages в нативном Claude API:

{
  "model": "claude-sonnet-5-5",
  "max_tokens": 1024,
  "thinking": {"type": "between_tools"},
  "output_config": {"effort": "high"},
  "messages": [{"role": "user", "content": "Return a one-sentence summary of this task: verify a CSV total."}]
}

Тело запроса — не полный HTTP-клиент. Добавьте заголовки авторизации и версии API согласно Messages API. Храните учётные данные в своём окружении, а не в копируемых примерах или логах.

between_tools отключает рассуждения перед началом работы, но не гарантирует отсутствие таких блоков во всех сценариях с инструментами. Заметки о ходе работы между инструментами всё ещё могут использовать этот тип блока. Режим поддерживает low, medium и high, но не xhigh и max; дополнительные поля вроде display и budget_tokens не принимаются. Для xhigh или max нужен adaptive thinking. Повтор запроса с несовместимыми параметрами не исправит ошибку валидации.

После отказа от принудительного вызова проверьте поведение

Переход на tool_choice: auto меняет поведение: модель может решать, вызывать ли инструмент. Параметр strict: true в поддерживаемом определении проверяет структуру входных данных инструмента, но не принуждает выбрать его. Приложение должно проверить, произошёл ли ожидаемый вызов. Возможности схем зависят от платформы: согласно руководству, Sonnet 5.5 в Amazon Bedrock не поддерживает structured outputs, включая strict tool use.

Для сервиса извлечения данных сначала решите, нужен ли вызов инструмента вообще. Если результат — данные, а не действие, может подойти структурированный вывод. Проверьте корректный результат, отсутствие обязательных данных, отказ и неожиданную реплику обычным текстом. Исчезновение 400 ещё не означает завершения миграции.

Сохраняйте историю диалога

Sonnet 5.5 привязывает блоки рассуждений к модели и разговору. Изменение раннего системного промпта, описания инструмента или сообщения при повторной передаче более позднего блока может вызвать ошибку привязки. По умолчанию контроль применяется на указанных платформах к аккаунтам, созданным 31 августа 2026 года в 00:00 UTC или позже. Старые аккаунты и явное включение этой настройки нужно проверять отдельно.

Самый простой подход — история только с добавлением новых сообщений. Сохраняйте возвращённые блоки без изменений и применяйте документированные механизмы для изменений внутри диалога. При намеренном редактировании истории следуйте правилам обработки затронутых блоков и beta-параметров. Не удаляйте все блоки рассуждений из каждого запроса как универсальное исправление: это меняет диалог и может привести к потере полезного контекста.

Переключение моделей имеет отдельные правила. Блок, который целевая модель не может прочитать, может быть отброшен; это не то же самое, что ошибка привязки из-за изменённого префикса. Записывайте конкретную ошибку или метаданные преобразования, а не называйте любую проблему «invalid signature». Для прежних случаев есть руководство по ошибке подписи thinking block.

Проверяйте и успешные HTTP-ответы

Некоторые регрессии не возвращают HTTP-ошибку. Длинные заметки между вызовами инструментов могут поступать в блоках рассуждений, текст которых скрыт при стандартном отображении adaptive. Интерфейс, показывающий только текстовые блоки, выглядит молчащим, хотя запрос допустим. Проверьте поведение thinking.display для adaptive thinking либо поддерживаемый режим between_tools.

Отказ также отличается от транспортной ошибки. Документация описывает HTTP 200 с stop_reason: refusal и дополнительными деталями. Успешный HTTP-статус не доказывает, что задача выполнена. Обрабатывайте результат явно вместо повторной отправки того же отклонённого задания.

Проверка перед production

Подготовьте небольшой набор сценариев: обычный текст, вызов инструмента, многоходовой диалог, изменённая история, потоковые обновления и обработка отказа. Проверьте схему запроса, парсер ответа, соответствие результатов вызовам инструментов и видимый пользователю вывод. Сохраняйте версию клиента и точный ID модели для каждого результата. Пока разбираете ошибки, держите конфигурацию отката на прежнюю интеграцию.

Общий план развёртывания — в руководстве по переходу с Sonnet 5, выбор модели в CLI — в настройке Claude Code. Здесь разобраны изменения нативного API; сторонний шлюз может добавлять собственный слой преобразования и ошибки.

Часто задаваемые вопросы

Можно оставить disabled?
Это значение не поддерживается Sonnet 5.5. Документированная замена — between_tools с high или ниже. Для более высоких уровней effort используйте adaptive thinking.
Strict tool use гарантирует вызов инструмента?
Нет. Проверка схемы и выбор инструмента — разные требования. Приложение должно обработать ответ без нужного вызова.
Любой 400 означает проблему обновления модели?
Нет. Прочитайте точную ошибку и изолируйте изменённое поле. Некорректные сообщения, адаптация провайдера и другие недопустимые параметры тоже могут давать 400.