AI Prompt Engineering · Урок

Что такое температура в LLM

Температура как средство управления креативностью: 0 — детерминированный результат, 2 — хаотичный, а между ними — все промежуточные варианты.

Урок 1 из 413 шагов

«Что такое температура в LLM» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.

Как LLM выбирают следующий токен

На каждом шаге LLM выдаёт распределение вероятностей по всем токенам своего словаря (около 50 000 токенов для GPT). Модель присваивает каждому токену оценку, называемую логитом, — необработанное ненормализованное число. Чем выше логит, тем вероятнее токен.

Температура — это параметр, который управляет преобразованием этих необработанных логитов в вероятности перед выборкой.

Функция softmax

Логиты преобразуются в вероятности с помощью функции softmax. softmax принимает вектор логитов и выдаёт распределение вероятностей, сумма которых равна 1.

Рассмотрим небольшой пример со словарём из 4 токенов:

import numpy as np

# Raw logits from the model
logits = np.array([2.0, 1.0, 0.5, -1.0])  # scores for 4 tokens

# Standard softmax (temperature = 1)
def softmax(logits, temperature=1.0):
    scaled = logits / temperature
    exp_scaled = np.exp(scaled - np.max(scaled))  # subtract max for numerical stability
    return exp_scaled / exp_scaled.sum()

probs = softmax(logits, temperature=1.0)
print('Probabilities:', np.round(probs, 3))
# [0.567, 0.208, 0.129, 0.095]
# Token 0 is most likely at 56.7%

Температура = 0: жадное декодирование

Когда температура приближается к 0, распределение softmax схлопывается: токен с наивысшим логитом получает вероятность около 1,0, а вероятности всех остальных приближаются к 0. Модель всегда выбирает единственный наиболее вероятный токен.

Это называется жадным декодированием. Оно детерминировано: один и тот же запрос всегда даёт один и тот же вывод. Ноль случайности, ноль творческой вариативности.

# Temperature = 0 (greedy)
probs_temp0 = softmax(logits, temperature=0.01)  # near-zero
print('Probs at T=0.01:', np.round(probs_temp0, 4))
# [~1.0, ~0.0, ~0.0, ~0.0]

# In practice, temperature=0 is implemented as argmax:
def greedy_sample(logits):
    return np.argmax(logits)  # always returns the index of the highest logit

token_idx = greedy_sample(logits)
print(f'Selected token index: {token_idx}')  # always 0

Температура = 1: стандартная выборка

Температура = 1 применяет softmax без масштабирования — распределение вероятностей отражает естественную уверенность модели. Модель выбирает токены согласно этим вероятностям: вероятные токены появляются часто, маловероятные — редко, но иногда.

Это значение используется по умолчанию в большинстве диалоговых сценариев. Оно создаёт разнообразный и естественный вывод, сохраняя его связность.

# Temperature = 1 (standard)
probs_temp1 = softmax(logits, temperature=1.0)
print('Probs at T=1.0:', np.round(probs_temp1, 3))
# [0.567, 0.208, 0.129, 0.095]

# Sampling from this distribution:
def sample_token(probs):
    vocab = ['the', 'a', 'an', 'is']
    return np.random.choice(vocab, p=probs)

# Run 10 times to see variation
for _ in range(10):
    print(sample_token(probs_temp1), end=' ')
# Output varies each time, but 'the' appears most often

Температура = 2: хаотическая выборка

Высокая температура (> 1) выравнивает распределение вероятностей — все токены становятся почти одинаково вероятными. Модель становится непредсказуемой и часто теряет связность.

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

# Temperature = 2 (chaotic)
probs_temp2 = softmax(logits, temperature=2.0)
print('Probs at T=2.0:', np.round(probs_temp2, 3))
# [0.385, 0.261, 0.211, 0.143]
# Much flatter — the 4th token (logit=-1.0) now has 14.3% chance
# (vs 9.5% at T=1.0)

# Visualization: compare distributions
for temp in [0.1, 0.5, 1.0, 1.5, 2.0]:
    probs = softmax(logits, temperature=temp)
    print(f'T={temp}: {np.round(probs, 3)}')

Температура как регулятор резкости

Концептуально температура управляет резкостью распределения:

  • Низкая температура (0,1–0,4): резкий пик — модель уверена в ответе и выбирает безопасные или распространённые токены
  • Средняя температура (0,6–1,0): естественная форма — сбалансированные творческие возможности и связность
  • Высокая температура (1,2–2,0): плоское распределение — модель свободно исследует маловероятные токены

Представляйте это как регулятор творческой свободы: низкая температура обеспечивает точность, высокая — экспериментальность.

import matplotlib
# Conceptual: what distribution shape looks like at different temps
temps = {'T=0.2 (sharp)': 0.2, 'T=1.0 (normal)': 1.0, 'T=2.0 (flat)': 2.0}
for label, temp in temps.items():
    probs = softmax(logits, temp)
    bar = '#' * int(probs[0] * 40)
    print(f'{label}: top token = {probs[0]:.1%} |{bar}|')
