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 поддержка параметров и допустимые диапазоны могут отличаться. Надёжнее проверить, чем гадать.

Как проверить поддержку на любой модели

Отправьте короткий запрос с нужным значением и посмотрите, примет ли его модель. Такой запрос стоит доли цента.

bash
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 или страница «Модели» в кабинете.

Порядок настройки, если параметры поддерживаются

  1. Начните без параметров — со значениями по умолчанию.
  2. Соберите 10–20 реальных запросов и критерий хорошего ответа.
  3. Меняйте один параметр — обычно temperature: например, 0.2, 0.5, 0.8. Для каждого значения прогоните весь набор.
  4. Сравните долю хороших ответов и выберите значение.
  5. top_p трогайте, только если одной temperature не хватило, и не меняйте оба параметра одновременно — иначе непонятно, что дало эффект.

Ориентиры, с которых часто начинают: для извлечения данных, SQL и JSON — низкая temperature; для текстов — средняя; для мозгового штурма — выше. Это только отправные точки: проверяйте на своих задачах.

Чем управлять ответом без temperature

Для моделей, которые параметр не принимают, и вообще как более надёжный способ:

  • Строгий формат. Попросите ответ в виде одного слова, списка из фиксированных значений или JSON по схеме. Узкий формат сам по себе снижает разброс.
  • Примеры в промпте. Два-три примера «вход → выход» задают стиль точнее, чем число.
  • Явные правила. «Не добавляй пояснений», «используй только данные из текста».
  • Разнообразие по запросу. Если нужны разные варианты, попросите «предложи 5 непохожих вариантов» в одном запросе вместо пяти запросов с высокой temperature.

Пример для Claude через Anthropic SDK — без temperature, со строгими инструкциями:

bash
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"))

И пример для мозгового штурма — варианты в одном запросе:

bash
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

Если проверка показала, что модель принимает параметр:

bash
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.