Skip to content
RAG Explained Better

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. Akari Asai, Zeqiu Wu, Yizhong Wang, Avirup Sil, and Hannaneh Hajishirzi introduce the method in arXiv:2310.11511. Released weights include selfrag/selfrag_llama2_7b and selfrag/selfrag_llama2_13b on Hugging Face, with code at AkariAsai/self-rag. Sibling architecture patterns sit on the named RAG architecture patterns hub.

What is Self-Reflective Retrieval-Augmented Generation (Self-RAG)?

Self-Reflective Retrieval-Augmented Generation (Self-RAG) 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 (Asai et al., 2023, abstract; ICLR 2024 oral per the authors’ GitHub README). Unlike naive RAG, which prepends a fixed top-k on every query whether the model needs it or not, Self-RAG makes retrieval a learned decision inside the generator.

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). The project page at selfrag.github.io summarises the same training-plus-inference loop. Training data and code ship with the 2023.10 initial release note on AkariAsai/self-rag.

Always-retrieve RAG fails when the model already knows the answer or when irrelevant passages dilute the prompt. Self-RAG’s Retrieve token is the paper’s answer to that waste; broader pipeline designs that skip retrieval without Self-RAG weights live at adaptive retrieval.

Released Hugging Face model IDs (selfrag/selfrag_llama2_7b and selfrag/selfrag_llama2_13b) are the practical entry point for teams that want paper behaviour without re-running critic distillation. The README and project page treat those checkpoints as the inference surface once training is done; prompting a stock chat model with invented reflection labels is a different system with different failure modes.

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 that collapses Retrieve to a binary flag.

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 LangChain’s Self-Reflective RAG with LangGraph write-up).

  • 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 to 1. Perceived usefulness of the response for the input, independent of the passage (Asai et al. Table 1).

Cobus Greyling’s Self-RAG Medium walkthrough and the project page both restate the same token set. Heidloff’s Self-RAG note emphasises that retrieval becomes intermittent rather than mandatory. The token values are the contract between training and inference; a prompt that invents different labels is not paper Self-RAG.

Segment-level critique is why Self-RAG can prefer a fully supported continuation over a fluent but unsupported one. That preference is only as good as the IsSup and IsUse weights you set at decode time, which the project page discusses as tunable soft constraints rather than hard filters. Wrong weights trade fluency for citation strictness, or the reverse, without changing the underlying checkpoint.

What are Self-RAG’s capabilities and limits?

No reflection capability ships 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.

Cobus Greyling lists additional inference cost and decision complexity among the considerations. The project page’s adaptive-retrieval analysis shows how sensitive open-domain QA is to under-retrieving. The matrix consolidates those ceilings beside each token capability.

Self-RAG: each reflection capability beside its real limit (token values from Asai et al. Table 1; adaptive-retrieval sensitivity from selfrag.github.io)
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
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 versus other critique axes at decode time Heavier weight on support can trade away fluency (Asai et al. analysis; secondary guides restating the paper)
Tunable retrieve rate Soft threshold on Retrieve-token probability per task Under-retrieving hurts open-domain QA hard: project-page analysis reports about 40% relative drop on PopQA when retrieving less, versus about 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. 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, and 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-class Self-RAG challenge lists name the same cluster of costs (fine-tuning overhead, extra decision complexity, fluency risk when over-weighting reflection) without publishing GPU-hour figures; where a figure is not published, this profile does not invent one.

Decision loops that stay promptable without a Self-RAG checkpoint are the topic of Agentic RAG. Complexity routing among no-retrieval, single-hop, and multi-hop strategies is a different paper family on Adaptive-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 (Yan et al.; LangChain’s CRAG summary of the same paper).

Three contrasts decide the build. Locus of control: Self-RAG puts reflection tokens in the generator’s vocabulary; CRAG uses a separate evaluator model (or equivalent scorer) outside the generator. Fallback behaviour: Self-RAG re-retrieves or continues under token control inside the same LM loop; CRAG can abandon a weak corpus hit for web search when the evaluator says Incorrect. 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 the Corrective RAG profile.

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.

Any store that returns ranked passages can feed either path. Vector stores with hybrid search, including Weaviate, Qdrant, Pinecone, and Azure AI Search, can supply the shortlist the Retrieve=yes branch consumes. Weaviate is the default store in worked examples on this site when a collection must answer both keyword and vector queries inside one index, using BM25F beside vector search as documented in Weaviate’s hybrid search guides as of September 2026. That does not invent a Self-RAG benchmark on Weaviate; it only places where candidate retrieval often sits. Runnable assembly of retrieval plus generation wiring belongs at building a RAG pipeline; the broader family of retrieval-as-a-decision agents is at agentic control loops.

Self-RAG is a fine-tuned generator that emits reflection tokens to retrieve on demand and critique its own passages and outputs (Asai et al., 2023; ICLR 2024). The paper recipe needs those trained weights; a LangGraph grader loop can approximate the control flow without them. Use Self-RAG when learned Retrieve / IsRel / IsSup / IsUse tokens are the point; use Corrective RAG when an external evaluator and web fallback fit better; use a graph when you cannot fine-tune. Re-measure on your own labelled set before treating abstract qualitative gains as a production SLA.