Přeskočit na obsah

Lekce 02.8: Halucinace (Hallucination)

⏱️ 3 min čtení Lekce 02.8

🧠 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:

Terminál
# Okamžitý test pravdivosti po každé editaci:
npx tsc --noEmit

Pokud 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)

  1. 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.
  2. Přísný kompilátor jako mantinel: Nastavte TypeScript tak, aby nepovoloval typ any ("noImplicitAny": true).
  3. Zákaz externích importů bez ověření: Do AGENTS.md vlož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:

  1. Zeptejte se Claude Code na neexistující interní modul: „Jaké parametry přijímá naše interní funkce SuperCustomAuthValidator?“
  2. Sledujte, jak se model pokusí parametry uhodnout nebo si vymyslí věrohodné rozhraní.
  3. Nyní zadejte: „Prohledej repozitář a ověř, zda SuperCustomAuthValidator skutečně existuje.“
  4. Sledujte, jak model po spuštění vyhledávače přizná: „Tento symbol v repozitáři neexistuje.“