Support tickets complain your model refuses benign questions like 'how do I delete my account?' or 'help me write a strongly worded email to my landlord.' Walk through the refusal calibration investigation: where do you look, what metrics, and what knobs do you have?
Slice refusal rate by intent first, isolate the failing layer (classifier, system prompt, or base model), tune the knob, then validate on paired benign and adversarial sets.
Imagine a coffee shop where the barista refuses to make any drink with the word 'shot' in it because 'shot' could mean something dangerous. Customers asking for an espresso shot get turned away while customers ordering a latte are fine. The shop owner does not need to retrain the barista from scratch, they need to slice the complaints by drink, find that the word 'shot' is the trigger, and update the rule. Refusal calibration in a production LLM is the same workflow: slice the data, find the trigger, fix the layer responsible, and verify nothing else broke.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Over-refusal is the most common safety regression in production LLM deployments. It rarely arrives as a uniform shift; it arrives concentrated on specific intents, word stems, or surfaces. A team that treats the dashboard's global refusal-rate number as the signal will spend weeks adjusting global thresholds without finding the source. A team that slices by intent finds the root cause in an afternoon.
This deep dive walks the four-step calibration workflow: slice the rate by intent, locate the failing layer, tune the right knob, and validate on a paired benign and adversarial holdout. Each step has its own discipline, and the workflow scales from a single ticket to a full release-gate audit.
Step 1: slice refusal rate by intent
Aggregate refusal-rate dashboards are misleading. A global 3% number can hide intents at 30% and intents at 0.5%. The first move is always to bucket recent refused traces by intent.
Three practical approaches:
- Intent classifier on user messages. A small classifier (often a fine-tuned BERT or sentence embedding + cluster) labels each request. Refusal rate is computed per label.
- Topic clustering on recent traffic. Embed user messages, cluster, label the top clusters by hand, and bucket the dashboard.
- Template matching for known surfaces. For product surfaces with known request shapes (account operations, password flows, billing questions), exact-match templates suffice.
Whatever the method, the goal is the same: produce a refusal-rate column indexed by intent. The pattern almost always shows concentration, 5-10% of intents drive 50-80% of the over-refusal complaints. That concentration is the lead.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- Anthropic Claude Opus 4.7 release notes track refusal-rate per category alongside helpfulness wins on each tuning iteration
- OpenAI's GPT-5.5 system card documents refusal-rate movement across specific intent categories release over release
What an interviewer would ask next. Try answering before peeking at the approach.
QHow would you build the intent classifier or clusterer that drives the per-intent slicing?
Cluster recent user messages with an embedding model and review the top clusters with a human. Tag clusters with intent labels. Re-use the same labels to slice refusal-rate dashboards and to bucket the holdout set. Keep the labels updated as product surfaces change.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Looking at aggregate refusal rate, declaring it 'looks fine,' and missing that specific intents like 'delete' or 'strongly-worded' are over-refused at 20-30x the baseline.
60 second bullets to scan on the way to the call.
Slice refusal rate by intent before any other diagnosis
Three or four layers a refusal can come from
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.