## Następny token

*Jak model czyta i przewiduje*

*Ostatnia zmiana: 28 września 2026*

Model nie zwraca tekstu, tylko wynik (logit) dla każdego tokena ze słownika. Osobny kod, sampler, zamienia wyniki w prawdopodobieństwa i losuje jeden token. Tak powstaje każdy token odpowiedzi, jeden po drugim.

**Po ludzku:** Klawiatura w telefonie podpowiada trzy słowa. Model robi to samo dla stu tysięcy kawałków słów naraz, a potem rzuca kostką obciążoną tymi szansami. Temperatura decyduje, jak mocno obciążona jest kostka.

*Interaktywny widżet na stronie: Zmieniaj temperaturę i top-p, a potem losuj. Porównaj pytanie, na które model zna odpowiedź, takie, na które odpowiada pewnie i błędnie, i takie, przy którym zgaduje.*

### Od logitów do tokena

- Softmax z temperaturą: `p = exp(logit / T) / Σ exp(logit / T)`. T poniżej 1 wyostrza rozkład, powyżej 1 go spłaszcza, T → 0 to zawsze najlepszy token (greedy), a bardzo wysokie T zbliża rozkład do jednostajnego. Temperatura nie zmienia kolejności tokenów, tylko odstępy między nimi.
- Obcinanie ogona: top-k zostawia k najlepszych tokenów, top-p (nucleus) najmniejszy zbiór pokrywający np. 90% prawdopodobieństwa, min-p odrzuca tokeny słabsze niż ułamek najlepszego. Top-p i min-p dopasowują się do pewności modelu: gdy model jest pewny, zostaje jeden kandydat, gdy niepewny – kilkadziesiąt. W Hugging Face i vLLM temperatura działa przed obcinaniem, więc wpływa na to, co zostanie.
- Wylosowany token trafia na koniec tekstu i nie da się go cofnąć. Kolejne tokeny muszą do niego pasować, więc jeden pechowy token z ogona potrafi pociągnąć za sobą całe zmyślone zdanie.
- Sampler może też zerować tokeny niezgodne ze schematem JSON. Tak działa structured output (zobacz „Wymuszanie formatu”).

### Pułapki

- Greedy nie znaczy najlepiej. Wybieranie zawsze najbardziej prawdopodobnego tokena prowadzi do powtórzeń i pętli (Holtzman i in., 2019). DeepSeek zaleca dla R1 temperaturę 0,5–0,7 właśnie przeciw niekończącym się powtórzeniom. Kary za powtórzenia (repetition, frequency, presence penalty) obniżają logity już użytych tokenów: ograniczają pętle, ale karzą też uzasadnione powtórzenia, np. nazwy zmiennych w kodzie czy klucze JSON.
- Temperatura 0 nie daje pełnej powtarzalności. Obliczenia na GPU dają minimalnie inne liczby zależnie od tego, ile requestów trafiło do batcha, a przy prawie równych logitach to zmienia wybrany token i całą resztę odpowiedzi. Parametr `seed`, tam gdzie API go ma, nie gwarantuje determinizmu. Przy self-hostingu determinizm dają kernele niezależne od batcha, kosztem prędkości (vLLM: `VLLM_BATCH_INVARIANT=1`).
- Rozkład nie mierzy prawdy. Płaski rozkład bywa sygnałem niewiedzy, ale też kilku równie dobrych sformułowań. Model bywa pewny błędnej odpowiedzi, a sampler zawsze coś wybierze i zdanie zabrzmi równie pewnie. Niższa temperatura nie leczy zmyśleń, tylko czyni je powtarzalnymi (zobacz „Halucynacje”).

### Co ustawiasz w praktyce

