Přeskočit na obsah

Lekce 02.6: Bezestavovost (Statelessness)

⏱️ 3 min čtení Lekce 02.6

🧠 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 calculateTotal a 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í):

  1. 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`.
  2. 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)

  1. 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/).
  2. Test po restartu: Chcete-li ověřit, zda je projekt soběstačný, zadejte /clear a 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:

  1. Spusťte claude.
  2. Řekněte mu: „Moje tajné heslo pro dnešní den je ModryKocour42.“
  3. Nechte ho vygenerovat jednoduchou funkci.
  4. Zadejte příkaz /clear.
  5. Zeptejte se ho: „Jaké je moje tajné heslo?“
  6. Sledujte, jak model popravdě odpoví, že žádné heslo nezná.
  7. Zamyslete se: Co by se stalo, kdybyste heslo uložili do souboru .env nebo SECRET.txt?