Proč RAG halucinuje: tři místa, kde vzniká chyba, a jak je změřit
Když RAG odpoví špatně, chyba většinou není v modelu. Změřili jsme vlastní index: z padesáti nejlepších výsledků odpovídaly na dotaz čtyři. Tři místa, kde chyba vzniká, a jak je změřit.
Redakce: Warpy AI lab.

Proč RAG halucinuje: tři místa, kde vzniká chyba, a jak je změřit
Když RAG odpoví špatně, chyba většinou není v modelu. Změřili jsme to na vlastním korpusu: u deseti dotazů odpovídaly na otázku čtyři z padesáti nejlepších výsledků a pět nejlepších úryvků poskytlo modelu v mediánu 554 znaků podkladu. Model dostane pár nesouvisejících vět a přesto musí odpovědět. Chyba vzniká na třech místech: při dělení textu, při hledání a při sestavení promptu.
| Místo | Co se pokazí | Naměřené číslo (10. 11. 2026) |
|---|---|---|
| 1. Dělení textu | úryvek ztratí definici, podmínku nebo kontext | medián 126 znaků, 88,6 % úryvků má pod 200 znaků, 33,5 % dokumentů dodá jediný úryvek |
| 2. Hledání | vrátí věty se stejnými slovy a jiným významem | 4 z 50 výsledků odpovídaly na dotaz, u 4 z 10 dotazů přišlo všech 5 výsledků z jediného zdroje |
| 3. Sestavení promptu | model odpoví i tam, kde podklad chybí | 98,3 % úryvků napsal jazykový model, ověřených je 15,2 % |
Odkud čísla jsou
Měřili jsme na vlastním výzkumném korpusu, který Warpy používá pro rešerše. V době měření v něm bylo 316 099 úryvků z 16 481 dokumentů: příspěvky z Redditu, záznamy z arXivu a GitHubu, přepisy videí, články z webu a poznámky z vlastní práce. Úryvek je jedna věta nebo krátký fakt, který z dokumentu vytáhl jazykový model. Index jsme prohledali lexikálním vyhledávačem, tedy podle slov a ne podle významu, a vždy jsme brali pět nejlepších výsledků. Devět z deseti dotazů jsme napsali česky; formulovali jsme je tak, jak se ptá člověk z firmy, která RAG staví.
Korpus je z 95 procent anglický. To je pro českou firmu samo o sobě důležitá informace: index z cizojazyčných materiálů může odpovídat na český dotaz špatně i tehdy, když je technicky v pořádku. Nejde o benchmark RAG jako technologie. Jde o diagnostiku jednoho reálného indexu, postaveného bez vektorového vyhledávání a bez přerovnávání. Právě proto jsou na něm chyby vidět.
1. Dělení textu: úryvek, který neumí odpovědět sám
První místo je dělení dokumentů na úryvky. Krátký úryvek ztratí všechno, co k němu patřilo: definici pojmu, podmínku platnosti, výjimku. Model pak čte větu bez okolí a doplňuje ji z toho, co si pamatuje z tréninku. Halucinace vzniká i tehdy, když vyhledávač našel správný dokument.
V našem korpusu je medián úryvku 126 znaků a devadesátý percentil 205 znaků. Pod 200 znaků má 88,6 procenta úryvků, pod 100 znaků 29,8 procenta. Když jich vyhledávač vrátí pět, model dostane zhruba 630 znaků podkladu. V našich deseti dotazech byl medián součtu pěti výsledků 554 znaků.
Druhé číslo ukazuje něco jiného: 5 523 dokumentů z 16 481, tedy 33,5 procenta, dodalo do indexu jediný úryvek. Z takového dokumentu se nedá poznat, o čem je, a model nemá jak zjistit, jestli věta platí obecně, nebo jen v jedné kapitole.
Jak to změřit: spočítejte medián a devadesátý percentil délky úryvku, podíl úryvků pod 200 znaků a podíl dokumentů, které přispěly jediným úryvkem. Když vyjde medián pod 200 znaků, úryvky nenesou kontext a RAG bude halucinovat častěji, i s dobrým modelem.
Co s tím: delší úryvky, které respektují strukturu dokumentu (nadpis, seznam, tabulka), a ke každému úryvku krátká věta, o čem je. Anthropic v experimentu s takovým popisem snížil podíl nezdařených vyhledání o 35 procent (měřeno v top 20 úryvcích).
2. Hledání: stejná slova, jiný význam
Druhé místo je vyhledání. Model nedostane dokument, dostane pět úryvků, které vybral vyhledávač. Když vybere špatně, model nemá z čeho odpovědět.
Náš test to ukázal doslova. Dotaz „proč RAG halucinuje“ vrátil pět vět o linuxové složce /proc: skript na výpis procesů, sandbox bwrap, mazání cache. Důvod je mechanický. Vyhledávač odstraní diakritiku při indexaci i při hledání, takže se české slovo „proč“ změní na „proc“. To se v korpusu vyskytuje jako cesta /proc v 85 úryvcích. Slovo „halucinuje“ v korpusu není ani jednou, kořen „halucin“ najdete v pěti úryvcích z 316 099.
U deseti dotazů jsme ručně hodnotili, jestli výsledek odpovídá dotazu. Odpovídaly čtyři výsledky z padesáti. U čtyř dotazů přišlo všech pět výsledků z jediného zdroje. Nejhorší případ byl dotaz na GDPR a lokální AI: pět vět o tom, že někdo testoval DGX Spark, dohromady 262 znaků. Model dostal pětkrát skoro totéž a k otázce nic.
Jak to změřit: připravte sadu dotazů, u kterých víte, který úryvek je správná odpověď, a měřte, jak často se objeví v prvních pěti výsledcích. Zároveň počítejte, kolik různých zdrojů těch pět výsledků má. Když je zdroj jeden, model nemá jak ověřit, jestli úryvek není výjimka.
Co s tím: kombinovat hledání podle slov s hledáním podle významu (vektory), přidat přerovnání výsledků a pro češtinu ošetřit diakritiku. Anthropic u kombinace obojího naměřil o 49 procent méně nezdařených vyhledání, s přerovnáním o 67 procent (opět v top 20 úryvcích).
3. Sestavení promptu: podklad, který už je parafráze
Třetí místo je to, co se dostane do promptu. Tady je chyba nejméně viditelná: podklad sám může být text od modelu.
V našem korpusu napsal 310 647 úryvků z 316 099 jazykový model DeepSeek V4.1 Flash. To je 98,3 procenta. Ověřených proti zdroji je 15,2 procenta a u 82,6 procenta úryvků index neuchovává doslovný citát, proti kterému by se odpověď dala zkontrolovat. Když se pak RAG zeptáte, model nečte dokument, čte parafrázi, kterou udělal jiný model. Chyba z prvního modelu se v odpovědi zopakuje a tváří se jako fakt z dokumentu.
Druhá část problému je v promptu. Když prompt neumožní odpovědět „v podkladech to není“, model snadno odpoví i tam, kde podklad chybí. Výzkum RAGTruth ukázal, že i s vyhledáváním vznikají odpovědi, které podklad nepodporují nebo mu odporují: anotátoři u téměř 18 tisíc odpovědí označili halucinace na úrovni jednotlivých slov. Práce Lost in the Middle zase ukázala, že modelům dělá problém najít informaci uprostřed dlouhého kontextu, i když tam je.
Jak to změřit: vezměte odpověď a každou její větu hledejte v podkladu. Věty, které v podkladu nejsou, jsou chyba, ať jsou pravdivé nebo ne. Zvlášť měřte, kolik odpovědí vzniklo u dotazů, kde podklad odpověď vůbec neobsahuje. Správná odpověď na takový dotaz je „nevím“.
Co s tím: v promptu vyžadovat u každé věty odkaz na úryvek, povolit odpověď „v podkladech není“ a nejlepší úryvek dávat na začátek, ne doprostřed. Když model cituje, poznáte chybu dřív než uživatel.
Kdy to neplatí
- Korpus je výzkumný, ne firemní. Obsahuje příspěvky z Redditu, přepisy videí a články, z 95 procent anglicky. Dá se čekat, že český dotaz proti anglickému indexu selhává snadněji než český dotaz proti českým dokumentům.
- Měřili jsme jen lexikální hledání bez vektorů a bez přerovnání. Dobře postavený firemní RAG bude mít podíl správných výsledků vyšší. Čtyři správné výsledky z padesáti nejsou výsledek RAG jako technologie.
- Čísla jsou z jednoho dne a jednoho indexu. Po přeindexování se změní.
- Ideální délka úryvku závisí na typu dokumentu. U smlouvy je delší úryvek nutnost, u tabulky parametrů naopak škodí.
- Čísla z RAGTruth a z Anthropicu pocházejí z jiných modelů a jiných korpusů. Bereme je jako směr, ne jako srovnání s naším měřením.
Časté otázky
Jak poznám, že chyba je v hledání, a ne v modelu?
Vezměte úryvky, které RAG modelu poslal, a položte stejnou otázku jen nad nimi. Když odpověď v úryvcích není, model nemohl odpovědět správně a chyba je v hledání nebo v dělení textu. Když tam je a model ji nepoužil, chyba je v promptu nebo v modelu.
Kolik úryvků má RAG vrátit?
Tolik, kolik jich je potřeba k pokrytí odpovědi, a to se musí změřit, ne odhadnout. V našem korpusu poskytlo pět úryvků v mediánu 554 znaků podkladu, což je na technickou otázku málo. Pět je rozumný start, ale číslo samo o sobě nic neříká.
Pomůže jen zvětšit kontext modelu?
Ne. Delší kontext znamená víc šumu a informace uprostřed se ztrácí. Podle práce Lost in the Middle je výsledek nejlepší, když je potřebná informace na začátku nebo na konci. Vyplatí se tedy méně a lépe seřazených úryvků.
Stačí do promptu napsat, ať model nehalucinuje?
Nestačí, ale pomůže to. Instrukce bez měření může chybu jen přesunout: model začne odmítat i to, co v podkladech je. Proto se vyplatí měřit obojí, kolik odpovědí je bez opory v podkladu a kolik správných odpovědí model odmítl.
Co si odnést
RAG neodstraňuje halucinace sám. Přesouvá je z modelu do pipeline a tam se dají měřit. Tři čísla, která se vyplatí sledovat: délka úryvku, podíl dotazů, u kterých se správný úryvek dostal do prvních pěti výsledků, a podíl vět v odpovědi, které nemají oporu v podkladu. Když je u prvního čísla málo znaků, řešte dělení. Když u druhého, řešte hledání. Když u třetího, řešte prompt.
Jestli RAG pro firemní dokumenty stavíte nebo opravujete, podívejte se na stránku RAG pro firemní dokumenty. Když zvažujete, jestli má smysl dokumenty doladit modelem, pomůže rozhodovací tabulka RAG vs fine-tuning. Jak se chová kontext při předávání mezi agenty, ukazuje článek 677 tokenů místo 93 tisíc. Čísla o provozu našeho modelu najdete v labu.
Zdroje
- Anthropic: Introducing Contextual Retrieval
- Barnett et al.: Seven Failure Points When Engineering a Retrieval Augmented Generation System (arXiv 2401.05856)
- Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (arXiv 2307.03172)
- Niu et al.: RAGTruth: A Hallucination Corpus for Developing Trustworthy Retrieval-Augmented Language Models (arXiv 2401.00396)