- W modelach bez rozumowania: ekstrakcja, klasyfikacja i kod przy niskiej temperaturze, 0–0,3; pisanie i szukanie pomysłów przy 0,7–1. Zmieniaj temperaturę albo top-p, nie oba naraz, i sprawdzaj efekt na zestawie ewaluacyjnym, a nie na jednej próbce.
- `logprobs` w API pokazują ten rozkład, zwykle sprzed temperatury i top-p (domyślnie w vLLM). Przydają się do progu pewności w klasyfikacji: każesz modelowi odpowiedzieć jednym tokenem etykiety i czytasz prawdopodobieństwo każdej etykiety. API Claude ich nie zwraca, a OpenAI tylko przy wyłączonym rozumowaniu.
- Kilka próbek przy T > 0 i głosowanie większością (self-consistency) podnosi trafność w zadaniach z jedną poprawną odpowiedzią, a niezgodność próbek jest sygnałem niepewności. Kosztuje tyle razy więcej tokenów, ile próbek.
- Przy modelach rozumujących sampler bywa zablokowany (stan na wrzesień 2026). Claude Opus od wersji 4.7 i Claude Sonnet 5 odrzucają błędem 400 wartości `temperature`, `top_p` i `top_k` inne niż domyślne, a OpenAI przy włączonym rozumowaniu nie przyjmuje `temperature`, `top_p` ani `logprobs`. Sterujesz wtedy poziomem rozumowania i promptem. Tam, gdzie model rozumujący je przyjmuje, zostaw wartości zalecane przez dostawcę: Google zdecydowanie zaleca temperaturę 1,0 dla wszystkich modeli Gemini 3 i ostrzega, że niższa może wpędzić model w pętle. Niska temperatura to narzędzie dla modeli bez rozumowania.

### Sprawdź się

**Pytanie:** Jak model wybiera następny token i jak dobierasz temperaturę i top-p?

**Krótka odpowiedź:** Model zwraca logity dla całego słownika. Softmax z temperaturą, exp(logit/T), zamienia je w rozkład: T poniżej 1 wyostrza, powyżej 1 spłaszcza, a T = 0 to zawsze najlepszy token. Top-p zostawia najmniejszy zbiór tokenów pokrywający np. 90% prawdopodobieństwa i odcina ogon, z którego biorą się dziwne tokeny. W modelach bez rozumowania ekstrakcja i kod dostają niską temperaturę, teksty twórcze wyższą; zmieniaj jeden parametr naraz i sprawdzaj na ewaluacjach. T = 0 nie daje pełnej powtarzalności, a modele rozumujące często blokują sampler albo, jak Gemini 3, działają najlepiej przy domyślnym 1,0.

### Pytania pogłębiające

- **Czemu temperatura 0 nie daje pełnej powtarzalności?** Wynik zależy od tego, z kim request trafił do batcha: inny rozmiar batcha to inna kolejność działań zmiennoprzecinkowych i minimalnie inne logity. Przy dwóch tokenach o prawie równych logitach to wystarczy, żeby wybrać inny, a dalej rozjeżdża się cała odpowiedź.
- **Top-k, top-p, min-p: jaka różnica?** Top-k zostawia stałą liczbę kandydatów bez względu na pewność modelu. Top-p zostawia tylu, żeby pokryć zadany procent prawdopodobieństwa, więc dopasowuje się do rozkładu. Min-p odcina tokeny słabsze niż ułamek najlepszego, np. 0,1 × jego prawdopodobieństwo. Autorzy min-p piszą, że lepiej znosi wysoką temperaturę, ale ponowna analiza z 2025 r. uznała, że ich dowody tego nie potwierdzają.
- **Czy niższa temperatura zmniejsza halucynacje?** Tylko te, które biorą się z wylosowania tokena z ogona. Jeśli model „wierzy” w błędny fakt, T = 0 wybierze go za każdym razem (zobacz „Halucynacje”).
- **Jak użyć logprobs do klasyfikacji?** Każ modelowi odpowiedzieć jednym tokenem etykiety i odczytaj prawdopodobieństwo każdej etykiety. Dostajesz rozkład zamiast jednej odpowiedzi i ustawiasz próg, poniżej którego sprawa idzie do człowieka. Próg kalibruj na własnych danych, bo po post-trainingu pewność modelu bywa zawyżona.

### Źródła

- [Holtzman i in.: The Curious Case of Neural Text Degeneration (top-p, 2019)](https://arxiv.org/abs/1904.09751)
- [Hugging Face: How to generate text](https://huggingface.co/blog/how-to-generate)
- [Thinking Machines: Defeating Nondeterminism in LLM Inference](https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/)
- [Dokumentacja Claude: migracja na Opus 5.5 (m.in. parametry samplowania)](https://platform.claude.com/docs/en/models/opus-5-5/migration-guide)
- [Gemini API: przewodnik po Gemini 3 (temperatura)](https://ai.google.dev/gemini-api/docs/gemini-3)

Strona interaktywna: https://howaiworks.dev/pl/sampling/
