Menu

Temperatura w LLM: co robi i jak ją ustawić

Temperatura kontroluje, ile losowości model językowy stosuje przy wyborze każdego kolejnego słowa. Zobacz, jak zmienia szanse poszczególnych słów, kiedy ustawiać ją nisko albo wysoko i czym różni się od top_p.

Każdy prompt poniżej możesz edytować: zmień go, a potem otwórz w ChatGPT, Claude lub innej aplikacji AI.

Temperatura to liczba, która kontroluje, ile losowości model językowy stosuje przy wyborze kolejnego słowa. Przy niskiej temperaturze model prawie za każdym razem bierze najbardziej prawdopodobne słowo, więc odpowiedzi są skupione i powtarzalne. Przy wysokiej temperaturze szanse się rozkładają, więc odpowiedzi różnią się bardziej i czasem zbaczają z tematu. Temperatura zmienia sposób, w jaki model wybiera spośród słów, które już bierze pod uwagę; nie zmienia tego, co model wie.

Jak model wybiera kolejne słowo

Model pisze po jednym tokenie, a token to słowo albo kawałek słowa (zobacz tokeny i okno kontekstu). Na każdym kroku przyznaje każdemu tokenowi ze swojego słownika wynik nazywany logitem. Funkcja softmax zamienia te wyniki na prawdopodobieństwa: każdy wynik jest podnoszony do potęgi, a potem dzielony przez sumę wszystkich, więc wyższe wyniki dostają większe udziały, a wszystkie udziały sumują się do 1. Następnie model losuje jeden token zgodnie z tymi udziałami.

Temperatura wchodzi do gry tuż przed softmaxem. Każdy wynik jest dzielony przez temperaturę T:

probability(word) = exp(score / T) / sum of exp(score / T) over all candidates

Przy T poniżej 1 odstępy między wynikami rosną, więc lider jeszcze bardziej się oddala. Przy T powyżej 1 odstępy maleją, więc słabsi kandydaci doganiają czołówkę. Przy T = 1 dostajesz własne prawdopodobieństwa modelu. Przy T = 0 dzielenie jest nieokreślone, więc API traktują to jako "zawsze bierz najlepszy token", co nazywa się dekodowaniem zachłannym (greedy decoding).

Wypróbuj: suwak temperatury

Poniższe demo kontynuuje zdanie "Mój ulubiony język programowania to" sześcioma kandydującymi słowami. Wyniki są poglądowe, dobrane na potrzeby tego demo; prawdziwy model ocenia słownik liczący dziesiątki tysięcy tokenów albo więcej, a nazwa języka może być podzielona na kilka tokenów. Matematyka jest prawdziwa: słupki to softmax tych wyników przy wybranej temperaturze, a przycisk losowania wybiera z nich dziesięć słów.

Mój ulubiony język programowania to …
Next word probabilities
Python46%
JavaScript28%
Rust14%
C7.6%
Haskell3.4%
COBOL0.8%
Samples
Press Sample to let the model pick a word ten times.

Przy 1.0 Python dostaje około 46%, a COBOL poniżej 1%. Przesuń na 0.5, a Python wzrośnie do około 67%, podczas gdy COBOL prawie zniknie. Przesuń na 2.0, a Python spadnie do około 32%, podczas gdy COBOL wzrośnie do około 4%, więc mniej więcej jedna na trzy rundy po dziesięć losowań zawiera go co najmniej raz. Zwróć uwagę, co nigdy się nie dzieje: kolejność słów pozostaje taka sama przy każdym ustawieniu. Temperatura nie sprawi, że COBOL będzie bardziej prawdopodobny niż Python; tylko poszerza albo zwęża odstępy.

Prawdziwa odpowiedź to setki takich wyborów z rzędu, a każdy wybór staje się częścią kontekstu dla następnego. Jedno nietypowe słowo na początku zmienia wszystko, co po nim następuje, i dlatego odpowiedź przy wysokiej temperaturze odpływa znacznie dalej, niż sugeruje pojedyncze słowo w tym demo.

Kiedy używać niskiej, a kiedy wysokiej temperatury

ZadaniePunkt wyjściaDlaczego
Kod, poprawki błędów, SQLNiska, od 0 do 0.3Zwykle jest jedna najlepsza kontynuacja i chcesz tego samego wyniku przy każdym uruchomieniu
Wyciąganie danych, klasyfikacja, JSON0Każda zmienność to szum, a wynik musi odczytać program
Wyjaśnienia, codzienne pytaniaDomyślna dostawcyWartości domyślne są dobrane do ogólnego użytku
Burza mózgów, nazwy, pomysły na historieDomyślna albo nieco wyższaChcesz opcji, które różnią się od siebie

Dwie przestrogi. Po pierwsze, niska temperatura nie sprawia, że odpowiedź jest prawdziwa. Jeśli najbardziej prawdopodobna odpowiedź modelu jest błędna, temperatura 0 daje ci tę błędną odpowiedź za każdym razem, tyle że konsekwentnie; zobacz halucynacje AI. Po drugie, bardzo wysokie wartości (wyraźnie powyżej 1 w API, których skala sięga 2) często dają tekst, który gubi wątek albo przestaje mieć sens, bo mało prawdopodobne tokeny są wybierane coraz częściej.

Czasem losowość jest celem. Self-consistency prompting celowo uruchamia to samo pytanie wymagające rozumowania kilka razy przy niezerowej temperaturze, a potem wybiera odpowiedź, co do której zgadza się większość uruchomień.

Temperatura, top_p i top_k

