AI coding

Prompting the Cheap Tier to Say When It Is Unsure

Antonio Evans9 min read

A two-panel diagram: left, a prompt template box with reason, confidence band and answer fields in order; right, a grid of stated bands against actual accuracy with a diagonal reference line.
Key points

Key points

  1. 1Ask for a one-sentence reason and a coarse confidence band before the answer, and define the band as the stated probability that the answer is correct.
  2. 2Validate the signal on 200 to 500 labeled items by bucketing answers by stated band and comparing each bucket's accuracy to its claimed range.
  3. 3Verbalized confidence from language models runs overconfident, so treat a stated band as a hypothesis to be tested, not a measurement.
  4. 4A confidence band is only useful if it drives a decision: accept, escalate to a stronger model, or send to a human.

Why a cheap model's confidence matters

A cheap model handles the volume. A stronger model handles the hard cases. The whole pattern depends on one thing working: a reliable signal for which case is which. Routing systems that send simple queries to a small model and escalate only when the small model's output is suspect can keep most of the quality of the expensive tier while cutting cost substantially, with reported reductions of 45 to 85 percent depending on workload in routes studied with RouteLLM, as summarized in this routing and cascades writeup. Cascading, the sequential version of this idea, explicitly uses the cheap model's uncertainty as the trigger for escalation.

The catch is stated plainly in the same source: LLM self-reported confidence is poorly calibrated, and a model can produce a fluent, authoritative-sounding answer while being factually wrong. That is not a reason to give up on the signal. It is a reason to design the prompt around it, and then measure whether the signal is worth anything on your data.

Two findings shape the design. First, models are systematically overconfident on numerical uncertainty: nominal 99 percent intervals covered the true answer only 65 percent of the time on average across modern models, per the FermiEval calibration study. Second, confidence is steerable. Explicit instructions shift stated confidence in a controlled direction, which means your prompt wording is part of the measurement instrument, and you need to be deliberate about it, as shown in work on calibrating confidence with semantic steering. A third finding, from document extraction work, is that both true and false positives can come back at 100 percent confidence, which makes threshold filtering on raw self-reports useless unless you fix the prompt and the scale, per this account of the confidence calibration problem.

The three-line prompt

The prompt asks for three things in a fixed order, with the answer last. Reason first forces the model to commit to an interpretation. Band second forces a number before it has drafted text it might defend. Answer last gives you something to score.

You will answer a question about {task_domain}.

Reply with exactly three lines and nothing else.

Line 1, REASON: one sentence explaining the single most important
factor in your answer.

Line 2, CONFIDENCE: a band from this list only:
  0-50%, 50-60%, 60-70%, 70-80%, 80-90%, 90-100%
This means the chance your answer on line 3 is correct.

Line 3, ANSWER: your answer, as short as the task allows.

Four design choices carry most of the weight.

The band is coarse and the list is closed. Ten-point steps give six options. Finer steps invite meaningless precision, and a closed list makes parsing trivial and comparison across items fair. If the model can emit "73 percent," you have to decide what a 73 means, and so does every downstream consumer.

The meaning is defined in the prompt. The sentence "This means the chance your answer on line 3 is correct" is doing real work. Without it, models interpret confidence as fluency, as familiarity with the topic, or as certainty about the reasoning path. Define it once, in the system prompt, and keep the wording fixed across every call you ever score. Do not vary it between evaluation and production.

The order is reason, band, answer. Asking for the band before the answer keeps the model from anchoring on text it has already written. Asking for a short reason first gives the band something concrete to rest on without spending many tokens.

The rubric stays hidden. Never show the model your labeled examples, your target accuracy per band, or your acceptance thresholds. A model that can see the rubric will produce bands that match it, and the signal becomes a reflection of your instructions rather than the model's state.

Keep a fixed output budget. Use the output-token setting your endpoint supports, since Chat Completions uses max_completion_tokens and the Responses API uses max_output_tokens, per OpenAI's token documentation. The three-line format is short, so a modest cap protects you from a model that decides to write an essay instead of a band.

Choosing the band scheme

Fewer bands mean more items per bucket, which means tighter estimates. More bands give finer routing decisions but need more labeled data to validate. For a first pass, six bands over 300 items puts roughly 50 items per bucket if the bands are used evenly, and they will not be. Expect the middle and high bands to dominate.

Band schemeBandsItems needed for ~50 per bucketBest for
Binary2 (low, high)100 to 200Simple escalation trigger
Coarse4 (0-50, 50-70, 70-85, 85-100)200First validation run
Standard6 (10-point steps)300Default choice
Fine10 or more500+ and probably still sparseRarely worth it for self-reports

