Temperature, Top-K, and Top-P: A Practical Guide to LLM Sampling
Learn how temperature, top-k, and top-p settings control LLM output, with practical recipes and pitfalls for tuning chatbots, coding assistants, and RAG systems.
Wprowadzasz chatbota do użycia. Ludziom się podoba. Pewnego popołudnia ktoś publikuje zrzut ekranu z odpowiedzi tak dziwacznej, że wygląda, jakby model miał gorączkowy sen. W tym samym czasie twój asystent do programowania ciągle zwraca identyczną, ogólnikową odpowiedź, bez względu na to, jak sformułujesz pytanie, niczym papuga, która zapamiętała program nauczania.
Oba te objawy wynikają z jednej przyczyny: ustawienia próbkowania nigdy nie zostały dostosowane.
W tle model przeprowadza tysiące obliczeń prawdopodobieństwa, po jednym tokenie naraz.
- Każde słowo.
- Każda przecinka.
- Każda kolejna myśl.
A oto to, co większość programistów przeocza:
To, na jak kreatywną, dokładną lub przewidywalną będzie odpowiedź, może się drastycznie zmieniać w zależności od zaledwie trzech ustawień: Temperature, Top-K i Top-P.
Te trzy pokrętła pełnią rolę kierownicy określającej zachowanie modelu językowego.
Niezależnie od tego, czy pracujesz z API OpenAI, modelami Anthropic, Google Gemini, czy rodziną Llama od Meta, zrozumienie tych parametrów zmienia sposób, w jaki nimi korzystasz podczas tworzenia.
Rozpatrzmy każdy z nich, nie w sposób akademicki, lecz w taki, który można faktycznie zastosować.
Najpierw: Jak modele językowe faktycznie generują tekst
Zanim przejdziemy do Temperature, Top-K i Top-P, należy zrozumieć jedną podstawową koncepcję.
Model językowy nie tworzy zdań w taki sam sposób jak człowiek – on przewiduje kolejne tokeny, po jednym.
Weźmy jako przykład następujące polecenie:
"JavaScript jest"
Model oblicza zestaw potencjalnych kolejnych tokenów wraz z ich prawdopodobieństwami:
awesome -> 30%
a -> 25%
the -> 15%
used -> 10%
not -> 8%
weird -> 7%
broken -> 5%
Te liczby pochodzą z wzorców, które model przyswoił podczas treningu na ogromnych ilościach tekstu.
Prawdziwe pytanie brzmi: który z tych tokenów faktycznie zostanie wybrany?
Ta decyzja jest kierowana przez parametry próbkowania, które działają jak filtry na surowej liście prawdopodobieństw.
Gdyby model zawsze wybierał jedynie token o najwyższym prawdopodobieństwie, taka metoda nazywałaby się greedy decoding. Brzmi to rozsądnie, ale sprawdza się słabo w pisaniu kreatywnym, rozmowach oraz przy jakichkolwiek zadaniach wymagających subtelności, ponieważ skutkuje to tekstami nudnymi, powtarzalnymi i nadmiernie ostrożnymi.
Zamiast tego modele zazwyczaj próbkują z rozkładu prawdopodobieństwa, co oznacza, że wybierają tokeny na podstawie ich prawdopodobieństwa, a nie zawsze ten o najwyższej pozycji.
Temperatura: Regulacja kreatywności
Temperatura jest najbardziej znanym z tych trzech parametrów, a także tym, który jest najczęściej nieporozumiewany.
Główna idea: temperatura wpływa na to, na ile ostry lub rozproszyony będzie rozkład prawdopodobieństwa przed wybraniem tokena.
- Niska temperatura (około 0,1 do 0,4): Sprawia, że rozkład staje się ostrzejszy. Już wcześniej prawdopodobny token staje się jeszcze bardziej dominujący, dzięki czemu model zachowuje się w sposób bardziej przewidywalny, konserwatywny i spójny.
- Wysoka temperatura (około 0,8 do 1,5 i wyżej): Wygładza rozkład. Tokeny, które wcześniej były mało prawdopodobne, mają większe szanse na wybór, więc wynik staje się bardziej kreatywny, zaskakujący, a czasami niejasny.
- Temperatura = 0: Całkowicie deterministyczne zachowanie. Model zawsze wybiera najbardziej prawdopodobny token — w istocie jest to dekodowanie chciwe.
Matymatyka (nie martw się, to proste)
W rzeczywistości temperatura dzieli każdą surową ocenę modelu (logit), zanim zostaną one przekształcone w prawdopodobieństwa:
adjusted_logit = original_logit / temperature
Następnie te przeskalowane logity przechodzą przez funkcję softmax, aby uzyskać ostateczną rozkład prawdopodobieństw.
- Dzielenie przez małą wartość (niska temperatura): Rozdziela logity bardziej, co sprawia, że rozkład staje się ostrzejszy, dzięki czemu model z większą pewnością wybiera swój najlepszy wariant.
- Dzielenie przez dużą wartość (wysoka temperatura): Zbliża logity do siebie, spłaszcza rozkład i wprowadza więcej losowości.
Przykład: Temperatura = 0
Zadanie: ">Napisz hasło reklamowe dla narzędzia do programowania opartego na AI."
Wynik: ">Buduj oprogramowanie szybciej dzięki AI."
Powtórz to zadanie dziesięć razy i za każdym razem otrzymasz dokładnie tę samą frazę.
Powód jest prosty: temperatura 0 zawsze wybiera najbardziej prawdopodobny token, bez żadnych wyjątków.
To deterministyczne zachowanie doskonale nadaje się do:
- Generowania kodu
- Zapytań SQL
- Wydawania danych w formacie JSON
- Ekstrakcji strukturyzowanych danych
Przykład: Temperatura = 0,3
Wynik: ">Zwiększ szybkość rozwoju oprogramowania dzięki inteligentnej AI."
Nadal dość spójne, ale z nieco większą elastycznością.
Ten zakres dobrze sprawdza się przy:
- Pisaniu tekstów technicznych
- Dokumentacji
- Wyjaśnianiu API
Przykład: Temperatura = 1,0
Wynik: " Twój asystent AI do przekształcania pomysłów z północy w kod produkcyjny."
Teraz wyniki mają większą indywidualność i różnorodność. Ten zakres nadaje się do:
- pisania blogów
- tekstów marketingowych
- sesji burzy mózgów
Przykład: Temperatura = 2,0
Wynik: " Marzenia o kodzie. Wysyłanie galaktyk. Przepisuj jutro dzięki wyobraźni opartej na krzemie."
Czy to kreatywne? Oczywiście.
Czy to praktyczne? Nie do końca.
Jeśli temperatura będzie zbyt wysoka, istnieje ryzyko powstania tekstu, który nie ma większego sensu.
Kiedy używać czego
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
Co to jest Top-K?
Top-K ogranicza liczbę kandydujących tokenów, które model może rozważyć.
Zamiast badać całe słownictwo, model ogranicza się do K tokenów o najwyższej prawdopodobieństwie.
Zasada jest zasadniczo następująca:
">Odrzuć wszystko poza pierwszymi K kandydatami.
Gdy K = 50, model bierze pod uwagę tylko 50 najbardziej prawdopodobnych kolejnych tokenów. Wszystko, co zajmuje 51. miejsce lub jest niżej, zostaje całkowicie usunięte, niezależnie od tego, jak duże było jego pierwotne prawdopodobieństwo.
Dlaczego to istnieje
Wyobraź sobie rozkład obejmujący 50 000 możliwych tokenów. Nawet te o bardzo małym prawdopodobieństwie mogą czasami zostać wybrane, co skutkuje dziwnym lub bezsensownym wynikiem. Funkcja Top-K pełni rolę sztywnej granicy, mówiąc w zasadzie: ">nie będziemy nawet rozważać wartości poza tą granicą."
Przykład
Zapytanie:
"React to"
Kandydaci na kolejne tokeny:
Token -> Probability
a -> 35%
the -> 20%
one -> 15%
becoming -> 10%
fast -> 8%
useful -> 7%
wild -> 5%
Top-K = 1
Zachowano tylko: [a]
Wynik: "React to a"
Bardzo bezpieczne, bez żadnych zmian kreatywnych. Funkcjonalnie jest to identyczne z dekodowaniem chciwym.
Top-K = 3
Zachowane: [a, the, one]
To wprowadza pewną kontrolowaną różnorodność.
Mogłe uzupełnienia to:
- React jest…
- React to…
- React jest jednym z…
Rozsądne kompromisowe rozwiązanie.
Top-K = 5
Zachowane: [a, the, one, becoming, fast]
Top-K = 50
Znacznie szerszy zakres. Mogą pojawić się nietypowe, ale potencjalnie interesujące wybory słów, choć rośnie też szansa na dziwne wyniki.
Analogia z rzeczywistego życia dla Top-K
Pomyśl o wyborze jedzenia z menu zawierającego 200 pozycji.
Ustawienie Top-K na 5 oznacza, że spojrzysz tylko na pięć najlepiej polecanych dań.
Decyzja staje się szybsza i mniej przytłaczająca. To właśnie robi Top-K dla modelu językowego.
Czym jest Top-P? (Nucleus Sampling)
Top-P stosuje bardziej wyrafinowany podejście niż Top-K.
Zamiast ograniczać się do określonej liczby kandydatów, ogranicza je na podstawie nagromadzonej prawdopodobieństwa. Dodaje się tokeny w kolejności od najbardziej prawdopodobnych do najmniej prawdopodobnych, aż ich łączne prawdopodobieństwo osiągnie wartość P, po czym pobiera się próbki tylko z tej grupy.
Zatem jeśli ustawisz P = 0,9, model korzysta z najmniejszej możliwej grupy tokenów, których łączne prawdopodobieństwo stanowi 90% całkowitego rozkładu.
Dlaczego „Nucleus Sampling”?
Nazwa odzwierciedla ideę, że najwyżej rankowane tokeny tworzą rdzeń, „jądro”, realistycznych kontynuacji. Wszystko poza tym rdzeniem jest traktowane jako szum: tokeny o niskiej prawdopodobieństwie, które model technicznie ocenił, ale które nie powinny być prawdziwymi kandydatami do wyboru.
Prawdopodobieństwa przykładowe:
Top-P = 0,50
Należy dodać tokeny aż łączna wartość osiągnie co najmniej 50%.
A = 40% B = 25%
Łącznie = 65%
Zachowane: [A, B]
Top-P = 0,80
A = 40% B = 25% C = 20%
Łącznie = 85%
Zachowane: [A, B, C]
Top-P = 0,95
A+B+C+D = 95%
Zachowane: [A, B, C, D]
Najważniejsze jest to, że Top-P dynamicznie zmienia liczbę kandydatów.
Dlatego właśnie w nowoczesnych rozwiązaniach często jest preferowany przed Top-K.
Typowe wartości
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 vs Top-P
Top-K funkcjonuje przy stałej liczbie tokenów.
Top-P funkcjonuje przy zmiennej liczbie tokenów.
Przykład:
Gdy rozkład prawdopodobieństwa ma ostry szczyt, Top-P może zachować tylko 2 tokeny.
Gdy jest rozproszony, Top-P może zachować 15 tokenów.
To właśnie ta adaptacyjność sprawia, że jest tak skuteczny.
Top-K mówi modelowi „wybierz spośród tych X opcji”. Top-P mówi mu „wybierz spośród wszystkich dostępnych dobrych opcji”.
To rozróżnienie ma duże znaczenie w praktyce.
Używanie ich razem (tu zaczyna się prawdziwa praca)
Oto co rzadko jest jasno wyjaśniane: temperatura, Top-K i Top-P są stosowane sekwencyjnie, a nie oddzielnie.
Typowy proces próbkowania wygląda następująco:
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)
Każdy etap dalej zawęża zbiór kandydujących tokenów, a kolejność stosowania tych filtrów ma znaczenie.
Pрактиczne rozwiązania dla rzeczywistych projektów
Rozwiązanie 1: Asystent kodu
temperature = 0.1
top_p = 0.95
top_k = 40
Tutaj potrzebna jest przewidywalność, jedna prawidłowa odpowiedź i brak niespodzianek. Niska temperatura wykonuje większość pracy, podczas gdy Top-P pełni rolę dodatkowej ochrony.
Rozwiązanie 2: Chatbot
temperature = 0.7
top_p = 0.9
top_k = 50
To pozwala na generowanie rozmownych, naturalnie brzmiących odpowiedzi bez przejścia w stronę losowości. Model brzmi jak człowiek, a nie robot.
Rozwiązanie 3: Partner do twórczego pisania
temperature = 1.1
top_p = 0.95
top_k = 0 # disabled
Daj modelowi przestrzeń do eksploracji. Szukasz prawdziwej kreatywnej różnorodności, a nie generycznych treści. Top-K jest całkowicie wyłączony, dzięki czemu Top-P samodzielnie zajmuje się filtrowaniem.
Rozwiązanie 4: System Factual RAG
temperature = 0.0
top_p = 1.0
top_k = 1
To jest pełne dekodowanie oparte na zasadzie chciwości. Ponieważ model już posiada odpowiedni kontekst, szuka się jednej najbardziej prawdopodobnej odpowiedzi, bez żadnego losowego próbkowania, podobnie jak w procesach przetwarzania faktur.
Przepis 5: Pisanie bloga
Temperature = 0.8
Top-K = 40
Top-P = 0.95
Takie podejście daje tekst, który brzmi naturalnie i angażuje czytelnika, nadający się do artykułów o dłuższej formie.
Przepis 6: Pisanie opowiadań
Temperature = 1.2
Top-K = 100
Top-P = 0.98
Metoda ta sprzyja kreatywnym, mniej przewidywalnym wynikom, doskonale nadającym się do literatury fikcyjnej.
Przepis 7: Wydobywanie danych
Temperature = 0
Top-K = 1
Top-P = 1
Jest to surowe i całkowicie deterministyczne podejście, idealne do zadań takich jak wydobywanie danych w formacie JSON, klasyfikacja czy identyfikacja entytetów.
Potknięcia, o których nikt cię nie ostrzega
1. Wyższa temperatura nie oznacza lepszych wyników
Jest kuszące zwiększyć temperaturę w nadziei, że model będzie „myślał intensywniej” lub stanie się bardziej kreatywny. W rzeczywistości powoduje to dodanie szumu – model zaczyna korzystać z tokenów, które ocenił jako mało prawdopodobne, i to zazwyczaj z uzasadnionych powodów. Skutkiem jest treść wytworzona w wyniku halucynacji, bezzasadne połączenia słów oraz błędy gramatyczne. Kreatywność napędzana przypadkowością nie jest tym samym co kreatywność wynikająca z rozsądnych rozważań.
2. Temperatura = 0 jest deterministyczna tylko w ramach jednej sesji
Pри temperaturze 0 model faktycznie stosuje algorytm argmax, zawsze wybierając token o najwyższej prawdopodobieństwie. Jednak przy różnym sprzęcie, rozmiarach partii danych lub wersjach API nawet niewielkie różnice w zaokrąglaniu liczb zmiennoprzecinkowych mogą prowadzić do nieco innych wyników. Nie zakładaj perfekcyjnej powtarzalności, chyba że ustalisz również losowy seed tam, gdzie API to umożliwia.
3. Top-P i Top-K mogą się wzajemnie wykluczać
Jeśli Top-K jest ustawiony na bardzo niską wartość, np. K=5, podczas gdy Top-P jest ustawiony wysoko, np. P=0.95, to Top-K faktycznie przeważa. Ograniczyłeś już próbkowanie do 5 tokenów, więc Top-P nie ma już żadnego dodatkowego zakresu do skrócenia. Zastanów się dokładnie, który parametr faktycznie realizuje prawdziwe filtrowanie w twojej konfiguracji.
4. Domyślne ustawienia różnią się między dostawcami
GPT-4 od OpenAI ma domyślnie ustawione temperature=1.0 oraz top_p=1.0. Modele Claude od Anthropic nie podają jednego uniwersalnego domyślnej wartości – ta zmienia się w zależności od wersji modelu. Gemini od Google często używa w niektórych konfiguracjach temperature=1.0, top_p=0.95 oraz top_k=40.
Zawsze sprawdzaj te wartości osobiście, zamiast zakładać coś bez upewnienia się. Przeniesienie tej samej aplikacji na inny model bez dostosowania tych parametrów może prowadzić do znacznie różnego zachowania.
Zalecane domyślne ustawienia
Rozsądny punkt wyjścia o uniwersalnym zastosowaniu wygląda następująco:
Dostosuj te wartości w zależności od konkretnego zadania.
Model mentalny, który powinieneś pamiętać
Jeśli nic innego nie utknie ci w pamięci, zapamiętaj to:
Temperatura kontroluje losowość. Top-K określa, ile opcji istnieje. Top-P określa granice prawdopodobieństwa tych opcji.
To jest cały obraz sytuacji.
Gdy zrozumiesz, jak te trzy elementy ze sobą współdziałają, przestaniesz po prostu „korzystać” z modelu AI.
Zaczniesz celowo projektować jego wyniki. To właśnie ta zmiana odróżnia przypadkowe próby generowania treści od systemów AI o profesjonalnym poziomie.
A w przyszłości ta różnica stanie się jeszcze ważniejsza.
Ostateczne refleksje
Wielu programistów poświęca cały swój czas doskonaleniu promptów, ale prompty stanowią zaledwie połowę równania. Parametry próbkowania to mniej widoczne elementy sterujące, które pełnią równie ważną rolę.
Często mają one nawet większe znaczenie niż sam sformułowanie promptu.
Następnym razem, gdy model językowy wygeneruje coś dziwnego, nie obwiniaj od razu modelu.
Zamiast tego sprawdź:
- Temperatura
- Top-K
- Top-P
Czasami to nie model jest źródłem problemu.
To twoja konfiguracja. Gdy to pojmiesz, uzyskasz znacznie głębszą kontrolę nad zachowaniem tych systemów.
Szerokie możliwości programowania!
Powiązane materiały
- Agenty danych zasilane ontologiami w Microsoft Fabric IQ: Praktyczny przewodnik — Dowiedz się, jak Microsoft Fabric IQ łączy modele semantyczne, ontologie oraz MCP, aby przenieść agenty AI w przedsiębiorstwach z prostego pobierania danych do zintegrowanego rozumowania biznesowego.
- Zrozumienie agentów AI: cele, narzędzia, pamięć i pętla agenta — Przystępne dla początkujących wyjaśnienie różnic między agentami AI a chatbotami, obejmujące podstawowe komponenty, pętlę decyzyjną, poziomy autonomii oraz praktyczne zastosowania w rzeczywistym świecie.