Температура, Top-K и Top-P: практическое руководство по выборке данных в LLM
Узнайте, как настройки температуры, top-k и top-p влияют на выводы больших языковых моделей, с практическими рекомендациями и типичными ошибками при настройке чат-ботов, помощников для программирования и систем RAG.
Вы запускаете чат-бота в прямом эфире. Людям это нравится. Но однажды днем кто-то публикует скриншот ответа настолько странного, что кажется, будто у модели был бредовый сон. В то же время ваш помощник-программист постоянно возвращает один и тот же универсальный ответ, независимо от того, как сформулирован вопрос, словно попугай, выучивший учебный план.
Оба этих симптома связаны с одной причиной: настройки выборки так и не были скорректированы.
На самом деле модель выполняет тысячи расчетов вероятностей, по одному токену за раз.
- Каждое слово.
- Каждая запятая.
- Каждая следующая идея.
И вот что большинство разработчиков упускают из виду:
Степень креативности, точности или предсказуемости ответа может резко меняться в зависимости всего от трех настроек: Temperature, Top-K и Top-P.
Эти три регулятора выполняют функцию рулевого колеса, определяющего поведение языковой модели.
Независимо от того, работаете ли вы с API OpenAI, моделями Anthropic, Google Gemini или семейством Llama от Meta, глубокое понимание этих параметров изменяет способ их использования при разработке.
Рассмотрим каждый из них не в академическом ключе, а так, чтобы вы могли немедленно применить полученные знания на практике.
Во-первых: как на самом деле генерируют текст ЯЗЫКОВЫЕ МОДЕЛИ
Прежде чем перейти к параметрам Temperature, Top-K и Top-P, необходимо усвоить одну основную идею.
Языковая модель не составляет предложения так, как это делает человек — она прогнозирует следующий токен по одному.
Возьмем в пример такой запрос:
"JavaScript — это"
Модель вычисляет набор возможных следующих токенов вместе с их вероятностями:
awesome -> 30%
a -> 25%
the -> 15%
used -> 10%
not -> 8%
weird -> 7%
broken -> 5%
Эти числа формируются на основе закономерностей, которые модель усвоила в процессе обучения на огромных объемах текста.
Настоящий вопрос заключается в следующем: какой именно токен выбирает модель на самом деле?
Это решение определяется параметрами выборки, которые действуют как фильтры для исходного списка вероятностей.
Если модель всегда выбирает токен с наивысшей вероятностью, такой подход называется жадным декодированием. Это кажется разумным, но он плохо справляется с задачами творческого письма, общения и любыми задачами, требующими тонкости, поскольку приводит к созданию однообразного, повторяющегося и чрезмерно осторожного текста.
Вместо этого модели обычно выбирают токены из распределения вероятностей, то есть определяют их на основе вероятности, а не всегда берут тот, что занимает первое место.
Температура: регулятор креативности
Температура — самый известный из трех параметров, но также тот, который люди чаще всего неправильно понимают.
Основная идея: температура влияет на то, насколько острой или рассеянной становится распределение вероятностей перед выбором токена.
- Низкая температура (примерно от 0,1 до 0,4): Усиливает остроту распределения. Токен, который и так имеет высокую вероятность, становится ещё более доминирующим, поэтому модель ведёт себя более предсказуемо, консервативно и последовательно.
- Высокая температура (примерно от 0,8 до 1,5 и выше): Сглаживает распределение. Токены с низкой вероятностью получают шанс быть выбранными, поэтому результаты становятся более творческими, неожиданными, а иногда и бессвязными.
- Температура = 0: Полностью детерминистично. Модель всегда выбирает токен с наивысшей вероятностью — по сути, это жадное декодирование.
- Температура = 1,0: Никакой корректировки не происходит. Модель использует исходные, немодифицированные вероятности.
Математика (не волнуйтесь, это просто)
По сути, температура делит каждый первоначальный показатель модели (логит) до того, как эти показатели преобразуются в вероятности:
adjusted_logit = original_logit / temperature
Затем эти пересчитанные логиты проходят через функцию softmax для получения окончательного распределения вероятностей.
- Деление на малое значение (низкая температура): Увеличивает разницу между логитами, усиливая четкость распределения, что позволяет модели с большей уверенностью выбирать наиболее вероятный вариант.
- Деление на большое значение (высокая температура): Сближает логиты, сглаживая распределение и внося больше случайности.
Пример: Температура = 0
Prompt: "Write a startup tagline for an AI coding tool."
Result: "Build software faster with AI."
Repeat the request ten times and you'll get the exact same line every time.
The reason is simple: temperature 0 always selects the single most probable token, with no exceptions.
This deterministic behavior is well suited to:
- Code generation
- SQL queries
- JSON output
- Structured data extraction
Example: Temperature = 0.3
Result: "Accelerate software development with intelligent AI."
Still fairly consistent, but with a touch more flexibility.
This range works well for:
- Technical writing
- Documentation
- API explanations
Example: Temperature = 1.0
Результат: «Ваш искусственный интеллект-помощник для превращения самых смелых идей в готовый код».
Теперь результаты имеют больше индивидуальности и разнообразия. Этот режим подходит для:
- Написания блогов
- Маркетинговых текстов
- Сессий мозгового штурма
Пример: температура = 2.0
Результат: «Мечты о коде. Создание целых вселенных. Перепишите завтрашний день с помощью кремниевого воображения».
Это вдохновляюще? Конечно.
Это практично? Не совсем.
Если установить слишком высокую температуру, есть риск получить текст, который практически не имеет смысла.
Когда использовать что
Use | CaseTemperature
========================|=================
Code generation | 0.0 – 0.2
Factual Q&A / RAG. | 0.1 – 0.3
Summarization | 0.3 – 0.5
Chatbot/conversation. | 0.6 – 0.8
Creative writing | 0.8 – 1.2
Brainstorming/ideation. | 1.0 – 1.5
Что такое Top-K?
Top-K ограничивает количество кандидатских токенов, которые модель может рассмотреть.
Вместо анализа всего словаря модель ограничивается K токенами с наибольшей вероятностью.
Правило по сути заключается в следующем:
«Игнорируйте всё, что находится вне топ-K кандидатов».
При значении K = 50 модель берёт во внимание только 50 наиболее вероятных следующих токенов. Все элементы, занимающие 51-е место и ниже, удаляются полностью, независимо от их первоначальной вероятности.
Зачем это нужно
Представьте распределение, охватывающее 50 000 возможных токенов. Даже токены с крайне малой вероятностью иногда могут быть выбраны, что приводит к странному или бессмысленному результату. Метод топ-K служит жёстким ограничением, по сути говоря: «мы даже не будем рассматривать отклонения».
Пример
Запрос:
«React — это»
Возможные следующие токены:
Token -> Probability
a -> 35%
the -> 20%
one -> 15%
becoming -> 10%
fast -> 8%
useful -> 7%
wild -> 5%
Top-K = 1
Сохраняется только: [a]
Результат: «React — это a»
Чрезвычайно безопасно, без каких-либо вариаций. Функционально это идентично алгоритму жадного декодирования.
Top-K = 3
Сохранено: [a, the, one]
Это вносит определённое умеренное разнообразие.
- React — это...
- React — это тот самый...
- React — один из...
Разумный компромисс.
Top-K = 5
Сохранено: [a, the, one, becoming, fast]
Больше возможностей для вариаций. Ответы становятся заметно более разнообразными.
Top-K = 50
Гораздо более широкий диапазон. Могут появиться необычные, но потенциально интересные варианты слов, хотя вероятность странных результатов также возрастает.
Аналогия Top-K в реальном мире
Представьте, что вы выбираете еду из меню с 200 блюдами.
Установка Top-K на 5 означает, что вы смотрите только на пять лучших рекомендуемых блюд.
Принятие решения становится более быстрым и менее сложным. Именно это и делает алгоритм Top-K для языковой модели.
Что такое Top-P? (Осевой отбор)
Top-P использует более тонкий подход по сравнению с Top-K.
Вместо обрезки списка по фиксированному количеству вариантов он обрезает его на основе накопленной вероятности. Вы продолжаете добавлять токены в порядке от наиболее вероятных к менее вероятным, пока их совокупная вероятность не достигнет значения P, после чего отбираются только токены из этого набора.
Таким образом, если установить P = 0.9, модель будет использовать самую маленькую возможную группу токенов, вероятности которых в сумме составляют 90% от общего распределения.
Почему «Осевой отбор»?
Название отражает идею о том, что токены с наивысшим рангом образуют ядро, «ядро», реалистичных продолжений. Всё, что находится вне этого ядра, считается шумом: токены с низкой вероятностью, которые модель технически оценила, но которые не должны считаться подлинными кандидатами для выборки.
Примеры вероятностей:
Top-P = 0.50
Продолжайте добавлять токены, пока суммарная вероятность не достигнет как минимум 50%.
A = 40% B = 25%
Суммарно = 65%
Оставлено: [A, B]
Top-P = 0.80
A = 40% B = 25% C = 20%
Суммарно = 85%
Оставлено: [A, B, C]
Top-P = 0.95
A+B+C+D = 95%
Оставлено: [A, B, C, D]
Важно понимать, что Top-P динамически изменяет список кандидатов.
Именно поэтому в современных решениях его часто предпочитают Top-K.
Типичные значения
P | ValueBehavior
=====|============================
0.5. | Very conservative, focused
0.75 | Balanced
0.9 | Standard creative tasks
0.95 | More exploratory
1.0 | No filtering (use all tokens)
Top-K против Top-P
Top-K работает с фиксированным количеством токенов.
Top-P работает с переменным количеством токенов.
Пример:
Когда распределение вероятностей имеет острый пик, Top-P может сохранить всего 2 токена.
Когда оно рассеянное, Top-P может сохранить 15 токенов.
Именно эта адаптивность делает его настолько эффективным.
Top-K говорит модели «выбери из этих X вариантов». Top-P говорит ей «выбери из всех хороших вариантов, которые существуют».
Это различие имеет большое значение на практике.
Использование их вместе (здесь всё становится серьезным)
Вот что редко объясняется четко: параметры temperature, Top-K и Top-P применяются последовательно, а не изолированно.
Типичная процедура выборки выглядит так:
Raw logits
↓
÷ Temperature (reshape the distribution)
↓
Apply Top-K (cut to top K tokens)
↓
Apply Top-P (cut to nucleus)
↓
Sample (pick one token from what's left)
На каждом этапе круг потенциальных токенов сужается ещё больше, и порядок применения этих фильтров имеет значение.
Практические рекомендации для реальных проектов
Рекомендация 1: Помощник с кодом
temperature = 0.1
top_p = 0.95
top_k = 40
Здесь важна предсказуемость, единственный правильный ответ и отсутствие неожиданностей. Низкая температура выполняет основную работу, в то время как Top-P служит дополнительным рычагом контроля.
Рекомендация 2: Чат-бот
temperature = 0.7
top_p = 0.9
top_k = 50
Этот подход позволяет получать диалоговые ответы, звучащие естественно, без проявлений случайности. Модель ведёт себя как человек, а не робот.
Рекомендация 3: Партнёр для творческого письма
temperature = 1.1
top_p = 0.95
top_k = 0 # disabled
Дайте модели возможность исследовать. Вам нужны настоящие творческие вариации, а не шаблонный контент. Top-K полностью отключается, что позволяет Top-P самостоятельно контролировать объём ответа.
Рекомендация 4: Система Factual RAG
temperature = 0.0
top_p = 1.0
top_k = 1
Это полностью жадное декодирование. Поскольку у модели уже есть соответствующий контекст, необходимо получить самый вероятный ответ без какого-либо случайного выбора, как это бывает, например, в процессе обработки счетов-фактур.
Рецепт 5: Написание блогов
Temperature = 0.8
Top-K = 40
Top-P = 0.95
Этот метод генерирует текст, который кажется естественным и привлекательным, подходящий для статей длинной формы.
Рецепт 6: Написание историй
Temperature = 1.2
Top-K = 100
Top-P = 0.98
Этот подход способствует созданию творческого, менее предсказуемого контента, что идеально подходит для художественной литературы.
Рецепт 7: Извлечение данных
Temperature = 0
Top-K = 1
Top-P = 1
Это строгий и полностью детерминированный подход, идеальный для задач таких как извлечение JSON-данных, классификация или выделение сущностей.
О проблемах, о которых вас никто не предупреждает
1. Более высокая температура не означает лучшего качества вывода
Хочется повысить температуру в надежде, что модель будет «лучше думать» или проявлять большую креативность. На самом деле это приводит к появлению шума: модель начинает использовать токены, которые она считает маловероятными, и обычно это имеет веские причины. В результате получается вымышленный контент, бессвязные фразы и ошибки в грамматике. Креативность, основанная на случайности, — это не то же самое, что креативность, возникающая в результате разумного мышления.
2. Температура = 0 является детерминистской только в рамках одной сессии
При температуре 0 модель фактически использует алгоритм argmax, всегда выбирая токен с наивысшей вероятностью. Однако при разном оборудовании, размере пакетов данных или версиях API даже незначительные различия в округлении чисел с плавающей точкой могут привести к небольшим отличиям в результатах. Не стоит ожидать идеальной воспроизводимости, если только вы не установите фиксированное значение случайного семени там, где это поддерживается API.
3. Top-P и Top-K могут противодействовать друг другу
Если значение Top-K установлено очень низко, например K=5, в то время как значение Top-P высокое, например P=0.95, то Top-K фактически имеет преимущество. Поскольку выборка уже ограничена 5 токенами, у Top-P не остается дополнительных вариантов для сокращения списка. Тщательно определите, какой параметр на самом деле выполняет функцию фильтрации в вашей конфигурации.
4. По умолчанию параметры различаются у разных поставщиков
Модель GPT-4 от OpenAI по умолчанию использует temperature=1.0 и top_p=1.0. Модели Claude от Anthropic не имеют единого универсального значения по умолчанию — оно меняется в зависимости от версии модели. В некоторых конфигурациях модель Gemini от Google часто использует temperature=1.0, top_p=0.95 и top_k=40.
Всегда проверяйте эти значения самостоятельно, а не полагайтесь на предположения. Перенос той же программы на другую модель без корректировки этих параметров может привести к существенно иным результатам работы.
Рекомендуемые стандартные значения
Разумная отправная точка для универсального использования выглядит следующим образом:
Корректируйте эти значения в зависимости от конкретной задачи.
Ментальная модель, которую следует запомнить
Если что-то ещё не усвоилось, запомните следующее:
Параметр температуры контролирует случайность. Параметр Top-K определяет количество доступных вариантов. Параметр Top-P задаёт границы вероятности для этих вариантов.
В этом заключается вся суть.
Как только вы поймёте, как взаимодействуют эти три параметра, вы перестанете просто «использовать» модель ИИ.
Вы начнёте целенаправленно формировать её результаты. Именно это отличие делает поверхностные запросы от профессиональных систем ИИ высокого уровня.
И в будущем это различие будет становиться только более важным.
Заключительные мысли
Многие разработчики тратят все свои усилия на совершенствование инструкций, но эти инструкции составляют лишь половину всей картины. Параметры генерации выполняют не менее важную роль, хотя и остаются менее заметными.
Часто они имеют даже большее значение, чем сама формулировка инструкции.
В следующий раз, когда ИИ сгенерирует что-то странное, не спешите винить модель.
Лучше проверьте:
- Температура
- Top-K
- Top-P
Иногда проблема не в самой модели.
Проблема в настройках. Как только вы это поймете, у вас появится гораздо более глубокий контроль над поведением этих систем.
Удачной разработки!
Связанные материалы
- Агенты данных, управляемые онтологиями, в Microsoft Fabric IQ: практическое руководство — Узнайте, как Microsoft Fabric IQ сочетает семантические модели, онтологии и MCP для того, чтобы перевести корпоративных ИИ-агентов от извлечения данных к управляемому бизнес-анализу.
- Понимание ИИ-агентов: цели, инструменты, память и цикл действий агента — Простое для новичков объяснение того, чем ИИ-агенты отличаются от чат-ботов, включающее основные компоненты, цикл принятия решений, уровни автономии и реальные примеры использования.