Calibrated abstention beats clever retries.
A small post on the single biggest agent-reliability win of the last year. The lesson, compressed: an agent that knows when not to answer is more useful than an agent that's always trying to be right.
The claim
When an agent is wrong, the natural impulse is to make it try again — better prompt, more context, second pass with a critic. That sometimes helps. More often, it spends latency, doubles cost, and gives you a confidently wrong answer with two paragraphs of justification.
The thing that has consistently moved reliability for us, across very different products, is much smaller: teach the agent to say "I'm not sure" — and make sure that "I'm not sure" actually means it.
We call that calibrated abstention. The phrase is doing two jobs. Abstention is the action: handing off, asking a clarifying question, or refusing to answer. Calibration is the discipline: when the agent says it's 80% confident, it should be right 80% of the time.
Why retries are a trap
Retries feel cheap and powerful. They are neither.
Cheap, because each retry runs the same forward pass with marginally different conditioning. If the failure mode was structural — the right document wasn't retrieved, the tool wasn't available, the user's question was actually ambiguous — the retry sees the same world and produces the same kind of mistake. It just costs more.
Powerful, because two of three retries land on plausible-sounding wrong answers, and your downstream system has no signal that anything's wrong. The agent has converted "I don't know" into "here's a confident sentence." That's a regression dressed up as a fix.
The agent didn't get better at the task. It got better at producing the kind of text that looks like getting better at the task. — retro, customer-support engagement, 2025
What "abstain" actually means
In production, abstention isn't a refusal screen. It's one of four small moves:
- Hand off. Route the conversation to a human, with the agent's partial work attached.
- Ask. Generate a single clarifying question to a real ambiguity — not a stalling tactic.
- Narrow. Answer the part you're confident about, and explicitly flag what you didn't address.
- Stop. Refuse, with a one-line reason. Costlier in latency, cheaper in trust.
The choice between these is its own little classifier — and it's the second-most-important model in the system.
Calibration in three steps
The piece that makes abstention work is the confidence signal that drives it. Three steps, in order:
-
Generate a confidence number. Logprobs, a verifier model, a self-consistency vote across
ksamples — any of these. Don't ask the model "how confident are you?" Bare self-report is famously bad. - Fit a calibration curve on real data. A few hundred labeled examples. Isotonic regression. Plot the curve every week.
- Set the threshold against a cost function. Not against a metric. The cost of a wrong answer vs. a handoff is different per product. We've seen the right threshold be anywhere from 0.55 to 0.92 — it depends on the business, not the model.
Operational notes
- Don't let the model see the threshold. If you've told the model to abstain "when uncertain," you've collapsed the calibration. Confidence and decision are separate signals.
- Track the abstention rate as a first-class metric. If it drifts, your data drifted. If it pegs to zero, you trained the calibration on the wrong thing.
- Make the handoff fast. A 6-second "Let me get someone" is a different product than a 600 ms one. The latter is trusted; the former is avoided.
The takeaway, if it isn't already obvious: there's no single trick. Calibrated abstention is a small piece of process — a confidence signal, a curve, a threshold, an interaction — stitched into the loop in a way that makes the system honest. That honesty is the reliability.
F ⊣ GShipping an agent that's a little too confident? Write to us.