A binary scheme is the most honest starting point if you only need an escalation trigger. It throws away information, but it is easy to hit 100 to 200 items per bucket, and the decision rule is trivial: escalate on low. The six-band scheme is the default recommendation because it lets you catch the specific failure that matters, a high band that is not accurate. Once you know your buckets, you can collapse them into a binary rule for production.

Running the validation

You need labeled items in the same distribution as production traffic, with a known correct answer and a scorer that decides correct or incorrect without consulting the model. 200 to 500 items is the working range. Below 200, a bucket with 20 items cannot distinguish 60 percent accuracy from 80 percent.

The procedure:

  1. Freeze the prompt, the band list, and the model configuration. Record a prompt version identifier on every call.
  2. Run every labeled item through the exact production path and store the parsed reason, band, answer, correctness, token counts, and prompt version.
  3. Bucket by band. For each bucket, compute accuracy as correct divided by total, and the midpoint of the claimed band.
  4. Compare. A well-behaved signal has accuracy inside or close to the claimed range in every bucket, and it rises monotonically as the band rises.

Track token usage at the same time, because the confidence check has a cost. Token counts differ from word counts and can differ across models for identical text, and reasoning tokens are billed as output even though you never see them, per OpenAI's token documentation. A 200-item validation run is cheap, but the per-request overhead of reason and band lines is permanent, so measure it. Guidance on attributing spend per request, feature, and prompt version is in this cost-tracking playbook and this guide to tracking token cost across workflows, both of which treat a prompt version tag as the minimum for comparing one prompt against another.

A small script does the arithmetic:

from collections import defaultdict

# rows: {"band": "70-80", "correct": True, "prompt_version": "v3"}
def reliability(rows):
    buckets = defaultdict(lambda: {"n": 0, "correct": 0})
    for r in rows:
        b = buckets[r["band"]]
        b["n"] += 1
        b["correct"] += int(r["correct"])
    out = []
    for band, b in sorted(buckets.items(),
                          key=lambda kv: float(kv[0].split("-")[0])):
        out.append({
            "band": band,
            "n": b["n"],
            "accuracy": b["correct"] / b["n"],
            "claimed_mid": (float(band.split("-")[0]) +
                            float(band.split("-")[1].rstrip("%"))) / 200,
        })
    return out

Run it per prompt version. If you change the wording of the confidence instruction, you have a new instrument and you need to validate it again.

Reading the reliability table

Here is a worked example with 400 items, six bands, and a hypothetical outcome.

Stated bandItemsAccuracyClaimed midpointGapVerdict
0-50%180.390.25+0.14Too few items to judge
50-60%340.520.55-0.03Inside range
60-70%710.610.65-0.04Inside range
70-80%1180.550.75-0.20Fails, badly
80-90%1210.780.85-0.07Slightly optimistic
90-100%380.900.95-0.05Acceptable

The headline is the 70-80 percent bucket: it claims at least 70 and delivers 55. That bucket alone holds 118 items, nearly 30 percent of traffic, and it is the bucket most production rules would trust. A rule that accepts anything at 70 percent or above would take 277 items, 69 percent of traffic, at an overall accuracy of about 0.72, well below the 0.75 the model's high confidence implies.

Two decisions show up in this table. The first is whether the signal is usable at all. Monotonicity holds here: each higher band is more accurate than the one below except for the 70-80 dip, which is exactly the kind of anomaly that kills a naive threshold. The second is how to fix it. Either widen the bands, merging 70-80 into a 70-100 bucket that reports 0.73 and is honestly labeled as such, or recalibrate by applying an offset learned from this table, or stop trusting the band and gate on something else. Recalibration is the standard move for overconfident intervals: a conformal approach restored accurate 99 percent coverage and cut the interval score by 54 percent in the FermiEval study.

The most common failure is not the dip. It is the flat line. If the 60-70, 70-80, and 80-90 buckets all land between 0.68 and 0.72, the model has one confidence level dressed in three costumes, and no threshold on that number will separate the easy from the hard. In that case, stop scoring the band and change the input to the decision: escalate based on the reason line's content, on retrieval quality if the task is grounded, or on a second cheap check.

Turning the band into a decision rule

