Temperature и top_p: что это, что крутить и где их больше нельзя задать
Temperature и top_p управляют разнообразием ответов. Объясняем, как они работают, почему у новых Claude их больше нет и чем их заменить.
4 мин · · разработка · модели
Temperature и top_p — два параметра, которыми раньше настраивали «случайность» ответов языковой модели. Сейчас с ними нужно быть осторожнее: часть новых моделей их не принимает и отвечает ошибкой. Разберём, что делают temperature и top_p, как проверить, поддерживает ли их нужная модель, и чем управлять ответом, если параметры недоступны.
Что такое temperature
Модель генерирует текст по одному токену: на каждом шаге она получает распределение вероятностей следующего токена и выбирает из него. temperature меняет форму этого распределения перед выбором.
- Низкая temperature (ближе к 0) — распределение становится «острее», почти всегда выбираются самые вероятные токены. Ответы однообразнее.
- temperature = 1 — распределение не меняется.
- Высокая temperature — шансы маловероятных токенов растут, ответы разнообразнее, но и ошибок становится больше.
Даже temperature = 0 не гарантирует одинаковый ответ на одинаковый запрос — это прямо сказано в справочнике Messages API Anthropic. Если вам нужна воспроизводимость, сохраняйте ответы, а не надейтесь на параметр.
Что такое top_p
top_p (nucleus sampling) ограничивает набор кандидатов. Токены сортируются по убыванию вероятности, и модель выбирает только среди первых, чья суммарная вероятность достигает top_p.
- top_p = 1 — учитываются все токены.
- top_p = 0.9 — отбрасывается «хвост» маловероятных вариантов, на который приходится 10% вероятности.
- top_p = 0.1 — остаются только самые вероятные токены, суммарно дающие 10%.
Важно: это доля вероятности, а не «10% самых вероятных слов».
Главное ограничение: новые модели Claude
По справочнику Messages API Anthropic, модели, вышедшие после Claude Opus 4.6, не поддерживают настройку этих параметров:
temperatureпринимается только со значением 1.0, любое другое значение — ошибка 400;top_pпринимается только со значением от 0.99, остальные — ошибка 400.
В каталоге Zukko это касается claude-sonnet-5 и claude-opus-5-5. Практический вывод: не передавайте эти параметры моделям Claude, а нужное поведение задавайте инструкциями. Если запрос с ними вернул 400, первым делом уберите temperature и top_p.
Для моделей GPT и GLM поддержка параметров и допустимые диапазоны могут отличаться. Надёжнее проверить, чем гадать.
Как проверить поддержку на любой модели
Отправьте короткий запрос с нужным значением и посмотрите, примет ли его модель. Такой запрос стоит доли цента.
import openai
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_ваш_ключ")
def accepts(model: str, **params) -> bool:
try:
client.chat.completions.create(
model=model,
max_tokens=5,
messages=[{"role": "user", "content": "ok"}],
**params,
)
return True
except openai.BadRequestError as e:
print(model, params, "→", e.message)
return False
for model in ["gpt-5.6-sol", "gpt-5.6-luna", "glm-5.3", "glm-5.3-flash", "claude-sonnet-5"]:
print(model, "temperature=0.2:", accepts(model, temperature=0.2))Запускайте такую проверку перед выкатом и после смены модели. Актуальный список моделей — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете.
Порядок настройки, если параметры поддерживаются
- Начните без параметров — со значениями по умолчанию.
- Соберите 10–20 реальных запросов и критерий хорошего ответа.
- Меняйте один параметр — обычно
temperature: например, 0.2, 0.5, 0.8. Для каждого значения прогоните весь набор. - Сравните долю хороших ответов и выберите значение.
top_pтрогайте, только если одной temperature не хватило, и не меняйте оба параметра одновременно — иначе непонятно, что дало эффект.
Ориентиры, с которых часто начинают: для извлечения данных, SQL и JSON — низкая temperature; для текстов — средняя; для мозгового штурма — выше. Это только отправные точки: проверяйте на своих задачах.
Чем управлять ответом без temperature
Для моделей, которые параметр не принимают, и вообще как более надёжный способ:
- Строгий формат. Попросите ответ в виде одного слова, списка из фиксированных значений или JSON по схеме. Узкий формат сам по себе снижает разброс.
- Примеры в промпте. Два-три примера «вход → выход» задают стиль точнее, чем число.
- Явные правила. «Не добавляй пояснений», «используй только данные из текста».
- Разнообразие по запросу. Если нужны разные варианты, попросите «предложи 5 непохожих вариантов» в одном запросе вместо пяти запросов с высокой temperature.
Пример для Claude через Anthropic SDK — без temperature, со строгими инструкциями:
import anthropic
client = anthropic.Anthropic(base_url="https://api.zukko.pro", api_key="fetch_ваш_ключ")
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=256,
system="Извлеки из текста email. Ответь только адресом, без пояснений. Если адреса нет — ответь NONE.",
messages=[{"role": "user", "content": "Пишите мне на ivan@example.com, отвечу вечером"}],
)
print("".join(b.text for b in response.content if b.type == "text"))И пример для мозгового штурма — варианты в одном запросе:
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[{
"role": "user",
"content": "Предложи 5 названий для сервиса доставки цветов. "
"Названия должны заметно отличаться по стилю. Только список.",
}],
)
print("".join(b.text for b in response.content if b.type == "text"))Пример с temperature через OpenAI SDK
Если проверка показала, что модель принимает параметр:
response = client_openai.chat.completions.create(
model="glm-5.3-flash",
temperature=0.2,
messages=[{"role": "user", "content": "Переведи на английский: 'Счёт оплачен'"}],
)
print(response.choices[0].message.content)Здесь client_openai — клиент OpenAI SDK с адресом https://api.zukko.pro/v1. Подробнее о параметрах — в справке по Chat Completions и Messages.
Частые вопросы
Какое значение temperature по умолчанию?
У Anthropic по справочнику — 1.0. У других вендоров смотрите их документацию. Если вы не передаёте параметр, модель использует своё значение по умолчанию — это самый безопасный вариант.
Почему мой запрос к Claude вернул ошибку 400?
Частая причина при переносе старого кода — temperature или top_p с недопустимым значением. Новые модели Claude принимают только temperature 1.0 и top_p от 0.99. Уберите эти параметры из запроса.
Влияет ли temperature на стоимость?
Цена за токен не меняется. Но от параметров и инструкций зависит длина ответа, а значит, и число выходных токенов. Сравнивайте usage в ответах при разных настройках.
Что делать, если инструмент (чат-интерфейс, плагин) сам отправляет temperature?
Многие инструменты передают параметры генерации из своих настроек. Если с моделями Claude появляется ошибка 400, найдите в настройках инструмента параметры генерации и отключите их или верните значения по умолчанию — точное название пункта смотрите в документации инструмента.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Промпт-инжиниринг: примеры и 12 готовых шаблонов для работыДвенадцать шаблонов промптов для рабочих задач: что в них написано, почему именно так и сколько стоит один вызов по API.
- База данных для RAG: где хранить знания — векторная БД, поиск или контекстДля RAG не обязательно ставить векторную базу. Разбираем четыре способа хранить знания, считаем стоимость запроса и показываем рабочий пример на SQLite.
- Лучшая нейросеть для программирования на C#: выбор и настройкаРейтингов «лучшей модели для C#» мы не даём, зато показываем, как сравнить варианты по цене и индексу, настроить агента для .NET и проверить результат сборкой и тестами.
- Claude Opus 4.6: что это и как перейти на Opus 5.5 без сюрпризовOpus 4.6, 4.7 и 4.8 — прошлое поколение, а в каталоге уже Opus 5 и 5.5. Даём план миграции из четырёх шагов: id модели, прогон своих промптов, сравнение стоимости, откат.