Назад в блог

Решение проблемИнструкция

Claude API: ошибка 400 из-за temperature, top_p, top_k — что делать

Запрос к Claude на версии API 2026-10-21 вернул 400? Уберите temperature, top_p и top_k или оставьте старую версию. Шаги внутри.

Автор: CheapTokens TeamОпубликовано 4 мин чтения

Карточка в стиле терминала: ошибка 400 из-за temperature, top_p и top_k в Claude API
Содержание
  1. Как выглядит запрос, который ломается
  2. Исправление: уберите три параметра
  3. Изменятся ли ответы после удаления
  4. Короткий чек-лист, если увидели 400
  5. Один код для Claude и OpenAI-подобных API

Ещё вчера запрос к Claude работал, вы перевели его на версию API 2026-10-21 (заголовок anthropic-version или релиз 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 коротко пересказать обращение и держит ответ ровным за счёт низкой температуры:

python
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. Если версию вы задаёте сами, именно эта строка переключает вас на новое поведение:

bash
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, где их не указали.

python
reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Было и стало: запрос с temperature возвращает 400, тот же запрос без него проходит
Один и тот же запрос до и после удаления temperature

В свежих мажорных версиях SDK и в CLI ant (2.0.0) этих параметров больше нет вообще, поэтому после обновления их нужно убрать из кода. 400 приходит на запросы с anthropic-version: 2026-10-21, в которых всё ещё есть одно из трёх полей. Адаптеры .NET IChatClient мягче: они теперь просто игнорируют ChatOptions.Temperature, TopK и TopP. Точные номера версий SDK по языкам — во вкладках Upgrade steps в руководстве.

Если вы работаете без SDK, версия задаётся заголовком anthropic-version, и значение 2026-10-21 как раз включает новое правило.

Изменятся ли ответы после удаления#

Зависит от модели, и руководство тут конкретно.

  • Claude 4.7 и новее и раньше принимали только значения по умолчанию. Для вас ничего не меняется: сэмплирование было таким же.
  • Модели, которые принимают другие значения, например Claude Sonnet 4.6: если вы снижали temperature ради более ровного ответа, этот эффект пропадёт, а заменить его другой настройкой нельзя.

Если конкретный запрос действительно держится на нестандартном значении, в руководстве два выхода: перестать отправлять параметр и смириться с настройками по умолчанию либо оставить именно этот запрос на anthropic-version: 2023-06-01.

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

Короткий чек-лист, если увидели 400#

  1. Найдите в проекте temperature, top_p, top_k, включая обёртки и общие конфиги.
  2. Проверьте пакетные задания: правило действует для каждого запроса внутри Message Batch, созданного с 2026-10-21, поэтому смотрите параметры каждого запроса в пакете.
  3. Вспомните, что поменялось: мажорная версия SDK, версия CLI или заголовок anthropic-version.
  4. Уберите поля либо закрепите этот запрос на 2023-06-01, если ему нужно нестандартное значение.
  5. Прогоните один запрос, прежде чем запускать большой пакет.

Один код для Claude и OpenAI-подобных API#

Частая схема: один помощник собирает запрос и отправляет его либо в Anthropic Messages, либо в OpenAI-подобный Chat Completions. Проще всего разделить параметры: temperature оставить только в ветке для Chat Completions, а в ветку Messages не добавлять.

В формате Chat Completions это обычное поле запроса. В CheapTokens оно работает через OpenAI-совместимый адрес https://api.cheaptokens.dev/v1. Вот запрос к DeepSeek-V4-Flash (контекст 380K, до 32 768 токенов в ответе) с полным id модели из документации CheapTokens:

bash
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-org/GLM-5.3-Flash, до 8 192 токенов в ответе). Актуальные цены всех моделей — на странице цен.

Как ведёт себя эта настройка — в статье System prompt и temperature: что это и как задать. Как вызывать Messages в формате Claude из Python — в статье Anthropic Python SDK с CheapTokens. Базовый адрес и настройка ключа — в документации CheapTokens.