Udrží pamäť agenta opravený fakt? Zmerali sme to
Zopakuj hodnotu, ktorú agent opravil, a mnohé pamäťové systémy ju vrátia. Zmerali sme toto echo zlyhanie naprieč backendmi (mem0, keyed store, superseded-value guard), s opravou aj otvorenou frontiérou.
Zopakuj fakt, ktorý agent už opravil, a mnohé pamäťové systémy potichu vrátia starú hodnotu — zmerali sme to naprieč backendmi. Tu je prečo, a jednoriadkový test, ktorý to chytí.
Embedding similarita je povestne zlá v jednej konkrétnej veci: rozlíšiť kontradikciu od duplikátu. Existuje na to číslo — cosine ich oddelí zhruba na AUROC 0.59, len tesne nad mincovým hodom, a kontradikovaná hodnota býva podobnejšia originálu než skutočná parafráza. (Yadav, Temporal Validity in Retrieval Memory, arXiv:2606.26511.)
Znie to akademicky, kým nenarazíš na zlyhanie, ktoré to spôsobí v pamäti agenta.
Zlyhanie
Povieš agentovi "región je Frankfurt." Neskôr opravíš: "vlastne je to Ohio." Dobrá pamäť teraz odpovie Ohio. V poriadku.
Potom sa stará hodnota povie znova. Ani nie zlomyseľne — používateľ zopakuje preferenciu, o ktorej zabudol, že ju zmenil, alebo zapadnutý riadok v dlhom prepise: "región je Frankfurt." Zostane opravený fakt opravený, alebo Frankfurt vstane z mŕtvych?
Nazývame to echo: zopakovanie hodnoty, ktorá už bola opravená preč. V každom store, ktorého supersession je last-writer-wins podľa recency, je echo najnovšie tvrdenie starej hodnoty, takže vyhrá. A keďže similarita ho neoznačí — echo je takmer identické s originálom, ktorý oživuje — ani similarity-based store nemá signál, ako ho chytiť.
Meranie
Postavili sme malú syntetickú sondu: assertni fakt, oprav ho, zopakuj starú hodnotu inými slovami, a skóruj na answer-level — vyvolaj top-k pamätí, podaj ich LLM, spýtaj sa "aká je aktuálna hodnota?" Ten protokol je férový voči add-based storom, ktoré držia obe hodnoty a riešia konflikt pri čítaní, nielen voči tým, čo prepisujú. n=30; demonštrácia, nie definitívny benchmark.
Echo-resistance = podiel, kde je odpoveď stále opravená hodnota. 1.0 je dobre.
| Backend | forget-precision | echo-resistance |
|---|---|---|
| naivný keyed store (bez guardu) | 1.00 | 0.00 |
| mem0 2.0.11 (natívny OpenAI config) | 0.87 | 0.53 (95% CI 0.37-0.70) |
| superseded-value guard | 1.00 | 1.00 |
Každý backend udrží samotnú opravu, keď sa číta pozorne. Ale pod preformulovaným echom:
- Naivný keyed store (náš vlastný default, guard vypnutý) vzkriesi starú hodnotu prakticky vždy — reštatement je najnovší zápis.
- mem0, spustený v jeho vlastnom odporúčanom configu (gpt-4o-mini + text-embedding-3-small), vráti opravenú-preč hodnotu zhruba v 30-63% prípadov (95% CI na n=30; bodový odhad ~47%). Reprodukovalo sa to aj na plne lokálnom Ollama behu, takže je to config-robustné, nie artefakt jedného judge. Nie je to "mem0 bug" — je to poctivý kompromis add-based dizajnu, ktorý drží obe hodnoty a necháva čitateľa rozhodnúť; niekedy čitateľ vyberie tú starú, a mem0 extraktor môže dokonca napísať záznam "reverted back to Frankfurt", ktorému čitateľ potom verí.
- Superseded-value guard udrží opravenú hodnotu.
Oprava je stará a nudná
Guard nie je dômyselný. Je to v podstate AGM belief revision (Alchourrón-Gärdenfors-Makinson, 1985) a bitemporálne databázy (Snodgrass, ~1993) znova aplikované: keď je hodnota opravená preč, holé zopakovanie ju nesmie oživiť. Kľúčuj na hodnotu, nie na similaritu — re-assert už-superseded hodnoty je restatement-of-superseded a nevyhrá. Skutočná zmena názoru ("vlastne prepni späť") je povolená, ale len cez explicitný reaffirm signál, nikdy nie tichým echom.
Shipli sme to ako opt-in guard v našej malej pamäťovej knižnici. Zaujímavé nie je, že to funguje — je to textbook — ale že adversariálne echo bolo nezmerané: benchmarky ako STALE a LongMemEval bežia jednu opravu, nikdy re-injekciu starej hodnoty. (Súvisiace: slepá škvrna supersession v RAG, a naša práca o obrane proti memory-poisoningu a provenance, nie pravde.)
Časť, ktorú nikto nerieši
Náš guard má tvrdú hranicu. Kľúčuje na hodnotový token, takže chytí len echá, ktoré starú hodnotu pomenujú. Skutočne otvorený prípad je value-obscuring reštatement — "vráťme sa k tomu, čo sme mali predtým", "vráť tú poslednú zmenu" — kde sa stará hodnota nikdy nevysloví. Na fixtúre takýchto sú obe naše metódy slepé: value-match F1 0.03, cosine na úrovni náhody. Rozlišujúci signál nie je v obsahu vôbec; je to discourse relácia — otvára toto tvrdenie usadené rozhodnutie? To je štrukturálny problém, a práve tam si myslíme, že štrukturálny (nie similarity) prístup by konečne mohol nájsť svoje miesto.
Zhrnutie
Hlavne publikujeme ten test, nie skóre: prežije tvoja oprava zopakovanie starej hodnoty? Je to lacné otestovať, zlyhanie je tiché, a takmer žiaden pamäťový eval to nebeží. Harness sa dá pustiť proti hocijakému storu cez malý adaptér: github.com/DanceNitra/ramr.
Poctivé limity, rovno: malé syntetické n=30, jeden judge model, len answer-level, value-preserving echá; mem0 číslo je bod na širokom intervale, nie verdikt. Ber to ako demonštráciu reálneho failure mode — a dôvod pridať jeden lacný regresný test do svojej pamäťovej vrstvy.
FAQ
Otázka: Hovorí to, že mem0 je pokazený? Nie. mem0 add-based dizajn drží obe hodnoty a rieši konflikt pri čítaní, čo je rozumná voľba. Echo zlyhanie je dôsledok toho kompromisu, zmerané v jeho vlastnom odporúčanom configu, reportované s intervalom spoľahlivosti — nie tvrdenie o bugu.
Otázka: Prečo tu embedding similarita zlyháva? Lebo kontradikcia a duplikát vyzerajú pre cosine takmer identicky (AUROC ~0.59). Zopakovaná stará hodnota je takmer identická s originálom, ktorý oživuje, takže prah similarity nevie oddeliť "staré echo" od "ten istý fakt znova."
Otázka: Aká je oprava? Deterministická supersession kľúčovaná na hodnotu: keď je hodnota opravená preč, jej zopakovanie ju nemôže oživiť bez explicitného reaffirm. Je to AGM belief revision / bitemporálna validita, nie nová myšlienka — ale adversariálny reštatement, proti ktorému bráni, bol nezmeraný.
Otázka: Čo stále zlyháva? Value-obscuring reštatementy ("vráťme sa k tomu, čo sme mali"), ktoré starú hodnotu nikdy nepomenujú. Tam zlyháva aj value-match aj cosine; signál je discourse relácia, ktorá potrebuje štrukturálnu metódu.