Home AI Solutions Ready-made Solutions Peers & Simulation RAG & Retrieval Use Cases Frameworks Blog Deutsch Contact Us
Back to the blog

Retrieve Only When It Helps

“Always retrieve” is the default because it is simple, and for a while it was ours. Then we noticed the assistant answering “how do I reset my password” with three loosely related policy excerpts and a hedge.

The Answer That Was Too Long

The complaint was not that answers were wrong. It was that simple questions produced elaborate ones. Asked how to reset a password, the assistant retrieved three policy documents, quoted them, and added a caveat about exceptions that did not apply.

The retrieval was working exactly as built. Every question triggered a lookup, every lookup returned its top passages, and every set of passages ended up in the answer whether or not it added anything.

Documentschunks · vectors Indexvector + keywordgraph Query Hybrid Searchrrf Rerankercross-encoder Answerwith sources
Documents are chunked, embedded and indexed — vectors plus keywords. 1/4

The Idea We Took From the Research

Asai and colleagues framed the problem clearly: retrieving a fixed number of passages regardless of whether retrieval is needed, or whether the passages are relevant, can reduce a model's versatility and produce unhelpful output. Their answer, Self-RAG, trains a model to decide on demand and to reflect on what it retrieved using special tokens.

The diagnosis matched ours precisely. The remedy did not fit our situation, and the distinction is worth being explicit about.

Why We Kept the Decision Outside the Model

Training the decision into the model means the decision is only as inspectable as the model is. Ours has to be auditable: a regulated customer needs to see why a given answer did or did not consult the document base, and needs that answer to be stable across model versions.

So we put the decision in the pipeline. A small classifier runs before retrieval and outputs one of three routes: answer directly, retrieve then answer, or escalate. It is a component we can test exhaustively, version independently, and explain in a sentence.

Decision inside the modelDecision in the pipeline
Learns subtle cases from dataOnly as good as its features
Changes when the model changesVersioned on its own
Hard to explain a single caseOne classifier output to point at
Needs training data and a tuning runNeeds a labelled set and an afternoon

What Predicts It Well Enough

Two signals carried most of the accuracy. First, whether the question names an entity that exists in the corpus — account numbers, product codes, contract references. If it does, retrieve. Second, whether the question matches a small set of procedural intents that the assistant already knows how to answer, which is the password-reset class.

Everything else defaults to retrieving. We would rather retrieve unnecessarily than miss, because an unnecessary lookup costs latency while a missed one costs a wrong answer.

What Changed in the Output

Short questions started getting short answers, which was the point. The measurable effect was in follow-up rate: fewer clarifying turns, because the answer was no longer padded with material the user had to read past.

Token cost fell as a side effect rather than a goal. The lookups we skipped were the cheap ones, so the saving was modest and not the reason to do it.

What We Are Not Saying

We are not saying learned retrieval decisions are the wrong direction. For open-domain assistants without an audit requirement, letting the model decide is likely better than a classifier, because the judgement is genuinely subtle and a rule set will always be crude.

We are also not claiming three routes are sufficient in general. It is what this assistant needed. A system with several distinct corpora would need the route to name which corpus, and that is a different classifier.

Sources