The band is useless until it gates something. The simplest rule uses two thresholds and the calibrated accuracy table, not the stated band alone.

  • Accept when the calibrated accuracy for the item's band meets your quality bar. If your bar is 0.85 and the 80-90 bucket is calibrated to 0.78, that bucket does not qualify even though the model claimed 85.
  • Escalate to a stronger model when the calibrated accuracy falls below the bar but above a floor, so you spend the extra tokens only where they might buy a correct answer.
  • Abstain or hand off to a human when the calibrated accuracy is below the floor. An explicit "I don't know" that triggers escalation costs less than a confident wrong answer; early abstention research achieved a 13 percent cost reduction and a 5 percent error reduction while accepting a 4.1 point increase in abstention rate, as reported in the routing and cascades writeup.

Measure in cost per successful outcome, not cost per token, because two models with the same accuracy can differ enormously in tokens spent to get there. Cost per outcome is the metric that ties spend to whether the work was good, per Splunk's writeup on measuring AI. Worked example: a cheap call costs a fraction of a cent, an escalation costs several times more, and a human review costs dollars. If the confidence band lets you escalate 20 percent of a 10,000-item batch instead of sending all of it to the strong model, the saving is roughly 80 percent of the difference in per-item price, before counting the reason and band lines you added to every cheap call.

The design also interacts with how you pick the model. If the confidence check shows the cheap tier is trustworthy on 60 percent of your traffic, routing is now a data-backed decision. Unified access across providers through one API key, priced in dollars, removes the plumbing so you can swap tiers and rerun the same validation, which is the point of Quanta Inference.

Comparing signals: band versus other options

Self-reported confidence is one signal among several. Pick based on what you can measure and what your API exposes.

SignalWhat you needStrengthWeakness
Stated band before answerPrompt change onlyCheap, model-agnostic, easy to logOverconfident, needs validation
Token log-probabilitiesAPI access to logprobsPurely internal, no extra tokensNot exposed by every provider
Answer consistency across samplesSeveral calls per itemStrong indicator of uncertaintyMultiplies cost per item
Retrieval qualityA RAG pipelineCatches bad grounding directlyOnly applies to grounded tasks
A trained classifier on the reason lineLabeled data and a small modelLearns your domain's failure modesAnother model to maintain

The practical order is: start with the stated band because it costs almost nothing to add and is easy to throw away. If it fails validation, add answer consistency for the ambiguous middle band only, and if that is still weak, train a small classifier on the reason text using your labeled set. Failure detection research found that aggregating multiple steered confidence estimates outperformed single confidence signals on calibration and failure detection, per the SteeringConf paper, and an overview of the method is in this alphaXiv summary. If you want someone to run this loop with you, a consulting call is the fastest path, and if you are building the validation harness inside a coding agent, the relevant Quanta skills can be installed into the agent directly.

FAQ

FAQ

How many labeled items do I really need?

200 is the floor and 500 is comfortable for a six-band scheme. The constraint is per bucket, not total: aim for at least 30 to 50 items in every band you plan to act on. Bands with fewer items give you a number but not a trustworthy one, so consider merging them before you draw conclusions.

What if the model always says 90-100 percent?

That is the classic overconfidence pattern reported in extraction and estimation work, where true and false positives both score at the top of the scale, per this calibration account. Merge the top bands into one, validate again, and if accuracy in that merged bucket is still low, abandon the band and use a different signal. Do not keep a band that never varies.

Should I include the rubric or examples in the prompt?

No. Examples and target accuracies let the model match your expectations instead of reporting its own state. The one thing you must include is the definition of what the band means, because without it the model invents its own definition. The pre-answer ordering also matters: ask for the band before the answer so it is not anchored on drafted text.

How does the confidence check affect token cost?

It adds a short reason and a band to every call, plus the parsing overhead. That is a small permanent increase, far smaller than escalation, so compare total cost per successful outcome rather than per request. Tag every call with a prompt version so you can tell whether a cost change came from the new lines or from a template edit, as recommended in this cost-tracking playbook.

Can I trust a single validation run?

No. Re-run the validation whenever the prompt, the model, the band list, or the task distribution changes, and spot-check with fresh labeled items periodically. Calibration drifts as traffic shifts toward harder or easier items, and a bucket that was honest last quarter may not be. Keep the scoring script and the labeled set under version control so each run is comparable to the last.

Sources

Sources

  1. LLM Routing and Model Cascades: How to Cut AI Costs ...
  2. Evaluating Confidence Interval Calibration with FermiEval
  3. Calibrating LLM Confidence with Semantic Steering
  4. The Confidence Calibration Problem in Generative AI ...
  5. Understanding and counting tokens | OpenAI Help Center
  6. How to track LLM costs (2026): A playbook for per-user, per ...
  7. How to Track Token Cost Across LLM Workflows - Honeycomb
  8. Measure AI by Cost-Per-Outcome
  9. Calibrating LLM Confidence with Semantic Steering
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles