Self-RAG: Letting the Model Critique Its Own Retrieval
Reflection tokens, on-demand retrieval, and the training requirement that limits where it applies.
Self-RAG (Asai et al., 2023; ICLR 2024) is a framework that fine-tunes a language model to emit reflection tokens so it retrieves on demand and critiques the relevance, support and usefulness of its own output. The production ceiling is that recipe: you need a Self-RAG-trained generator, not only a prompt that imitates the control loop.
What is Self-RAG?
Self-Reflective Retrieval-Augmented Generation (Self-RAG) is the framework from Akari Asai, Zeqiu Wu, Yizhong Wang, Avirup Sil and Hannaneh Hajishirzi (arXiv:2310.11511, 2023; ICLR 2024 oral — authors’ GitHub README). It trains a single language model to decide whether to retrieve, to generate with retrieved passages when retrieval helps, and to emit critique tokens that judge relevance, support and utility — unlike naive RAG, which prepends a fixed top-k on every query whether the model needs it or not (Asai et al. abstract; project page at selfrag.github.io).
Released weights on Hugging Face include selfrag/selfrag_llama2_7b and selfrag/selfrag_llama2_13b; training data and code ship with the same release (AkariAsai/self-rag README, as of the 2023.10 initial release note). The abstract’s claim, stated without inventing table percentages: Self-RAG at 7B and 13B parameters outperforms ChatGPT and retrieval-augmented Llama2-chat on open-domain QA, reasoning and fact-verification tasks, with gains in factuality and citation accuracy on long-form generation (Asai et al., 2023). Sibling architecture patterns sit on the RAG architectures hub.
How do Self-RAG reflection tokens work?
Reflection tokens are special vocabulary items the trained generator emits as part of ordinary next-token prediction. Asai et al. (Table 1) define four types; the values below are the paper’s, not a tutorial simplification.
- Retrieve — values yes / no / continue. Given the input (and optionally the preceding generation), the model decides whether to call an external retriever.
- IsRel — relevant / irrelevant. Whether a retrieved passage d provides useful information for the input x.
- IsSup — fully supported / partially supported / no support. Whether verification-worthy statements in the generated segment are supported by d.
- IsUse — integers 5…1. Perceived usefulness of the response for the input, independent of the passage (Asai et al. Table 1).
At inference, the model first predicts Retrieve. If the decision is yes, a retriever returns candidate passages; the generator scores IsRel, produces a continuation, then scores IsSup and IsUse, and ranks continuations with those critique signals. If Retrieve is no, it generates like a standard LM and still emits IsUse (Asai et al. Algorithm 1; restated in the LangChain “Self-Reflective RAG with LangGraph” blog). Broader design of when to skip retrieval as a pipeline stage — not only Self-RAG’s token — is at adaptive retrieval.
Self-RAG capabilities and limits, side by side
No reflection capability without the ceiling that rides with it. Each row pairs what Self-RAG gives you with the limit that comes from the paper recipe — so the trade is visible before you commit to fine-tuning or to a graph approximation.
| Capability | What you get | The limit that rides along |
|---|---|---|
| On-demand Retrieve | Skip retrieval, retrieve once, or retrieve again mid-generation | Requires a generator trained to emit Retrieve tokens — not a stock chat API alone (Asai et al.; AkariAsai/self-rag) |
| IsRel passage filter | Mark passages relevant or irrelevant before trusting them | Scoring candidates in parallel adds inference cost versus always-retrieve-once RAG (kore.ai SELF-RAG write-up, updated April 2026) |
| IsSup grounding | Prefer fully supported continuations over unsupported ones | Critique quality inherits how the critic and generator were trained; it is not a free zero-shot prompt |
| IsUse preference | Soft control over usefulness vs other critique axes at decode time | Heavier weight on support can trade away fluency (Asai et al. analysis; GeeksforGeeks Self-RAG challenges) |
| Tunable retrieve rate | Soft threshold on Retrieve-token probability per task | Under-retrieving hurts open-domain QA hard: project-page analysis reports ≈40% relative drop on PopQA when retrieving less, vs ≈2% on PubHealth (selfrag.github.io) — main result-table percentages are not restated here |
The row that decides most production builds is the first: if you cannot fine-tune or host a Self-RAG checkpoint, you are not running paper Self-RAG — you are running an approximation. That distinction gets its own section below. The Corrective RAG alternative — an external retrieval evaluator — is sketched under the comparison heading and covered in depth at Corrective RAG (CRAG).
Why does Self-RAG require fine-tuning a generator?
Paper Self-RAG is not a prompt pattern. The generator’s vocabulary is expanded with reflection tokens and trained with a standard language-modelling objective on data the critic has already annotated (Asai et al., §3.2). The critic is supervised on reflection labels collected by prompting GPT-4, then distilled into an in-house model (the paper initialises that critic from the same Llama 2-7B family as the generator). Critic outputs are inserted offline into training continuations; the generator then learns to emit Retrieve / IsRel / IsSup / IsUse itself, so the critic is not required at inference (Asai et al. §3.2; training overview on selfrag.github.io).
That training requirement is the honest production ceiling. Closed chat APIs you cannot fine-tune this way sit outside the paper recipe: you either run the released selfrag_llama2_* weights (or retrain on your own critic-augmented data), or you build a graph that approximates the control loop with separate grader calls. GeeksforGeeks’ Self-RAG article lists the same cluster of costs — fine-tuning overhead, extra decision complexity, and the risk that over-weighting reflection hurts fluency — without publishing GPU-hour figures; where a figure is not published, this page does not invent one. Decision loops that stay promptable without a Self-RAG checkpoint are the topic of Agentic RAG.
How does Self-RAG differ from Corrective RAG?
Self-RAG internalises retrieve-and-critique decisions inside a fine-tuned generator via reflection tokens (Asai et al., 2023). Corrective RAG (CRAG; Yan et al., 2024, arXiv:2401.15884) uses an external lightweight retrieval evaluator that grades documents and can trigger web fallback plus knowledge-strip refinement before generation (LangChain’s Self-Reflective RAG / CRAG blog summary of Yan et al.).
- Locus of control — Self-RAG: reflection tokens in the generator’s vocabulary. CRAG: a separate evaluator model (or equivalent scorer) outside the generator.
- Fallback behaviour — Self-RAG: re-retrieve or continue under token control inside the same LM loop. CRAG: can abandon a weak corpus hit for web search when the evaluator says Incorrect (Yan et al. / LangChain CRAG sketch).
- Training surface — Self-RAG needs a reflection-token LM. CRAG can keep a stock generator and swap or fine-tune only the evaluator.
Neither pattern is crowned here. The full CRAG profile — Correct / Incorrect / Ambiguous actions, decompose-then-recompose, and the latency trade — is at Corrective RAG (CRAG).
When is a LangGraph or prompt approximation of Self-RAG enough?
A LangGraph or tool-called grader loop is enough when you need the control flow — grade retrieved documents, rewrite the query, re-retrieve, refuse unsupported answers — but cannot or will not fine-tune a Self-RAG generator. LangChain’s LangGraph cookbook implements ideas inspired by Self-RAG and CRAG with structured binary graders and state-machine edges; the authors state the simplification explicitly: one generation from all relevant documents instead of the paper’s per-chunk generations, trading some of Self-RAG’s segment-level control for fewer LLM calls (Ankush Gola, LangChain blog, “Self-Reflective RAG with LangGraph”).
That is self-reflective RAG as flow engineering. It is not the Hugging Face selfrag/selfrag_llama2_7b (or 13B) checkpoint emitting learned Retrieve / IsRel / IsSup / IsUse tokens, and it is not segment-level beam search weighted by critique-token probabilities (Asai et al. §3.3). Use the paper model when those learned tokens and critique-weighted decoding are the point; use a graph when you need composability on a closed LLM you cannot retrain. Runnable assembly of retrieval + generation wiring belongs at building a RAG pipeline; the broader family of retrieval-as-a-decision agents is at Agentic RAG.
What is Self-RAG?
Self-RAG (Self-Reflective Retrieval-Augmented Generation) is the framework from Asai, Wu, Wang, Sil and Hajishirzi (arXiv:2310.11511, 2023; ICLR 2024) that fine-tunes a language model to emit reflection tokens so it retrieves on demand and critiques relevance, support and usefulness of its own output. Released checkpoints include selfrag/selfrag_llama2_7b and selfrag_llama2_13b on Hugging Face.
What are Self-RAG reflection tokens?
Reflection tokens are special vocabulary items the trained Self-RAG generator emits during decoding. Asai et al. (Table 1) define four types: Retrieve (yes / no / continue), IsRel (relevant / irrelevant), IsSup (fully supported / partially supported / no support), and IsUse (usefulness scores 5 through 1). They make retrieval and critique part of next-token prediction rather than a separate bolted-on prompt.
Does Self-RAG require fine-tuning?
Yes for the paper recipe. Self-RAG expands the generator vocabulary with reflection tokens and trains on critic-augmented data so the model emits Retrieve / IsRel / IsSup / IsUse itself at inference. Closed APIs you cannot fine-tune this way are outside that recipe — you either run a released Self-RAG checkpoint (or retrain) or approximate the control loop with a state-machine / LangGraph grader graph.
Self-RAG vs Corrective RAG — which should I use?
Self-RAG puts retrieve-and-critique decisions inside a fine-tuned generator via reflection tokens (Asai et al., 2023). Corrective RAG (CRAG; Yan et al., 2024) uses an external retrieval evaluator that can trigger web fallback and knowledge-strip refinement while keeping a stock generator. Choose Self-RAG when you can host or train the reflection-token LM; choose CRAG when you want a swappable external grader. The CRAG deep-dive is at /architectures/corrective/.
Where is the Self-RAG paper and code?
The paper is Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection (Asai et al.), arXiv:2310.11511, ICLR 2024. Code, training notes and links to the 7B/13B Hugging Face weights are at github.com/AkariAsai/self-rag; the project page is selfrag.github.io.