Параметры генерации
Параметры генерации определяют как модель выбирает следующий токен. Понимание этих параметров позволяет управлять балансом между точностью и креативностью ответа.
Как модель выбирает токен
После обработки контекста модель выдаёт распределение вероятностей по всем токенам словаря:
"Столица Франции — это"
→ "Париж" 42%
→ "город" 8%
→ "Лондон" 4%
→ "крупный" 3%
→ ...остальные 43% распределены по ~50K токенам
Параметры генерации меняют то, как именно выбирается токен из этого распределения.
Temperature
Контролирует "резкость" распределения вероятностей.
- Temperature = 0 — всегда берётся самый вероятный токен (детерминизм)
- Temperature > 1 — распределение сглаживается, маловероятные токены получают шанс
- Temperature < 1 — распределение заостряется, разница между вероятными и маловероятными увеличивается
Temperature = 0.0 Temperature = 1.0 Temperature = 1.5
"Париж" 99% "Париж" 42% "Париж" 28%
"город" 1% "город" 8% "город" 11%
"Лондон" 0% "Лондон" 4% "Лондон" 8%
Когда что использовать
| Temperature | Поведение | Применение |
|---|---|---|
| 0.0 | Детерминированный | Извлечение данных, SQL, JSON, классификация |
| 0.1–0.3 | Строгий, минимум вариаций | Суммаризация фактов, перевод |
| 0.5–0.7 | Сбалансированный | Ответы на вопросы, объяснения |
| 0.7–0.9 | Умеренно творческий | Общение, написание текстов |
| 1.0–1.2 | Творческий | Генерация идей, художественный текст |
| > 1.5 | Непредсказуемый | Редко, экспериментально |
:::tip Практика
Для большинства продуктовых задач: temperature = 0.7. Для структурированного вывода: temperature = 0.
:::
Top-p (Nucleus Sampling)
Ограничивает выбор токенами, которые суммарно набирают p% вероятности.
top_p = 0.9:
"Париж" 42% ← включён (42%)
"город" 8% ← включён (50%)
"Лондон" 4% ← включён (54%)
"крупный" 3% ← включён (57%)
... ← включаем пока не наберём 90%
все остальные ← исключены
Смысл: убирает совсем маловероятные ("мусорные") токены, оставляет осмысленный выбор.
| Top-p | Эффект |
|---|---|
| 1.0 | Нет фильтрации (все токены) |
| 0.9 | Стандарт, убирает редкий мусор |
| 0.7 | Более консервативный выбор |
| 0.1 | Почти как temperature=0 |
Не меняй одновременно temperature и top-p — они оба влияют на одно и то же. Обычно оставляют один из них по умолчанию.
Top-k
Ограничивает выбор k наиболее вероятными токенами.
top_k = 5:
"Париж" 42% ← включён
"город" 8% ← включён
"Лондон" 4% ← включён
"крупный" 3% ← включён
"прекрасный" 2% ← включён
всё остальное ← исключено
Разница с top-p: top-k фиксированное число токенов, top-p адаптируется к форме распределения.
Top-k используется реже в продакшене — top-p обычно лучше, так как автоматически адаптируется.
Max Tokens (Max Output Tokens)
Максимальная длина ответа модели в токенах.
max_tokens = 100 → ответ обрежется на 100 токенах, даже если не закончен
max_tokens = 4096 → стандартный лимит для большинства задач
Не путать с context window — это только лимит на генерируемую часть.
| Задача | Рекомендуемый max_tokens |
|---|---|
| Классификация / да-нет | 10–50 |
| Краткий ответ | 100–500 |
| Стандартный ответ | 1024–2048 |
| Длинный текст / анализ | 4096+ |
Всегда устанавливай разумный max_tokens — это защита от зависших запросов и неожиданных расходов.
Frequency Penalty
Штрафует токены, которые уже появлялись в ответе, пропорционально количеству появлений.
frequency_penalty = 0.0 → нет штрафа
frequency_penalty = 1.0 → токен штрафуется на каждое предыдущее появление
frequency_penalty = 2.0 → сильный штраф, почти никогда не повторяет
Применение: убрать "заезженные" фразы, монотонность, бесконечные повторения.
Presence Penalty
Штрафует токены, которые хоть раз появились в ответе (фиксированный штраф, не нарастающий).
presence_penalty = 0.0 → нет штрафа
presence_penalty = 1.0 → однократный штраф за каждый токен что уже встречался
Применение: стимулировать разнообразие тем в ответе.
| Параметр | Что делает | Когда |
|---|---|---|
| frequency_penalty | Бьёт за повторения пропорционально | Монотонные ответы |
| presence_penalty | Бьёт за любое повторение | Хочешь разнообразия тем |
Stop Sequences
Список строк, при появлении которых генерация немедленно останавливается.
stop=["###", "\n\nUser:", "<|end|>"]
Применение:
- Форматы с разделителями (CSV, JSON lines)
- Диалог-системы (остановить на реплике пользователя)
- Структурированный вывод
Seed
Фиксирует случайность для воспроизводимости.
seed=42 # при одинаковом seed и параметрах → одинаковый ответ
Применение: тестирование, отладка, A/B сравнение промтов.
Seed гарантирует воспроизводимость только на одной версии модели. После обновления модели — результат может измениться.
Типовые конфигурации
# Извлечение данных / JSON / SQL
{
"temperature": 0,
"max_tokens": 1024,
}
# Ответы на вопросы
{
"temperature": 0.3,
"max_tokens": 2048,
}
# Генерация контента
{
"temperature": 0.8,
"top_p": 0.9,
"max_tokens": 4096,
}
# Мозговой штурм / идеи
{
"temperature": 1.0,
"top_p": 0.95,
"presence_penalty": 0.5,
"max_tokens": 2048,
}
Резюме
| Параметр | Что делает | Диапазон |
|---|---|---|
| temperature | Случайность выбора токена | 0–2 |
| top_p | Фильтр по накопленной вероятности | 0–1 |
| top_k | Фильтр по числу токенов | 1–∞ |
| max_tokens | Лимит длины ответа | 1–∞ |
| frequency_penalty | Штраф за повторения (нарастающий) | 0–2 |
| presence_penalty | Штраф за любое повторение | 0–2 |
| stop | Стоп-строки | массив строк |
| seed | Воспроизводимость | целое число |