Sampling Parameters

Параметры сэмплирования управляют тем, как из распределения вероятностей следующего токена выбирается конкретный токен: temperature (разнообразие), top-p / top-k (отсечение хвоста), max_tokens (лимит длины/цены), stop/EOS (когда остановиться), seed (фиксация случайности).

Суть

Трансформер (Transformer) выдаёт вероятности по всему словарю. Дальше токен выбирается не всегда самый вероятный — параметры задают, насколько случайным и разнообразным будет выбор.

Зачем это нужно

Под разные задачи нужен разный режим: для классификации/факта — детерминированный ответ (всегда один и тот же), для креатива — разнообразие. Без понимания этих параметров получаешь либо «скучную» однообразность, либо непредсказуемость и галлюцинации. max_tokens напрямую влияет на стоимость (см. Context Window, Reasoning Effort).

Как работает

  • Temperature — сглаживает/заостряет распределение. 0 ≈ детерминированно (всегда самый вероятный токен), выше — более творческий/разнообразный текст.
  • Top-k — выбираем только из k самых вероятных токенов; top-p (nucleus) — из минимального набора, чья суммарная вероятность ≥ p. Оба отсекают маловероятный «хвост». На практике сначала настраивают temperature, а top-p/top-k — вторичный рычаг (трогают редко).
  • max_tokens — потолок длины генерации (чтобы «не генерить бесконечно» и не переплачивать).
  • stop / EOS — генерация заканчивается по специальному токену конца (EOS) или по лимиту длины. Набор стоп-причин зависит от провайдера (stop, length, content_filter, tool_calls).
  • seed — фиксация случайности для воспроизводимости.
  • Greedy vs sampling: greedy всегда берёт самый вероятный токен (детерминированно, но скучно/повторы); sampling выбирает случайно пропорционально вероятностям. T=0 формально невозможен (деление на 0), на практике = argmax (полный детерминизм — для кода/математики/воспроизводимости).
  • Откуда берётся распределение: финальный вектор последнего токена × output-матрица (d_model × vocab_size) → логиты → softmax → вероятности. Иногда output-матрица — та же, что матрица эмбеддингов (tied embeddings, экономит ~500M параметров).
  • Практические значения T: 0 — детерминизм; 0.1–0.3 — код/математика; 0.7–1.0 — диалог; 1.0–1.5 — творчество.
  • Дефолт для агентных tool-calls — детерминизм temperature=0: одинаковые входы → одинаковые аргументы инструментов и воспроизводимость (см. LangGraph Reliability).

Пример

resp = client.chat(
    model="gpt-...",
    messages=[...],
    temperature=0,      # детерминированный ответ (классификация)
    top_p=1,
    max_tokens=500,     # лимит длины и стоимости
)

Авторегрессивная генерация

LLM генерирует авторегрессивно: каждый следующий токен зависит от всех предыдущих. На каждом шаге вся последовательность (промпт + уже сгенерированное) прогоняется через все блоки, выбирается один токен (по правилам выше), добавляется ко входу — и цикл повторяется до EOS или лимита. Это не рекуррентность (цикл внутри одного прохода, как в RNN), а внешний цикл по проходам; пересчёт прошлого устраняется через KV Cache.

Связано с

  • Transformer — откуда берутся вероятности
  • Reasoning Effort — max_tokens на thinking-блок как рычаг усилия
  • Context Window — длина вывода добавляется к стоимости контекста
  • KV Cache — ускоряет авторегрессивную генерацию (кэш K/V)
  • LangGraph Reliability — детерминизм tool-calls (temperature=0) для воспроизводимости