Próbkowanie kontrolują jeszcze dwa inne ustawienia i API często udostępniają je obok temperatury.

top_p (nucleus sampling) zostawia tylko najbardziej prawdopodobne tokeny, których prawdopodobieństwa sumują się do p, i losuje spośród nich. Na liczbach z demo przy temperaturze 1: Python, JavaScript i Rust dają razem około 88%, a dodanie C przekracza 90%. Zatem przy top_p = 0.9 model losuje tylko spośród tych czterech; Haskell i COBOL nigdy się nie pojawią. W przeciwieństwie do temperatury top_p się dostosowuje: gdy model ma pewność, próg przechodzi niewiele tokenów, a gdy jest niepewny, przechodzi ich wiele.

top_k zostawia stałą liczbę najbardziej prawdopodobnych tokenów, na przykład 40 najlepszych. Niektóre API je oferują, a inne nie.

Dostawcy zwykle zalecają zmianę albo temperatury, albo top_p, a nie obu naraz, bo ich efekty nakładają się w trudny do przewidzenia sposób.

Ustawianie temperatury w API

Aplikacje czatowe ukrywają to ustawienie, ale API przyjmują je jako parametr. Zakres zależy od dostawcy: Chat Completions API od OpenAI przyjmuje wartości od 0 do 2, a Messages API od Anthropic od 0 do 1. Niektóre modele rozumujące akceptują tylko wartość domyślną.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
    temperature=0.2,
)
print(response.choices[0].message.content)
import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    temperature=0.2,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
)
print(message.content[0].text)

Dlaczego aplikacje czatowe to ukrywają i co robić zamiast tego

Aplikacje ChatGPT, Claude i Gemini wybierają ustawienia próbkowania za ciebie i nie pokazują suwaka. Dzięki temu są prostsze, a przy większości próśb przeformułowanie promptu zmienia odpowiedź znacznie bardziej niż ustawienie próbkowania.

W aplikacji czatowej to prompt jest więc twoją kontrolką. Prośba o jedną odpowiedź daje coś bliskiego pierwszemu wyborowi modelu. Prośba o wiele odpowiedzi różniących się od siebie daje różnorodność przy dowolnej temperaturze, bo model ma teraz powód, żeby unikać swojego pierwszego wyboru. Przełączaj zakładki i zmieniaj produkt, żeby zobaczyć różnicę.

Fill in
Zaproponuj nazwę dla aplikacji do śledzenia nawyków.
Try it
Example replyReplies vary between models and runs.

Nawykomat. Jest krótka, łatwa do zapamiętania i kojarzy się z codziennym powtarzaniem, które sprawia, że ludzie wracają.

Przycisk ponownego generowania w aplikacji czatowej losuje nową odpowiedź z tego samego promptu, co szybko pokazuje, jak bardzo odpowiedzi się różnią. Jeśli różnią się bardziej, niż chcesz, poprawką jest zwykle bardziej konkretny prompt: precyzyjne zadanie zawęża zakres dobrych odpowiedzi, a przez to uruchomienia są do siebie bardziej podobne. Co dodać, opisuje poradnik pisania promptów.

Najczęściej zadawane pytania

Czym jest temperatura w LLM?

Temperatura to ustawienie próbkowania, które kontroluje, jak losowy jest wybór każdego kolejnego tokenu. Model przyznaje każdemu możliwemu następnemu tokenowi wynik, a wyniki są dzielone przez temperaturę, zanim zostaną zamienione na prawdopodobieństwa. Niskie wartości pozwalają dominować najlepszemu wyborowi; wysokie spłaszczają szanse, więc mniej prawdopodobne tokeny są wybierane częściej.

Jakiej temperatury używać do kodowania?

Niska wartość, gdzieś między 0 a 0.3, to typowy punkt wyjścia dla kodu, wyciągania danych i każdego zadania z jedną poprawną odpowiedzią, bo chcesz najbardziej prawdopodobnej kontynuacji i powtarzalnych wyników. Podnieś ją, gdy zależy ci na różnorodności, na przykład przy wymyślaniu nazw albo alternatywnych projektów. Niektóre modele rozumujące akceptują tylko wartość domyślną, więc sprawdź dokumentację swojego dostawcy.

Czym różni się temperatura od top_p?

Temperatura zmienia kształt całego rozkładu prawdopodobieństwa. top_p, nazywane też nucleus sampling, go przycina: model losuje tylko z najmniejszej grupy tokenów, których prawdopodobieństwa sumują się do p, więc top_p = 0.9 odcina długi ogon mało prawdopodobnych tokenów. Dostawcy zwykle zalecają zmianę jednego z tych dwóch ustawień i pozostawienie drugiego na wartości domyślnej.

Czy temperatura 0 sprawia, że wynik jest deterministyczny?

Prawie, ale nie całkiem. Przy 0 model na każdym kroku bierze najbardziej prawdopodobny token, więc powtórzone uruchomienia są zwykle identyczne albo bardzo podobne. Drobne różnice numeryczne na serwerach dostawcy mogą jednak od czasu do czasu zmienić jakiś token, a gdy jeden token jest inny, reszta odpowiedzi może pójść inną drogą.

Czy mogę zmienić temperaturę w ChatGPT albo Claude?

Nie w aplikacjach czatowych: wybierają ustawienia próbkowania za ciebie i nie pokazują kontrolki temperatury. Możesz ją ustawić przez API i w narzędziach deweloperskich, takich jak Playground OpenAI, Anthropic Console i Google AI Studio. W aplikacji czatowej poproś o różnorodność albo spójność w samym prompcie.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