Lekce 02.6: Bezestavovost (Statelessness)
🧠 Mentální model & teoretický rozbor
Největší klam, kterému podléhají i zkušení programátoři, je pocit, že vedou s modelem plynulý rozhovor. Ve skutečnosti je LLM z fyzikálního i matematického hlediska zcela bezestavový stroj (Stateless Function).
ILUZE: "Model si pamatuje, co jsme si říkali před 5 minutami."
REALITA BEZESTAVOVOSTI:Při KAŽDÉM vašem stisku Enter vezme harness:[Systémový prompt] + [Zpráva 1] + [Odpověď 1] + [Zpráva 2] + [Odpověď 2] + [Vaše nová zpráva]Zabalí je do jednoho pole a pošle jako nový, nezávislý požadavek na server.
Server:1. Spustí maticové násobení vah nad tímto obřím textem od prvního do posledního písmene.2. Vygeneruje odpověď.3. Okamžitě smaže veškerý výpočetní kontext z RAM.Model si vás „nepamatuje“. Pokaždé, když s ním mluvíte, je to jako by se právě probudil s totální amnézií a někdo mu před obličej strčil přepis celé dosavadní konverzace.
🏢 Realistický scénář z praxe
Vývojář ladí funkci:
- V tahu 3 napíše: „Změň název na
calculateTotala pamatuj si, že daň je vždy 21 %.“ - V tahu 8 (po 5 dalších úpravách): „Přidej ještě slevový kupón.“
- Model spočítá slevu, ale daň nastaví na 20 %.
- Vývojář nechápe: „Vždyť jsem ti říkal, že daň je 21 %!“
- Vysvětlení: Model si nic „nepamatoval“. Informace o 21 % byla pouze jedním z tisíců slov v historii. Pokud tato hodnota není zapsána jako konstanta v kódu (
const TAX_RATE = 0.21;), spoléhání na konverzační paměť je fatální chybou.
💻 Konkrétní ukázky kódu & promptů
Důsledek bezestavovosti: Paměť musí žít v kódu, ne v chatu!
❌ Špatný přístup (Spoléhání na paměť modelu):
(V chatu): Pamatuj si, že v celém projektu nesmíš používat knihovnu moment.js, ale jedině date-fns.(Při příštím sezení nebo po /clear model toto pravidlo nezná).
✅ Správný inženýrský přístup (Trvalé ukotvení v prostředí):
- Zapsat pravidlo do
CLAUDE.md:- **Práce s datem**: Striktní zákaz `moment.js`. Používej výhradně `date-fns/format` a `date-fns/parseISO`. - Zapsat pravidlo do ESLint konfigurace (
eslint.config.js):export default [{rules: {'no-restricted-imports': ['error', { paths: [{ name: 'moment', message: 'Použij date-fns.' }] }]}}];
⚠️ Analýza selhání & Anti-patterns
Chyba: Nekonečné prodlužování konverzace namísto zápisu do souboru
Vývojář vysvětluje agentovi složitou byznys logiku 10 minut v terminálu.
Na konci sezení zadá /clear nebo vypne počítač.
Druhý den ráno musí všechno vysvětlovat znovu od začátku, protože informace žila pouze v dočasném poli zpráv daného sezení.
🛠️ Inženýrský postup krok za krokem (Playbook)
- Pravidlo trvalého zápisu: Jakékoliv architektonické rozhodnutí, na kterém se s agentem shodnete, musí být okamžitě zapsáno do souboru na disku (do kódu, do testu nebo do
docs/adr/). - Test po restartu: Chcete-li ověřit, zda je projekt soběstačný, zadejte
/cleara požádejte agenta, aby spustil testy. Pokud agent bez vaší nápovědy ví, co má dělat, máte skvěle nastavený repozitář.
🧪 Praktické cvičení (Hands-on Lab)
Úkol:
Vyzkoušejte si bezestavovost na vlastním sezení.
Kroky:
- Spusťte
claude. - Řekněte mu: „Moje tajné heslo pro dnešní den je ModryKocour42.“
- Nechte ho vygenerovat jednoduchou funkci.
- Zadejte příkaz
/clear. - Zeptejte se ho: „Jaké je moje tajné heslo?“
- Sledujte, jak model popravdě odpoví, že žádné heslo nezná.
- Zamyslete se: Co by se stalo, kdybyste heslo uložili do souboru
.envneboSECRET.txt?