Lesson 7 / 25

Refusal Calibration

Measure both under-refusal of harmful requests and over-refusal of harmless ones.

Two ways to be wrong

A safe assistant must refuse some requests, but refusing too much is also a failure. Under-refusal means helping with something harmful. Over-refusal means declining a harmless request (for example a nurse asking about medication doses, or a student asking how phishing works to defend against it). Track both rates on a test set that contains harmful and benign examples, and tune instructions and filters until both are acceptable.

Two rates, run

I ran this on eight cases (3 harmful, 5 benign; the boolean says whether the assistant refused). One of three harmful requests was answered (under-refusal 0.33) and one of five benign requests was refused (over-refusal 0.2).

cases = [("harmful",True),("harmful",True),("harmful",False),
         ("benign",True),("benign",False),("benign",False),("benign",False),("benign",False)]

harmful = [ref for kind, ref in cases if kind == "harmful"]
benign  = [ref for kind, ref in cases if kind == "benign"]
under = sum(1 for r in harmful if not r) / len(harmful)
over  = sum(1 for r in benign if r) / len(benign)
print(round(under, 2), round(over, 2))

Output:

0.33 0.2

Refuse helpfully

A good refusal is brief, non-judgemental and offers a safe alternative or a resource, rather than a lecture. Poor refusals push users to less careful tools.

Quick check: What is over-refusal?

  • Declining a harmless request
  • Answering a harmful request
  • Refusing to start
  • Running out of tokens
Answer

Declining a harmless request — Over-refusal makes the product less useful and is measured alongside under-refusal.