Zabíja dlhý kontext RAG? Spustili sme to — a oba virálne tábory sa mýlia
Stále sa opakuje hlasná hádka: jeden tábor hovorí "s dosť veľkým kontextovým oknom nepotrebuješ vyhľadávanie — nahádž všetko dnu, fakt tam niekde je"; druhý "dlhý kontext hnije — kvalita padá po ~100k tokenoch." Spustili sme judge-free test, nech to rozhodne. Odpoveď je ani jeden: je to o type úlohy, nie dĺžke. Lookup jedného faktu je dokonalý aj pri 110k tokenoch; agregácia naprieč všetkým sa zrúti pri ~25k a ostane zrútená. Takže "RAG is dead" je nepravda pre čokoľvek, čo kombinuje fakty, a "context rot zabíja recall" je prehnané pre obyčajný lookup. Replikuje to známy efekt (lost-in-the-middle, context rot, RULER, NoLiMa) — pointa je čisté, reprodukovateľné, neutrálne rozhodcovstvo virálnej hádky.
Hádka
Virálne idú tri navzájom protirečivé pozície, ani jedna neutrálne odmeraná:
- "Nepotrebuješ RAG / CAG" (Chan a kol. 2024): nahádž celý korpus do dlhého kontextu; "musí tam niekde byť", takže vyhľadávanie je zbytočné. (Samotný CAG paper to ohraničuje na malé, obmedzené knowledge bases — virálna verzia tú výhradu zahodí.)
- "Context rot": účinnosť prudko padá po ~100k tokenoch, bez ohľadu na inzerované okno.
- "RAG stále vyhráva": brute-force napchávanie kontextu prehráva s dobre postaveným retrieverom na presnosti, cene aj rýchlosti.
Nemôžu mať všetci pravdu. Nezhoda je testovateľná — tak sme ju otestovali.
Test (najmenší bežateľný model, bez sudcu)
Syntetický štruktúrovaný log N záznamov (región, zásielky, stav). Dve rodiny úloh na tom istom logu pri štyroch rastúcich dĺžkach (~5k → ~110k tokenov):
- NEEDLE — lookup jedného záznamu ("koľko zásielok nahlásil Record 04210?"). Čo CAG predpovedá, že ostane ľahké.
- SYNTH — agregácia naprieč všetkým (počty, max-podľa-regiónu, filtre). Čo context-rot predpovedá, že sa zrúti.
Presný gold, žiadny LLM sudca (množinové obsiahnutie / zhoda celých čísel). Čitateľ je frontier long-context model (presný model + dátum tohto behu neboli zalogované — medzera v reprodukovateľnosti; sonda sa regeneruje, takže spustíš svoj) a odpovedal z čítania logu vo svojom kontexte — nie grepom ani spúšťaním kódu (to je vynútené a výsledok sa sám validuje: skript by spravil agregáciu tiež dokonalou).
Výsledok
| dĺžka kontextu | NEEDLE (lookup) | SYNTH (agregácia) |
|---|---|---|
| ~5k tokenov | 1.00 | 0.75 |
| ~25k | 1.00 | 0.375 |
| ~60k | 1.00 | 0.25 |
| ~110k | 1.00 | 0.375 |
Needle recall je dokonalý pri každej dĺžke, vrátane 110k. Syntéza padá na ~0.25–0.38 už pri 25k a ostane v tom pásme (bez čistého trendu s dĺžkou — výkyv 0.25↔0.38, vrátane mierneho vzostupu pri 110k, je v rámci n=8 šumu). Príznačne, pri 110k model sám nahlásil, že "nedokáže spoľahlivo agregovať mentálnym sčítaním nad logom takejto veľkosti" — čo je presne to zlyhanie, a potvrdzuje, že odpovedal z kontextu, nie skriptom. Dve nuansy z per-otázkových dát: (1) rúti sa vyčerpávajúca agregácia — počítanie a filtrovanie naprieč všetkými záznamami; nájdenie jediného extrému (maximum) často prežije aj pri 110k, lebo to je vlastne jeden prechod, nie úplné sčítanie; a (2) aj pri 5k je syntéza len 0.75, nie 1.00, takže časť zlyhania je vyčerpávajúca mentálna aritmetika, ktorú model nezvláda pri žiadnej dĺžke — dlhý kontext to zhoršuje, nespôsobuje. Takže zlyháva špecificky skombinuj-všetko, nie nájdi-jeden — a je to rovnako limit agregačnej aritmetiky ako "context rot".
Verdikt
FAILED — pre CAG "musí tam niekde byť ⇒ správna odpoveď", na syntéze. Dlhý kontext nenahrádza vyhľadávanie pri ničom, čo musí kombinovať informácie naprieč oknom; to sa láme skoro a ostáva zlomené. Ale needle lookup dlhý kontext zvláda dobre, takže plošné "context rot zabíja recall po 100k" je tiež prehnané. Čestné pravidlo: je to o úlohe, nie dĺžke. Dlhý kontext na nájdi-fakt; retrieval (alebo štruktúrovaný rozklad) na skombinuj-fakty. A na vyčerpávajúcu count/filter agregáciu je reálny fix ani nie dlhý kontext ani retrieval, ale nástroj — code interpreter alebo dopyt nad dátami — lebo žiadny model spoľahlivo nezráta tisíce záznamov v hlave pri žiadnej dĺžke. Oba virálne titulky to všetko zlievajú dokopy.
Prečo je to férová, validná sonda
- Bez sudcu — presný gold, žiadne LLM hodnotenie.
- Sebavalidujúca — needle držiaci sa na 1.0, kým syntéza padá, dokazuje, že model odpovedal z kontextu; grep/skript by spravil syntézu tiež dokonalou.
- Rovnaký model, rovnaké dáta, mení sa len dĺžka — takže efekt je interakcia dĺžka×úloha, nie artefakt modelu či promptu.
Čestné limityMy replikujeme známy jav (lost-in-the-middle, Liu a kol. 2023/TACL 2024; RULER, Hsieh a kol./NVIDIA 2024; NoLiMa, Modarressi a kol. 2025; a Chroma "context rot", 2025 — industry report, nie peer-reviewed) — žiadny nový objav. Rozsah: jeden frontier model, syntetické štruktúrované kopy, dĺžky do ~110k (nie 1M, ktorý vzývajú najhlasnejšie tvrdenia), a len n=8 syntéznych otázok na dĺžku — takže pri tomto n je aj pokles 0.75→~0.3 naznačujúci sám o sebe (Fisher ≈ 0.13, nesignifikantné); vierohodný je hlavne preto, že reprodukuje mnohonásobne-replikovaný lost-in-the-middle / RULER / NoLiMa efekt. Prínos je neutrálne, bežateľné, judge-free rozhodcovstvo virálnej hádky, nie samotný jav.
Celá sonda je jeden generátor + reader naprieč dĺžkami + skórovač; kopy, otázky aj gold sa regenerujú jedným príkazom a generátor + nezávislý gold-re-derivačný skórovač sú verejné na research/probes/ragdead. Ak chceš vedieť, kde sa láme agregácia tvojho modelu, spusti to na svojom modeli a svojich dátach — o to ide.
FAQ
Nahradí väčšie kontextové okno RAG? Nie. V našom teste vyhľadanie jedného faktu (ihla) zostáva perfektné na 1.00 pri každej dĺžke, ale presnosť syntézy/agregácie kolabuje z 0.75 na ~0.3 ako kontext rastie 5k→60k tokenov. „Nahádž všetko do promptu“ zlyhá pre každú otázku, ktorá agreguje naprieč kontextom.
Čo je context rot? Odmeraná degradácia schopnosti modelu využiť informáciu s rastúcim vstupom — aj keď je potrebný fakt prítomný. Reprodukujeme to: vyhľadanie jedného faktu prežije dlhý kontext, ale uvažovanie kombinujúce viacero faktov prudko klesá.
Je RAG stále potrebný pri modeloch s dlhým kontextom? Áno, pre agregačné a syntézne úlohy. Dlhý kontext zvládne vyhľadanie jedného faktu; RAG chráni viackrokové uvažovanie tým, že drží pracovnú množinu malú namiesto nútenia modelu agregovať cez obrovské okno.
Pri akej dĺžke kontextu sa agregácia zlomí? V našej bežateľnej sonde bez sudcu je kolaps prudký už pri ~25k tokenoch — skôr než folklórnych „~100k“. Presný zlom závisí od tvojho modelu a dát; sonda sa regeneruje jedným príkazom, takže si odmeriaš svoj.