Lekce 02.8: Halucinace (Hallucination)
🧠 Mentální model & teoretický rozbor
Slovo „halucinace“ je zavádějící metafora. Vyvolává představu, že model má horečku nebo duševní poruchu. Ve skutečnosti model dělá přesně to, k čemu byl zkonstruován: doplňuje nejpravděpodobnější tokeny na základě statistické asociace.
PROČ MODEL VYMÝŠLÍ NEEXISTUJÍCÍ KÓD:Pokud model nevidí ve svém kontextovém okně přesnou definici rozhraní,musí si chybějící tokeny "domyslet" na základě svých trénovacích vah.
Když napíšete: "Použij metodu pro validaci rodného čísla z naší interní knihovny",model v trénovacích datech viděl tisíce metod s názvy jako:- isValidBirthNumber()- validateCzechId()- checkRc()
Model jednu z nich vybere a použije ji s naprostou suverenitou – bez ohledu na to,zda ve vašem souboru skutečně existuje!Jediným lékem na halucinace je princip uzemnění (Grounding): Model nesmí hádat. Model musí mít skutečný soubor otevřený a viditelný ve svém kontextovém okně dříve, než začne kód používat.
🏢 Realistický scénář z praxe
Vývojář integruje AWS S3 SDK v Node.js. Zadá agentovi: „Nahraj soubor na S3.“ Agent bez otevření definičních souborů napíše:
import { S3Client, uploadFile } from '@aws-sdk/client-s3'; // uploadFile v v3 NEEXISTUJE!Tato metoda existovala ve staré verzi AWS SDK v2, ale ve verzi 3 byla nahrazena třídou @aws-sdk/lib-storage a příkazem Upload. Kód okamžitě spadne při kompilaci.
💻 Konkrétní ukázky kódu & promptů
Jak donutit agenta k uzemnění (Grounding Prompt):
❌ Náchylné k halucinacím:
Použij náš interní logger a zaloguj chybu platby.✅ Stoprocentně uzemněné (Nulový prostor pro halucinace):
Před implementací si nejprve otevři a prostuduj definiční soubor src/lib/logger.ts.Použij přesné metody a typy exportované z tohoto modulu.Nevymýšlej žádné nové funkce, které v src/lib/logger.ts nejsou definovány.Automatický záchyt halucinací přes TypeScript kompilátor:
# Okamžitý test pravdivosti po každé editaci:npx tsc --noEmitPokud model halucinuje neexistující metodu, kompilátor okamžitě vyhodí TS2339: Property 'xyz' does not exist on type 'ABC'.
⚠️ Analýza selhání & Anti-patterns
Chyba: Věřit vysvětlení modelu bez spuštění kódu
Model dokáže halucinaci obhájit s neuvěřitelnou rétorickou přesvědčivostí: „Tato metoda byla přidána ve verzi 2.4 pro optimalizaci streamování…“ (přičemž verze 2.4 nikdy nevyšla).
- Zlaté pravidlo: Nikdy nevěřte slovním ujištěním agenta. Jediným důkazem pravdy je úspěšný běh kompilátoru a testu.
🛠️ Inženýrský postup krok za krokem (Playbook)
- Nejprve čtení, potom psaní (Read-Before-Write): Donuťte agenta nejprve otevřít soubor s rozhraním (
ViewFile), teprve v dalším kroku psát implementaci. - Přísný kompilátor jako mantinel: Nastavte TypeScript tak, aby nepovoloval typ
any("noImplicitAny": true). - Zákaz externích importů bez ověření: Do
AGENTS.mdvložte zákaz instalace nových npm knihoven bez výslovného souhlasu.
🧪 Praktické cvičení (Hands-on Lab)
Úkol:
Vyvolejte halucinaci a následně ji eliminujte uzemněním.
Kroky:
- Zeptejte se Claude Code na neexistující interní modul: „Jaké parametry přijímá naše interní funkce
SuperCustomAuthValidator?“ - Sledujte, jak se model pokusí parametry uhodnout nebo si vymyslí věrohodné rozhraní.
- Nyní zadejte: „Prohledej repozitář a ověř, zda
SuperCustomAuthValidatorskutečně existuje.“ - Sledujte, jak model po spuštění vyhledávače přizná: „Tento symbol v repozitáři neexistuje.“