Prečo RAG len na podobnosti podáva zastarané fakty: supersession slepý bod, reprodukované
Úložisko len na podobnosti nemá model času: protirečenie je často PODOBNEJŠIE originálu než správna parafráza, takže cosine nevie, ktorá hodnota je aktuálna (AUROC ~0.6, takmer náhoda pri n=24). Nezávislá replikácia Yadavovho MemStrata (arXiv:2606.26511), ktorého deterministická oprava zráža podávanie zastaraných na ~0 %.
Krátka verzia. Pamäť, ktorá radí len podľa embedding podobnosti, nemá model času. Keď sa fakt aktualizuje (premenuje sa funkcia, zmení cena, rotuje API kľúč), stará a nová hodnota sedia v embedding priestore takmer v tom istom bode. Cosine search nedokáže rozlíšiť, ktorá je aktuálna, a ticho vráti tú zastaranú. Nečakaná časť — a dôvod, prečo ťa lepší embedder nezachráni: protirečenie (nová hodnota) je často podobnejšie originálu než verná parafráza. Nezávisle sme to reprodukovali a znovu odmerali opravu.
Toto je kreditovaná replikácia, nie objav. Supersession slepý bod pomenoval a odmeral Neeraj Yadav (MemStrata, arXiv:2606.26511, preprint z júna 2026), ktorý uvádza cosine klasifikátor na AUROC ~0.59 — takmer náhoda — a navrhuje deterministickú opravu, čo zráža podávanie zastaraných hodnôt na ~0 %. Obe polovice sú jeho. My sme to prebehli na inom stacku a shipli zero-dependency open-source implementáciu jeho opravy do inspeximus — spustiteľná potvrdenka, nie nový nápad. A základné fakty sú učebnicové: embeddery sú trénované na tematickú podobnosť a sú povestne necitlivé na negáciu (medzera STS-vs-NLI), takže preklopenie jednej hodnoty cosine takmer nepohne; oprava je klasický bi-temporal / slowly-changing-dimension vzor (Snodgrass; Kimball SCD Type 2), ktorý produkčná pamäť ako Zep/Graphiti už má.
Rozsah, nech to nikto nemusí písať do komentárov. Toto je zlyhanie úložiska len na podobnosti. Reálne systémy to už obchádzajú — upsert-by-id, metadata/recency filtre, bi-temporal okná platnosti. Úzky, odmeraný bod je, že samotný cosine signál nenesie žiadnu informáciu o supersession, takže čokoľvek, čo sa spolieha len na podobnosť pri výbere „aktuálneho faktu", je štrukturálne slepé — musíš pridať key alebo časovú vrstvu, presne to, čo tie systémy robia.
Tvrdenie, reprodukované
Na 24 faktoch (subjekt, relácia, objekt) embednutých lokálnym nomic-embed-text (centrované, lebo nomic je anizotropný):
| meranie | hodnota |
|---|---|
| priemerný cosine(original, protirečenie) | 0.768 |
| priemerný cosine(original, parafráza-duplikát) | 0.843 |
| protirečenie aspoň také podobné ako duplikát | 10 / 24 |
| AUROC: "nízka podobnosť znamená supersession" | 0.613 (náhoda = 0.5; Yadav ~0.59) |
AUROC je celý príbeh. Protirečenie — nová hodnota — je často podobnejšie originálu než skutočná parafráza, takže žiadny prah podobnosti nedokáže spoľahlivo označiť "tento záznam nahrádza tamten". To, čo sa tu reprodukuje, je smer, nie presná hodnota: pri n=24 je 95 % CI pre AUROC zhruba [0.42, 0.81] — naše 0.613 aj Yadavovo 0.59 sú štatisticky nerozoznateľné od náhody (0.5), o to práve ide. Verdikt: REPRODUCED (mechanizmus, na syntetických dátach — nie benchmark).
Čo ťa to stojí
Ulož original, potom update, potom sa spýtaj na aktuálnu hodnotu:
| retrieval | miera zastaraného faktu |
|---|---|
| cosine top-1 (len podobnosť) | 41.7 % (10/24; Wilson CI ~[24 %, 61 %], konzistentné s Yadavovými 15–40 %) |
| deterministický (subjekt, relácia, objekt) key | 0.0 % (z konštrukcie) |
Úložisko len na podobnosti podá nahradenú hodnotu veľkú časť času (tu ~40 %, so širokým pásmom pri malom n). To nie je otázka ladenia — samotný signál podobnosti je voči tomu štrukturálne slepý. Tých 0 % nie je odmerané prekvapenie: key, ktorý retire-ne starú hodnotu, ju z konštrukcie nikdy nepodá.
Oprava: key, nie prah
Podobnosť zlyháva, lebo odpovedá na nesprávnu otázku. Supersession nie je "sú tieto dva texty podobné?" — je to "opisujú tieto dva záznamy ten istý (subjekt, relácia)?" To je deterministický key, nie vzdialenosť. Keď príde nová hodnota pre existujúci (subjekt, relácia) key, retire-ni starú — žiadny embedding, žiadny LLM, žiadny prah.
Toto je presne oprava, ktorú navrhuje Yadavov paper (deterministické (subjekt, relácia, objekt) pravidlo, čo retire-ne starú hodnotu v bi-temporal ledgeri). A ešte staršie je to klasický slowly-changing-dimension / bi-temporal vzor z data warehousingu (Kimball SCD Type 2; Snodgrass). My dodávame jeho zero-dependency implementáciu v inspeximus v0.2.0:
remember("Billing API auth method: API keys", key="billing-api::auth")
retire-ne každý aktívny záznam s tým key, takže recall nikdy nevráti zastaranú hodnotu. Je to bi-temporal — back-fill staršej hodnoty neprepíše aktuálnu — a append-only: stará hodnota je degradovaná, nie zmazaná (stále dostupná s include_superseded=True). Náš prínos tu je spustiteľná open-source potvrdenka, nie mechanizmus — mechanizmus je Yadavov a vzor má desiatky rokov.
Čestné limity
- Syntetické, 24 faktov, jeden embedder, bez signifikancie. Charakterizuje to mechanizmus, nie benchmark produktu. AUROC ~0.61 je bodový odhad, ktorého CI zasahuje náhodu; stale rate je 10/24 so širokým pásmom. Oboje sa pohne s tvojimi dátami a embedderom — sonda je jeden súbor, spusti ju na svojich.
- Takmer-náhodné AUROC je čiastočne zámerné. Protirečenia sú minimálne jednohodnotové úpravy (vysoký prekryv) a parafrázy povrchové preformulovania, čo je dôvod, prečo ich cosine nerozlíši — je to verná demonštrácia medzery STS-vs-NLI, nie odmeraný empirický pomer.
- Oprava je key a 0 % je z definície. Upsert-by-key z konštrukcie nikdy nepodá starú hodnotu — zaujímavé číslo je tých ~40 %, čo platí úložisko len na podobnosti, nie tá 0 %. Platí len pre fakty, ktorým vieš priradiť (subjekt, relácia) — config, ceny, verzie, status, identity. Pre voľný text bez prirodzeného key si späť pri ťažkom retrieval-strana probléme, na ktorý útočí Yadavov paper.
FAQ
Vyrieši lepší embedding model retrieval zastaraných faktov? Nie. Problém je štrukturálny: protirečený fakt je často podobnejší originálu než parafráza (odmerali sme AUROC 0.61, takmer náhoda). Silnejší embedder posunie pásmo podobnosti, nie slepý bod.
Čo je supersession v pamäti AI? Keď je uložený fakt nahradený novšou hodnotou — premenovaná funkcia, zmenená cena, rotovaný kľúč. Pamäť bez modelu času si nechá oboje a nevie, ktorá je aktuálna.
Ako to opraviť bez LLM? Prirad faktom deterministický (subjekt, relácia) key a retire-ni starú hodnotu, keď príde nová — žiadny prah podobnosti, žiadne volanie modelu. Toto je oprava, ktorú navrhuje Yadavov MemStrata paper, a je to klasický bi-temporal / slowly-changing-dimension vzor; key, čo retire-ne starú hodnotu, podá 0 % zastaraných z konštrukcie.
Je to váš objav? Nie. Preprint Neeraja Yadava (MemStrata, arXiv:2606.26511) pomenúva slepý bod aj navrhuje deterministickú opravu. My sme nezávisle reprodukovali smer (naše AUROC ~0.61 aj jeho ~0.59 sú pri malom n nerozoznateľné od náhody) a shipli open-source implementáciu jeho opravy do inspeximus. Náš podiel je replikačná potvrdenka a spustiteľný kód, nie ten nápad.