Přeskočit na obsah

Paměť, která si protiřečila

Hermes · paměťová vrstvaqwen3-4b
„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í.
  • 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×3 kandidá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í.

Co se pro to změnilo
  • config.yamlmemory.provider: hindsight → holographic
  • config.yamlplugins.hermes-memory-store.auto_extract: false
  • datapaměťová banka vyprázdněna
Souvisí — štítek „architektura“