Понедельник, оптовая компания в Алматы. Разработчик правит в боте мелочь – текст приветствия – и пересобирает контейнер. Сборка проходит, бот запускается. Через двадцать минут менеджер замечает, что заявки из WhatsApp висят без ответа, а карточки в CRM перестали заполняться. В логах одна и та же строка: ошибка 400.
Приветствие ни при чём. При пересборке подтянулась свежая библиотека Anthropic. 21 октября вышли новые мажорные версии SDK, и они по умолчанию отправляют запросы в новой версии Claude API – 2026-10-21. В ней параметр temperature больше не принимается. Совсем. А классификатор заявок у этой компании с самого запуска работал с temperature: 0.2.
Модель при этом не менялась. Сломалась связка «код плюс библиотека», и это неприятнее любого отключения модели: о нём предупреждают за месяцы, а здесь всё решает одна команда установки зависимостей.
Главное за минуту
Ломает библиотека, а не модель
Python SDK 2.0.0, TypeScript 1.0.0, C# 13.0.0 и другие новые версии шлют 2026-10-21. Старые – 2023-06-01.
temperature теперь ошибка
temperature, top_p и top_k дают 400 на любой модели, даже со значением по умолчанию.
Старая версия пока работает
Запросы с 2023-06-01 принимаются как раньше. Срок её отключения Anthropic не называла.
Есть тихие изменения
Ключ уходит в другом заголовке, а в C# настройки сэмплинга через IChatClient просто игнорируются.
Что изменилось в версии Claude API 2026-10-21
Каждый запрос к Claude несёт заголовок anthropic-version. С 2023 года почти все отправляли одно и то же значение – 2023-06-01, и большинство даже не знало, что он существует: SDK подставлял его сам. Теперь SDK подставляет 2026-10-21. Какая версия уйдёт в запросе, зависит от мажорной версии библиотеки: каждая отправляет ту, что была актуальной на момент её выхода.
В Messages API, через который работает практически любой бот, новая версия меняет три вещи:
- параметры
temperature,top_pиtop_kудалены – запрос с любым из них получает 400 на каждой модели, даже если передать значение по умолчанию; - блок
documentпрямо в реплике ассистента даёт 400 – документы теперь только в сообщениях пользователя; - текстовый блок с непустым массивом
citationsв сообщении пользователя тоже даёт 400.
Первый пункт касается почти всех, кто писал интеграцию сам. Два других – реже: обычно это боты, которые пересобирают историю диалога и перекладывают прошлый ответ Claude со ссылками на источники в реплику пользователя. Если ваш бот отвечает по базе документов с цитатами, проверьте и это место.
Есть и изменения в Admin API. Если у вас настроена выгрузка расходов по ключам или рабочим пространствам в учёт или BI, поля переименованы: например, у ключей вместо workspace_id теперь scope. Скрипт, который читает старое имя поля, получит пустое значение или ошибку – зависит от того, как он написан.
Почему бот падает после обновления SDK, а не в день релиза
21 октября у работающих ботов ничего не сломалось. Сломается в тот день, когда кто-то обновит зависимости. А это происходит чаще, чем кажется: пересборка Docker-образа, переезд на новый сервер, автоматическое обновление пакетов, подрядчик, который «заодно поднял версии». Если в requirements.txt записано просто anthropic без ограничения версии, следующая сборка получит 2.0.0.
Хуже всего то, что ошибка 400 не похожа на сбой. Типичная логика повторов в боте перезапрашивает при 429 и 5xx – перегрузке и проблемах на стороне Anthropic. Ошибку 400 она считает окончательной: запрос неверный, повторять бессмысленно. Бот молча не отвечает, и если на этот случай нет передачи диалога оператору, клиент просто уходит. Как устроить запасной путь, когда модель недоступна или отвечает ошибкой, мы описывали в статье «План B: как обеспечить непрерывность сервиса, если AI недоступен».
В статье «Отключение Claude Sonnet 4.5: как перевести бота на Sonnet 5.5» мы писали, что новые модели отвечают ошибкой на нестандартный temperature. Тогда правило касалось конкретных моделей и конкретных значений. Теперь оно шире: на новой версии API ошибку получит и старая модель, и temperature: 1.
Что делать с низкой temperature
Для моделей Claude 4.7 и новее ничего не меняется: они и так принимают только значения по умолчанию, и удаление параметра на их ответы не влияет. Вопрос встаёт у тех, кто работает на более старых моделях, например на Claude Sonnet 4.6, и намеренно занижал temperature, чтобы классификатор отвечал одинаково на одинаковые заявки.
Anthropic пишет прямо: на новой версии этот эффект теряется, и никакая другая настройка его не заменяет. Выбор из двух вариантов.
Оставить запрос на старой версии
Зафиксировать мажорную версию SDK ниже новой и жить как раньше. Быстро и без риска для качества. Минус – вы откладываете переход, а срок поддержки 2023-06-01 не объявлен. На Amazon Bedrock для моделей старше Claude 4.7, например Opus 4.6, это вообще единственный путь: новая версия там работает только с Claude 4.7 и новее.
Убрать параметр и стабилизировать иначе
Удалить temperature и добиться предсказуемости форматом ответа: классификатор выбирает категорию через вызов инструмента со списком допустимых значений, а не пишет её свободным текстом. Затем прогнать контрольный набор заявок и сравнить с прежними ответами.
Мы обычно советуем первый вариант как срочную меру и второй как плановую работу. Бот, который стабилен только благодаря temperature: 0, всё равно уязвим: при переезде на новую модель эта опора исчезнет.
Проверим, переживёт ли ваш бот обновление
Пришлите файл зависимостей и код вызова Claude – за день скажем, что упадёт на новом SDK и что поправить.
Что сломается в самих SDK без ошибки от API
Часть изменений вообще не зависит от версии API – они в библиотеках. Поэтому даже если вы вручную вернёте заголовок 2023-06-01, после обновления SDK эти места всё равно придётся проверить.
| Изменение | Где проявится | Что сделать |
|---|---|---|
Ключ отправляется как Authorization: Bearer, а не в X-Api-Key |
Сам API принимает оба варианта. Проблема будет, если между ботом и Anthropic стоит свой шлюз или прокси, который ищет ключ в X-Api-Key |
Проверить правила шлюза и логирования до обновления |
| Клиент хранит одну учётную запись | Если при создании клиента передаются и API-ключ, и токен, SDK выдаёт ошибку сразу при запуске | Оставить что-то одно |
| Удалён старый Text Completions | SDK для TypeScript, Go, Java, Ruby и CLI. Касается интеграций, написанных до перехода на Messages API | Переписать вызов на Messages API |
C#: IChatClient игнорирует Temperature, TopK, TopP |
Ошибки не будет – настройка просто перестанет действовать | Проверить качество ответов на контрольном наборе |
| Go: нужна версия Go 1.25 или новее | Сборка на старом образе не пройдёт | Обновить образ сборки вместе с SDK |
Отдельно для тех, у кого юристы следят за лицензиями зависимостей: новые версии SDK и CLI распространяются под Apache 2.0, предыдущие остаются под MIT.
Строка про C# заслуживает внимания. Ошибка 400 хотя бы заметна. А тихо пропавшая настройка проявится через неделю, когда руководитель продаж спросит, почему одни и те же заявки стали попадать в разные воронки.
Чего не ждать
- Даты отключения 2023-06-01. Её нет ни в заметках к релизу, ни на странице версий. Anthropic только рекомендует переходить на свежую версию, и планировать по этому «пока» нельзя.
- Замены
temperature. Для старых моделей с заниженным значением эффект просто пропадает, другого параметра нет. - Подсказки от SDK. Новая библиотека не предупреждает, что в запросе остался удалённый параметр, – вы узнаете об этом по ошибке от API.
- Единых правил для облаков. На Bedrock новая версия доступна только для Claude 4.7 и новее, для Google Cloud и Microsoft Foundry такого ограничения в документации нет. Если бот ходит в Claude через облачного провайдера, проверяйте его отдельно.
Что проверить на этой неделе
Первые два пункта занимают полчаса и защищают от сценария с понедельничной пересборкой. Остальное можно делать спокойно.
- Зафиксировать версию SDK в файле зависимостей: для Python
anthropic<2, для TypeScript@anthropic-ai/sdkниже 1.0.0, для C# – ниже 13.0.0. - Настроить оповещение на ошибки 400 от Claude и передачу диалога оператору, если бот не смог ответить.
- Найти в коде все
temperature,top_pиtop_k, включая настройки в конфигурации и в обёртках вродеIChatClient. - Выяснить, через что идут запросы: напрямую в Anthropic, через свой шлюз или через Bedrock, Google Cloud, Foundry.
- Проверить скрипты выгрузки расходов через Admin API на переименованные поля.
- Собрать контрольный набор из 50–100 реальных заявок с правильными ответами и прогнать его до и после обновления.
Как собрать такой набор и что в нём проверять, мы разбирали в статье «Тестирование AI-ботов – как проверить бота перед запуском». Он пригодится не только сейчас: следующее обновление модели или библиотеки будет проверяться тем же набором за час.
Связанные материалы
Обновим бота на новый SDK Claude без простоя
Зафиксируем версии, уберём удалённые параметры, настроим оповещения и передачу оператору, прогоним контрольный набор ваших заявок до и после – и только потом переключим рабочего бота.