Kromě promptu předáváš modelu i pár čísel, která řídí, jak bude odpovídat: jak moc riskuje při výběru tokenů, kdy přestane a co si nechá zakázat. Je jich jen hrstka a devadesát procent práce odvedou dva z nich,
temperatureamax_tokens. Zbytek si nastavíš jednou a zapomeneš.
temperature, jak moc model riskuje
Model má pro další token spočítané pravděpodobnosti. temperature určuje, jak věrně se jich drží:
temperature 0 → ber skoro vždy nejpravděpodobnější token
temperature 0.7 → obvyklý kompromis, občas sáhne po méně pravděpodobném
temperature 1.5 → hodně náhody, kreativní až zmatené
| Chceš | Nastav |
|---|---|
| Extrakci dat, klasifikaci, JSON | 0 – 0.2 |
| Odpovědi zákazníkům, shrnutí | 0.3 – 0.7 |
| Nápady, texty, varianty | 0.8 – 1.2 |
⚠️
temperature: 0nezaručí identický výstup při každém běhu. Zaručí jen, že model nebude losovat; drobné rozdíly ve výpočtu a verzích stejně existují. Nikdy nestav test na přesné shodě řetězců.
top_p, druhá páka na tutéž věc
top_p (nucleus sampling) říká: ber jen z tokenů, které dohromady tvoří p procent
pravděpodobnosti. top_p = 0.9 odřízne dlouhý chvost nesmyslů.
Praktická rada: měň jen jedno z toho. Většina lidí nechá top_p na 1 a řídí jen temperature.
Ladit obojí naráz vede k tomu, že nevíš, co ti co udělalo.
max_tokens, kde se odpověď utne
Strop na délku odpovědi. Dvě věci, které tě zaskočí:
- Není to instrukce, je to sekáček. Když limit dojde uprostřed věty, dostaneš useknutý text
(a u JSONu nevalidní výstup). Stručnost si vyžádej v promptu,
max_tokensje jen pojistka. - Počítá se do okna. Vstup + výstup musí dohromady projít kontextovým oknem.
Odpověď má vždycky nějaký důvod ukončení (stop, length, tool_use…). Kontroluj ho,
useknutá odpověď kvůli limitu je tichá chyba, která ti proteče do dat.
stop sekvence
Text, na kterém má generování skončit. Hodí se, když model rád pokračuje dál, než chceš:
stop: ["\n\nUživatel:", "```"]
Typicky u vlastních formátů nebo když si model začne sám vymýšlet další repliky konverzace.
seed a reprodukovatelnost
Některá API umí seed, stejný seed a stejný vstup by měly dát stejný výstup. Je to
nejlepší snaha, ne záruka; při změně verze modelu padá. Používej to na ladění, ne jako základ
testů.
🎯 Co se s logits děje krok za krokem a jak se formát vynutí maskováním, popisuje vzorkování a řízené dekódování.
Ostatní, které potkáš
frequency_penalty/presence_penalty: trestají opakování slov, respektive témat. Sáhneš po nich, jen když se model zacyklí. Většinou lepší opravit prompt.n: kolik variant odpovědi vygenerovat naráz. Užitečné, když chceš vybrat nejlepší ze tří, ale platíš všechny.response_format/json_schema: vynucení strukturovaného výstupu, viz strukturovaný výstup. Tohle je mnohem spolehlivější než prosba v promptu.
Rozumné výchozí nastavení
{
"temperature": 0.2,
"top_p": 1,
"max_tokens": 1000,
"response_format": { "type": "json_schema", "…": "…" }
}
Pro aplikaci, která něco extrahuje nebo klasifikuje, tohle sedne v devíti z deseti případů.
Kreativní psaní si zvedni na 0.8.
Cvičení
- Ke každé úloze přiřaď rozumnou
temperaturea zdůvodni: extrakce částky z faktury, generování variant reklamního claimu, klasifikace tikety do kategorie, psaní pohádky. - Nastavíš
temperature 0a stejný prompt přesto dvakrát vrátí jinou odpověď. Jak je to možné?
Náčrt řešení: rozbal, až si cvičení zkusíš sám
- Extrakce 0, klasifikace 0, claimy 0,9 až 1,0, pohádka 0,8 až 1,0. Pravidlo je jednoduché: když existuje jedna správná odpověď, chceš nulu, protože jakákoli náhoda může jen uškodit. Když chceš rozmanitost a správných odpovědí je mnoho, jdi nahoru. Střední hodnoty kolem 0,5 bývají nejhorší volba: pro data zbytečně riskantní, pro tvorbu zbytečně nudné.
- Protože „temperature 0“ neznamená deterministický systém. Výběr tokenu sice přestane být náhodný, ale výpočet samotný ano: dávkování požadavků mění pořadí operací v plovoucí čárce, běh může skončit na jiné kartě a poskytovatel může model tiše aktualizovat. Při shodě dvou logits na několika desetinných místech pak stačí drobná odchylka a vyhraje jiný token. Viz vzorkování.
Shrnutí
temperatureřídí náhodu; nízká pro data a formáty, vyšší pro tvorbu.top_pdělá podobnou věc, měň jen jedno z nich.max_tokensje sekáček, ne instrukce; vždy kontroluj důvod ukončení.- Reprodukovatelnost je nejlepší snaha, nikdy záruka.
Aplikace vytahuje z faktur částky a občas dostaneš pokaždé jiné číslo. Co nastavíš?
Snížíš temperature k nule, aby model nelosoval, a výstup vynutíš strukturovaně (JSON schéma)
plus zvalidíš v kódu. Extrakce dat je úloha, kde kreativita jen škodí.
Odpověď se občas utne uprostřed JSONu. Kde je chyba?
Nejspíš došel max_tokens, ten funguje jako tvrdý sekáček, ne jako pokyn ke stručnosti. Zvedni
limit, zkrať požadovaný výstup a vždy kontroluj důvod ukončení, aby ti useknutá odpověď neprošla
tiše dál.
Proč nestavět automatické testy na tom, že model vrátí přesně stejný text?
Protože ani při temperature: 0 není výstup zaručeně identický, hraje roli implementace výpočtu
i verze modelu. Testuj strukturu, přítomnost klíčových údajů nebo významovou shodu, ne doslovný
řetězec.
