SCORVIA

Retrieval That Checks Itself

arXiv:2401.15884 · 5 documents · 2 thresholds · 3 states

A working Corrective RAG loop — grade the documents first, then decide where the answer comes from.

Ask a retrieval system for the nearest documents and it will always find some. Nearest is not the same as right. A document can share half its vocabulary with your question, rank at the top, and answer a different question entirely — and a plain RAG pipeline hands it to the model as fact. Corrective RAG puts a grader between the two. Nothing reaches the generator unread.

01 The route
stage 0 / 5 · preview

the flow reads top to bottom · move the point below and the lit route follows

Tethered the lit branch is whatever the point on the map says right now upper 0.59 · lower −0.99 · route Correct
02 The threshold plane

Threshold plane — upper × lower

drag the point · arrow keys when focused

Thresholds — tuned per dataset

the same pair the point holds
0.59

One document above this and the corpus wins.

-0.99

All documents below this and the corpus is discarded.

Relevance score, −1 to +1

The paper tunes these per dataset. PopQA runs 0.59 / −0.99, Biography 0.95 / −0.91. Move them and watch the route change.

Route taken

0.59 / −0.99
Correct

Distance to flipping the action

Corpus ON

Knowledge_Refine(x, D)
decompose, then recompose over the corpus

Web OFF

Web_Search(rewrite(x))
a rewritten query, never the raw question

Measured pairs from the paper

tap to jump

Biography runs an upper threshold of 0.95, near the top of the scale. A demo claiming "the CRAG threshold is 0.7" would be misreading the paper: these are tuned per dataset, not universal.

Run log

03 Decompose, then recompose

Knowledge strips

filter −0.50 · top-k 5
Recomposed — joined in original order

What the strip pass buys

A document that passes is still mostly noise. It gets cut into strips, each strip scored alone, the weak ones dropped, the survivors joined back in original order. The generator reads the sentences that earned their place — not the chunk they arrived in.

Two LLM calls per query instead of one. Latency goes from roughly 400 ms to roughly 750 ms, and a miss adds a search round-trip on top. Widening the retrieval widens the grading bill with it, because the grader runs once per document.

What you buy: hallucinations near zero, and answers that include facts published after your index was built. We think that trade is worth making. You now have the numbers to decide for yourself.

CRAG is a 2024 pattern and today it stands beside Self-RAG and Adaptive-RAG as a predecessor to fully agentic retrieval, which beats it by 2.8 NDCG@10 — what keeps CRAG in production anyway is that it bolts onto an existing pipeline without touching the model, while Self-RAG needs one fine-tuned to emit its own reflection tokens.

The five candidates hold frozen relevance scores. Only the threshold pair is live.
The grader in the paper is a fine-tuned T5-large (0.77B)84.3% accuracy against 58.0–64.7% for ChatGPT. It is not a prompt to an LLM, and it is not a binary yes or no.
Colour carries nothing on its own: regions also carry hatching, documents carry glyphs ▲ ▼ · and a position on the rail, packets carry a D1–D5 label.
The mechanism comes from Corrective Retrieval-Augmented Generation, Yan et al., 2024 (arXiv:2401.15884): the two thresholds, the three actions, and the decompose-then-recompose step. The implementation running on this page is ours.