# T=0.2: top token = 97.2% |########################################|
# T=1.0: top token = 56.7% |######################|
# T=2.0: top token = 38.5% |###############|

Температура и детерминированность

Важный нюанс: температура = 0 делает выборку детерминированной. При температуре > 0 каждый запуск даёт другой результат, поскольку выборка — случайный процесс. Распределение фиксировано, но результат выборки меняется.

Для воспроизводимых результатов при тестировании всегда устанавливайте температуру = 0. В рабочей среде, если нужна вариативность, используйте начальное значение, если API это поддерживает.

import openai
client = openai.OpenAI(api_key='sk-...')

# Deterministic: temperature=0
resp1 = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'What is the capital of France?'}],
    temperature=0
)
resp2 = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'What is the capital of France?'}],
    temperature=0
)
print(resp1.choices[0].message.content == resp2.choices[0].message.content)  # True (usually)

Как температура взаимодействует с top-p

Температура и top-p (выборка по ядру) формируют распределение выборки, но на разных этапах:

  • Температура: масштабирует логиты перед softmax — изменяет форму полного распределения
  • Top-p: после softmax обрезает распределение до массы вероятности p — выборка выполняется только из набора наиболее вероятных токенов

Совместное использование этих параметров обеспечивает точный контроль. Обычно рекомендуется изменять только один параметр за раз. Одновременное изменение обоих параметров затрудняет предсказание эффекта.

# Using temperature with top_p in OpenAI API
resp = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'Write a one-line haiku about code.'}],
    temperature=0.9,  # moderately diverse distribution
    top_p=0.95        # sample from top 95% of probability mass
)

Практические значения температуры для разных задач

Краткая справка по распространённым типам задач:

  • Фактические вопросы и ответы: 0 — ответы должны быть точными, вариативность не нужна
  • Генерация кода: 0–0.2 — синтаксис должен быть корректным
  • Суммаризация: 0.3–0.5 — некоторая вариативность допустима
  • Чат / диалог: 0.7–0.9 — естественные, разнообразные ответы
  • Творческое письмо: 0.9–1.2 — желательна разнообразность
  • Мозговой штурм / разработка идей: 1.0–1.5 — исследуйте неожиданные варианты
TEMPERATURE_PRESETS = {
    'factual_qa': 0.0,
    'code_generation': 0.1,
    'summarization': 0.4,
    'chat': 0.8,
    'creative_writing': 1.1,
    'brainstorming': 1.3
}

def call_with_preset(task_type, prompt):
    temp = TEMPERATURE_PRESETS.get(task_type, 0.7)
    return client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}],
        temperature=temp
    )

Температура в API

Температура поддерживается всеми основными API для LLM. Допустимый диапазон составляет 0–2 для OpenAI и 0–1 для Anthropic Claude. Превышение максимального значения вызывает ошибку.

# OpenAI: temperature 0 to 2
client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': prompt}],
    temperature=1.2  # Valid for OpenAI
)

# Anthropic Claude: temperature 0 to 1
import anthropic
claude = anthropic.Anthropic(api_key='sk-ant-...')
claude.messages.create(
    model='claude-opus-4-5',
    max_tokens=1024,
    temperature=0.8,  # Max is 1.0 for Claude
    messages=[{'role': 'user', 'content': prompt}]
)

Когда одной температуры недостаточно

Одной температуры не всегда достаточно, чтобы получить нужные разнообразие или точность. Если температура=0 всё ещё даёт разные результаты (на некоторых моделях это возможно из-за недетерминированности вычислений с плавающей точкой), используйте seed для полной воспроизводимости. Если высокая температура приводит к бессмыслице, ограничьте словарь с помощью top-p или top-k, вместо того чтобы повышать температуру.

# Seed for reproducibility (OpenAI API)
resp = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': prompt}],
    temperature=0,
    seed=42  # Guarantees same output across calls on same model version
)

# Note: same output only guaranteed with same model version
# A model update can change outputs even with the same seed

Проверка знаний

Что происходит с распределением вероятностей токенов, когда температура устанавливается на очень высокое значение, например 2.0?

Итоги: температура в LLM

Температура управляет случайностью выборки токенов, масштабируя логиты перед softmax:

  • T=0: жадный режим — всегда выбирается наиболее вероятный токен, результат детерминирован
  • T=1: стандартный режим — выборка выполняется согласно естественному распределению вероятностей
  • T>1: хаотичный режим — распределение становится более плоским, случайность повышается, связность снижается

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

Можно начать бесплатно

Изучай AI Prompt Engineering с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
53
Уроки
199

Часто задаваемые вопросы

Урок «Что такое температура в LLM» бесплатный?

Да — полный текст урока «Что такое температура в LLM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.

Чему я научусь в уроке «Что такое температура в LLM»?

Температура как средство управления креативностью: 0 — детерминированный результат, 2 — хаотичный, а между ними — все промежуточные варианты. Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Prompt Engineering?

Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Что такое температура в LLM»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Prompt Engineering?

Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Что такое температура в LLM
  2. Выборка по ядру top-p
  3. Выборка top-k
  4. Выбор параметров для вашего сценария
← Назад к AI Prompt Engineering