Третий рычаг управления моделью — после формы и способа мышления. На первый взгляд — про «креативность». На самом деле — про распределение вероятностей и как ты с ним играешь.
Temperature — это параметр, который управляет степенью случайности в ответе модели. При низкой температуре модель выбирает самые вероятные токены — детерминированно, скучно, точно. При высокой — допускает менее вероятные варианты — креативно, разнообразно, рискованно. Это не «креативность» в человеческом смысле, это математический параметр. Понимая, как он работает, ты подбираешь его под класс задачи, а не «методом тыка».
Модель генерирует ответ токен за токеном. На каждом шаге она получает список из десятков тысяч возможных следующих токенов, и у каждого — своя вероятность.
Например, после фразы «Столица Франции — » у модели в голове примерно такое распределение:
Температура — это параметр, который пересчитывает это распределение перед выбором. На математическом уровне он сглаживает или заостряет кривую вероятностей.
temperature = 0 → модель всегда берёт самый вероятный токен. temperature = 1 → берёт случайно согласно естественному распределению. temperature > 1 → распределение сглаживается, маловероятные варианты становятся реальнее.
Поэтому low-temperature ответы — скучные и предсказуемые: модель всегда выбирает «среднестатистическое следующее слово». High-temperature — разнообразные, иногда странные: модель допускает редкие варианты, которые ведут текст в неожиданные стороны.
Параметр обычно в диапазоне от 0 до 2 (некоторые провайдеры — до 1, у некоторых другие диапазоны, всегда проверяй документацию). Условно делим на три зоны:
Правило: чем больше у задачи правильного ответа — тем ниже температура. Чем больше задача про вариативность и свежесть — тем выше.
«Извлеки из текста все email», «классифицируй отзыв», «достань цену из описания». Один правильный ответ есть — пусть модель его и даёт.
«Переведи на английский», «упрости язык». Допустима лёгкая вариативность стиля, но смысл должен сохраняться железно.
Чат-боты, объяснение концепций, ответы на вопросы. Естественный тон, разнообразие формулировок.
Тексты для маркетинга, статьи, диалоги. Здесь однообразие — враг.
«Дай 20 идей для названия». Чем выше температура, тем более неожиданные варианты будут в списке. Качество идей — отдельный вопрос, главное — широта.
Когда хочешь увидеть «что модель вообще может сказать» — на пределе шкалы. На практике — почти никогда.
Если в задаче один правильный ответ или узкий класс правильных — температура низкая. Если задача про генерацию опций или про стиль — повышай.
Не повторяй ошибку: «выкручу температуру повыше, чтобы было креативнее». В системах, которые что-то парсят или решают — это путь к багам, потому что выше температура = больше странных токенов = больше нестабильность формата.
У большинства провайдеров рядом с temperature есть параметр top_p (nucleus sampling). Он делает похожую вещь — управляет случайностью — но по-другому: отсекает токены с накопленной вероятностью больше p.
На практике для большинства задач это взаимозаменяемые рычаги, и провайдеры советуют менять только один из них. Менять оба сразу — путь к хаосу, потому что они начинают перекрывать эффект друг друга.
Совет: если ты не уверен, что именно делаешь — оставь top_p = 1 (выключен) и крути только temperature. Этого достаточно для 99% случаев.
Распространённое заблуждение: «поставлю temperature = 0, получу один и тот же ответ всегда». Это почти так, но не совсем.
Во-первых, при равенстве вероятностей разных токенов модель должна как-то выбирать — и тут может быть случайность. Во-вторых, у провайдеров есть свои внутренние недетерминизмы: распределённые вычисления, разные GPU, кеши. Поэтому два одинаковых запроса с T=0 чаще всего дают одинаковый ответ, но не гарантированно.
Для настоящего детерминизма у некоторых провайдеров есть параметр seed — фиксирует генератор случайных чисел. Тоже не 100%-я гарантия, но сильно повышает воспроизводимость для отладки и тестов.
«Ответы скучные — выкручу температуру». Часто это не помогает, а делает хуже: ответы становятся не «креативнее», а просто странными. Если ответы скучные — это чаще проблема промпта, а не температуры. Уточни system, добавь конкретики, дай примеры стиля. И только потом крути ползунок.
«Хочу креативный JSON». При высокой температуре модель чаще промахивается мимо формата: лишний пробел, неправильная кавычка, обрыв на полуслове. Конфликт целей: либо строгая структура + низкая T, либо креативность + готовность к ошибкам парсинга.
Хорошее решение: используй response_format или Structured Outputs (см. День 2). Они гарантируют формат даже при высокой температуре.
Промпт долго настраивал, всё работает — и тут решил «поднять креативность». Часто промпт был оптимизирован под конкретное значение температуры. Поменял T — система начала вести себя по-другому. Если меняешь — обязательно перепроверь весь набор тестовых запросов, не только один.
В плейграунде задай вопрос «Опиши закат в одно предложение». Прогон 1: temperature = 0. Прогон 2: 0.7. Прогон 3: 1.5. Сравни. Заметишь: на 0 — описание клишированное, «золотое солнце садится за горизонт». На 0.7 — живо, разнообразно. На 1.5 — иногда красиво, иногда странно или несвязно. Это твоё личное ощущение шкалы.
Возьми текст с несколькими email-адресами. Промпт: «Извлеки все email из текста, верни JSON-массив». Прогон 5 раз с T=0.9. Прогон 5 раз с T=0. Сравни стабильность — на T=0 ответ будет идентичен или почти идентичен, на 0.9 — может варьироваться формат, иногда теряются email, иногда добавляются комментарии. Это показывает, почему для парсинга T=0 — норма.
Задача: «Дай 10 идей для названия кофейни». Прогон с T=0.3 — увидишь, что идеи будут вертеться вокруг одной семантики («Утренний кофе», «Кофейный уголок», «Кафе Бариста»). Прогон с T=1.2 — идеи будут разнообразнее, среди них появятся неожиданные, иногда — глупые. Для брейншторма второе полезнее: лучше 10 разных идей, из которых отберёшь 2-3, чем 10 похожих.