/
Вопросы и ответы
/
Промт-инжиниринг
/

Что такое temperature, top-p и как они влияют на вывод

Что такое temperature, top-p и как они влияют на вывод

11 часов назад

Никита Вихров

Ответы

0

Что такое temperature, top-p и как они влияют на вывод

Temperature и top-p — параметры, которые управляют случайностью в ответах модели. Звучит просто, но путаницы вокруг них много: разработчики либо не трогают дефолты вообще, либо крутят наугад и удивляются результату.


Как модель выбирает следующее слово

Модель не «думает» словами — она считает вероятности. На каждом шаге она видит все возможные следующие токены и их вероятности:

Входной текст: "Функция возвращает" Возможные продолжения: "значение" → 45% "None" → 20% "ошибку" → 15% "список" → 10% ...остальное → 10%

Temperature и top-p меняют то, как модель выбирает из этого распределения.


Temperature: насколько рискует модель

from anthropic import Anthropic

client = Anthropic()

def ask(prompt: str, temperature: float) -> str:
    response = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=256,
        temperature=temperature,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text


prompt = "Придумай название для библиотеки Python, которая парсит логи"

print(ask(prompt, temperature=0.0))
# → "LogParser" — самое очевидное, всегда одинаковое

print(ask(prompt, temperature=0.5))
# → "LogLens" — более интересно, но предсказуемо

print(ask(prompt, temperature=1.0))
# → "Lumberjack" — неожиданно, иногда интересно, иногда странно

print(ask(prompt, temperature=1.5))
# → "Grunkle" — скорее всего несвязная чепуха

Temperature = 0 — модель всегда выбирает самый вероятный токен. Детерминированно, предсказуемо, скучно.

Temperature = 1 — дефолт. Модель выбирает токены согласно исходному распределению.

Temperature > 1 — маловероятные токены получают больший шанс. Растёт креативность и количество бреда одновременно.


top-p: отсекаем хвост распределения

top-p (nucleus sampling) — альтернативный способ контролировать случайность. Вместо масштабирования всего распределения — отсекаем редкие токены.

top-p = 0.9: берём токены, которые в сумме дают 90% вероятности "значение" → 45% ✓ "None" → 20% ✓ (сумма 65%) "ошибку" → 15% ✓ (сумма 80%) "список" → 10% ✓ (сумма 90%) — стоп, дальше не берём Редкие токены с суммарной вероятностью 10% отрезаны
# top-p = 0.1 — очень консервативно, только самые вероятные токены
response_conservative = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=256,
    top_p=0.1,
    messages=[{"role": "user", "content": "Объясни что такое рекурсия"}]
)

# top-p = 0.95 — широкий выбор, почти всё распределение
response_diverse = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=256,
    top_p=0.95,
    messages=[{"role": "user", "content": "Объясни что такое рекурсия"}]
)

Что использовать на практике

# Детерминированные задачи: парсинг, извлечение данных, классификация
client.messages.create(temperature=0.0, ...)  # или top_p=0.1

# Написание кода, технические ответы
client.messages.create(temperature=0.2, ...)

# Обычный чат, объяснения
client.messages.create(temperature=0.7, ...)  # дефолт

# Генерация идей, названий, текстов
client.messages.create(temperature=0.9, ...)

# Творческое письмо
client.messages.create(temperature=1.0, top_p=0.95, ...)

Temperature или top-p — что выбрать

Не нужно использовать оба одновременно — это избыточно. Anthropic рекомендует менять один из параметров, оставляя второй на дефолте.

Практическое правило: используй temperature когда нужно контролировать «смелость» модели в целом. Используй top-p когда хочешь убрать совсем случайные токены, но сохранить нормальное разнообразие среди вероятных.

Для большинства продакшн-задач: temperature между 0 и 0.5. Выше — только если нужна генерация разнообразного контента.

11 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845