Решение проблемИнструкция
Claude API: ошибка 400 из-за temperature, top_p, top_k — что делать
Запрос к Claude на версии API 2026-10-21 вернул 400? Уберите temperature, top_p и top_k или оставьте старую версию. Шаги внутри.

Содержание
Ещё вчера запрос к Claude работал, вы перевели его на версию API 2026-10-21 (заголовок anthropic- или релиз SDK под эту версию), и теперь приходит 400. Посмотрите на тело запроса: если в нём есть temperature, top_p или top_k, причина в них. Удалите эти три поля, и запрос пройдёт.
По руководству Anthropic по переходу на версию 2026-10-21 (https://platform.claude.com/docs/en/api/migration-2026-10-21, проверено 24 октября 2026) запрос к Messages или Message Batches с любым из трёх параметров возвращает ошибку 400. Даже если значение равно значению по умолчанию. Ищите статус 400 и названия этих полей в запросе.
Как выглядит запрос, который ломается#
Допустим, у вас небольшой скрипт: он просит Claude коротко пересказать обращение и держит ответ ровным за счёт низкой температуры:
import anthropic
client = anthropic.Anthropic()
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
temperature=0.2, # <- из-за этой строки теперь 400
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)То же самое по обычному HTTP. Если версию вы задаёте сами, именно эта строка переключает вас на новое поведение:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2026-10-21" \
-H "content-type: application/json" \
-d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
"messages": [{"role": "user", "content": "Hello"}]}'Исправление: уберите три параметра#
Удалите temperature, top_p и top_k из каждого запроса к Messages и Message Batches. Без них модель сэмплирует с настройками по умолчанию (temperature 1.0) — так же, как запрос версии 2023-06-01, где их не указали.
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
В свежих мажорных версиях SDK и в CLI ant (2.0.0) этих параметров больше нет вообще, поэтому после обновления их нужно убрать из кода. 400 приходит на запросы с anthropic-, в которых всё ещё есть одно из трёх полей. Адаптеры .NET IChatClient мягче: они теперь просто игнорируют ChatOptions., TopK и TopP. Точные номера версий SDK по языкам — во вкладках Upgrade steps в руководстве.
Если вы работаете без SDK, версия задаётся заголовком anthropic-, и значение 2026-10-21 как раз включает новое правило.
Изменятся ли ответы после удаления#
Зависит от модели, и руководство тут конкретно.
- Claude 4.7 и новее и раньше принимали только значения по умолчанию. Для вас ничего не меняется: сэмплирование было таким же.
- Модели, которые принимают другие значения, например Claude Sonnet 4.6: если вы снижали
temperatureради более ровного ответа, этот эффект пропадёт, а заменить его другой настройкой нельзя.
Если конкретный запрос действительно держится на нестандартном значении, в руководстве два выхода: перестать отправлять параметр и смириться с настройками по умолчанию либо оставить именно этот запрос на anthropic-.
Если ответы должны быть строго одинаковыми, переносите стабильность в промпт: фиксированный формат ответа, короткий пример того, что вы хотите получить, и проверка в коде, которая отбрасывает всё не по формату. Работы больше, чем с одним числом, зато от ручки сэмплирования это не зависит.
Короткий чек-лист, если увидели 400#
- Найдите в проекте
temperature,top_p,top_k, включая обёртки и общие конфиги. - Проверьте пакетные задания: правило действует для каждого запроса внутри Message Batch, созданного с 2026-10-21, поэтому смотрите параметры каждого запроса в пакете.
- Вспомните, что поменялось: мажорная версия SDK, версия CLI или заголовок
anthropic-.version - Уберите поля либо закрепите этот запрос на
2023-06-01, если ему нужно нестандартное значение. - Прогоните один запрос, прежде чем запускать большой пакет.
Один код для Claude и OpenAI-подобных API#
Частая схема: один помощник собирает запрос и отправляет его либо в Anthropic Messages, либо в OpenAI-подобный Chat Completions. Проще всего разделить параметры: temperature оставить только в ветке для Chat Completions, а в ветку Messages не добавлять.
В формате Chat Completions это обычное поле запроса. В CheapTokens оно работает через OpenAI-совместимый адрес https:/. Вот запрос к DeepSeek-V4-Flash (контекст 380K, до 32 768 токенов в ответе) с полным id модели из документации CheapTokens:
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"temperature": 0.2,
"max_tokens": 300,
"messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
}'Такой запрос при 1 000 токенов на входе и 300 на выходе стоит $0.000045 по текущей цене. У DeepSeek-V4-Flash одна цена в любое время суток, без пиковых часов, а один баланс покрывает все модели. Для того же кода с контекстом 390K есть ещё GLM-5.3-Flash (zai-, до 8 192 токенов в ответе). Актуальные цены всех моделей — на странице цен.
Как ведёт себя эта настройка — в статье System prompt и temperature: что это и как задать. Как вызывать Messages в формате Claude из Python — в статье Anthropic Python SDK с CheapTokens. Базовый адрес и настройка ключа — в документации CheapTokens.



