Paměť, která si protiřečila
- „Faktů“ v bance
- 814
- Výsledků na dotaz
- 55
- Zpráv za 10 dní
- 1 689
- Po výměně uloženo
- 1
Teze: Paměťová vrstva nasbírala 814 „faktů“, mezi nimi starý i nový stav téže věci vedle sebe. Chyba nebyla v kvalitě extrakce, ale v tom, že nic nezneplatňovalo staré.
Nález
Na dotaz po stavu jedné přihlášky vrátila paměť 55 výsledků, mezi nimi současně tyhle dva:
„… is currently awaiting confirmation, due within the week“ „the club selected another pair with a better ranking"
První je starší o několik týdnů, druhé je z posledního dne. Obojí bylo v okamžiku vzniku extrahováno správně. Lepší extraktor by je extrahoval taky správně. Selhalo něco jiného.
Dál se v bance našlo:
- Vlastní výstup agenta uložený jako fakt o uživateli — „The assistant suggests…“, „The assistant revised the text…“
- Chyby ve jménech — zkomolená podoba jména; totéž jméno jako tři různé entity
- Vnitřní rozpor v jedné větě — „currently in Phase 1 … and has completed Phase 2“
- Duplicity — týž fakt přeformulovaný čtyřikrát
Poměr signálu k šumu
Za 10 dní bylo v historii 1 689 zpráv, z toho 295 s rolí user — a i z těch
byla jen část skutečně od člověka (viz článek 09). Extrakce jela přes všechno,
včetně agentových vlastních omylů, které se tím petrifikovaly.
Co jsem prošel a proč to nepomohlo
| Nabízené řešení | Proč ne |
|---|---|
| Větší model na extrakci | Opraví komolení, rozpory ne — ty jsou vada architektury |
| mem0 | Stejný princip (extraction-first), stejné slabé místo, navíc cloud |
| Zep/Graphiti | Má bi-temporalitu (fakta s platností) — ale chce Neo4j vedle Postgresu a pořád potřebuje LLM na extrakci |
| Letta | Celý agentní runtime, ne knihovna |
Z osmi providerů, které Hermes nabízí, jsou jen dva použitelné lokálně. Ostatní (mem0, honcho, retaindb, supermemory, byterover, memori) jsou cloudové, openviking chce vlastní server a je od ByteDance.
Co jsem nasadil
Hermes Agent v0.19.1 (2026.7.30) nabízí osm paměťových providerů a holographic je jedním z nich, ne vlastní kód. Výchozí stav je bez paměťové vrstvy.
holographic — a rozhodlo tohle:
- Není v něm žádný LLM. Fakta zapisuje agent nástrojem
fact_store, tedy velký model, který je v češtině spolehlivý. Celá vrstva, na které se to lámalo, tam není. - Má
contradict: hledá fakta sdílející entitu s rozcházejícím se obsahem. Přesně náš případ. - Lokální SQLite, žádný démon, žádný Postgres, nula závislostí.
- Škáluje — ověřeno ze zdrojáku, protože dokumentace o tom mlčí: FTS5 vytáhne
limit×3kandidátů v C, drahý přepočet běží jen nad ~30 z nich. Náklad na dotaz neroste s počtem faktů.
Ostrý test: uloženo „Kávovar Sage Barista Express, mletí na stupni 4.“ (česky, správně), dotaz jinými slovy („mlýnek na kávu“) ho našel za 16 s.
Metodická oprava. Původně tu stálo „hindsight měl 45 s“ jako důkaz, že nová vrstva je třikrát rychlejší. To tvrzení neobstálo. Opakované měření se dvěma běhy na každou stranu ukázalo stejné zpomalení i bez hindsightu — mezi rameny jsem restartoval bránu a studený start stál ty sekundy, ne paměťová vrstva. Rozdíl v rychlosti tedy není doložený. Důvody pro výměnu zůstávají ty ostatní.
Náhrada extrakce
Místo druhého úložiště čte noční konsolidace uživatelovy zprávy a navrhuje zápisy do kanonických dokumentů. Jedno místo, lidské schválení, rozpor nemá kde vzniknout.
Poznámka k publikaci
Příklad je převedený do jiné domény. Nahradit jen jméno nestačilo — okolní věty prozrazovaly situaci i bez něj. Únik nevzniká v jedné větě, ale v jejich součtu, a tohle byl přesně ten případ; co konkrétně tam stálo, sem nepatří. Zachovaná je struktura nálezu, tedy dvě protichůdná tvrzení o téže věci, obě správně extrahovaná v okamžiku vzniku. Počty i závěry jsou původní.
- config.yamlmemory.provider: hindsight → holographic
- config.yamlplugins.hermes-memory-store.auto_extract: false
- datapaměťová banka vyprázdněna