Komponenta, jejíž výstup nikdo nečte
- Malý model
- 23 s
- MoE
- 52 s
- Dense 27B
- 222 s
- Limit úlohy
- 300 s
Změřeno 1. 8. 2026.
Teze: Nejnebezpečnější místo pro slabý model není odpověď uživateli. Je to komprese kontextu — protože její výstup se stává stavem konverzace a nikdo ho nikdy neuvidí.
Proč na tom záleží víc než na odpovědi
Když se agent splete v odpovědi, sedíš u toho a můžeš to zpochybnit. Přesně to se v testovaném úseku stalo: model si vymyslel čas odletu, uživatel se ozval („to je nějaký nesmysl ne, prověř to") a model se opravil.
Komprese je jiná. Když konverzace naroste, pomocný model ji shrne a shrnutí nahradí původní tahy. Od té chvíle je to jediné, co agent o předchozím hovoru ví. Zdroj je pryč, takže se nedá ověřit. A protože shrnutí není odpověď, nikdo ho nečte.
Chyba v odpovědi je tvrzení. Chyba v kompresi je fakt bez zdroje.
Jak se to měřilo
Prompt jsem nevymyslel — vytáhl jsem ho ze zdrojáku agenta
(agent/context_compressor.py). Stojí v něm mimo jiné:
„Write the summary in the same language the user was using — do not translate." „Capture the user's most recent unfulfilled input verbatim — the exact words they used." „THE SINGLE MOST IMPORTANT FIELD."
Vstup je skutečný úsek konverzace, ne syntetický: 12 tahů, 8 400 znaků česky. Vybral jsem ho proto, že obsahuje past, kterou lze ověřit objektivně — model v něm halucinoval, uživatel to odhalil a model to opravil. Dobré shrnutí musí přenést opravu, ne původní chybu.
Výsledky
| model | čas | jazyk | úkol doslova | oprava | vymyšlená zjištění |
|---|---|---|---|---|---|
| malý 4B | 23 s | čeština | ✅ | ✅ ale u špatné cesty | ❌ ano |
| MoE 35B-A3B | 52 s | čeština | ✅ | ✅ | ne |
| dense 27B | 222 s | čeština | ✅ | ✅ | ne |
Hlavní nález
Poslední zpráva uživatele v tom úseku byla žádost o podrobnosti k jedné konkrétní cestě. Nikdo se na ni ještě nedíval — uživatel se právě zeptal. Malý model napsal do shrnutí:
„Závěr, že výlet byl zaznamenán jen názvem bez konkrétních detailů — žádné informace o místech, dnech, cestách nebo aktivitách nebyly uvedeny." „Je třeba upozornit uživatele, že žádné detaily nejsou k dispozici."
Vymyslel si výsledek hledání, které neproběhlo, a uložil ho jako hotové zjištění.
Následující kontextové okno by na dotaz odpovědělo „k tomu nic nemám" — a nešlo by to vyvrátit, protože doklad o tom, že se nikdo nedíval, byl součástí zahozených tahů. Agent by nelhal. Jen by věřil svému vlastnímu předchozímu výmyslu.
Vedle toho ta drobnější selhání skoro nestojí za zmínku, i když jsou názorná: komolení češtiny („v Řečku" třikrát, „opraveno zneužití informací") a připsání opravy k jiné cestě, než ke které patřila.
Druhý nález: velký model to umí, ale nestihne
Dense 27B byl věcně bezchybný — správná citace úkolu, oprava u správné cesty, čísla zachovaná, a hlavně formulace „Aktuální požadavek: vyčíst detaily", tedy úkol označený jako otevřený, ne jako zodpovězený.
Jenže 222 sekund při limitu 300 — a to na vstupu 8 400 znaků. Skutečná komprese dostává okno mnohonásobně větší. Poznámka „velký model na kompresi timeoutuje" z předchozího týdne tím není vyvrácená, ale potvrzená.
Metodická poznámka
Automatická kontrola u všech tří modelů hlásila „převzal halucinaci". Byla to třikrát tatáž chyba mého vyhodnocení: regulární výraz hledal slovo „odlet" poblíž sporného času a našel ho ve větě „1:10 je čas odjezdu z domu, ne odletu" — tedy přímo v té správné opravě.
Kdyby ty výsledky nikdo nečetl ručně, publikoval by se přesný opak toho, co se stalo. U hodnocení v češtině je doslovné porovnávání řetězců systematicky nespolehlivé — ne občas, ale pokaždé, když jazyk nabídne tvar, na který autor matcheru nemyslel. Byl to čtvrtý případ téhož za jediný den.
Poznámka k publikaci
Konkrétní cíle cest a zdravotní údaje ze zdrojového úseku jsou nahrazeny nebo vypuštěny; struktura chyby i citace shrnutí jsou doslovné.
- config.yamlauxiliary.compression.model → qwen/qwen3.6-35b-a3b
- config.yamltitle_generation a session_search → hlavní model
- patchagent/title_generator.py: max_tokens 500 → 2500
- post-updatepatch se vrací po každé aktualizaci