Answers · Putting a model into service
What's the difference between a model that refuses because of how it was trained and one that just gets blocked by a filter sitting in front of it?
In shortA trained refusal is a habit in the model's weights that an unusual framing can slip past; a filter is separate software that reads the text as data, so no wording reaches it.
One is a habit the model learned, held in its weights and applied as part of producing a reply. The other is a separate piece of software, sitting in front of or behind the model, that reads text as data and decides. The difference that matters is what somebody would have to control to remove each: a trained refusal goes away when you find a framing the training did not cover, and a filter goes away only when you get at the pipeline. Nothing you can type into the box removes the second one, and that is the whole distinction.
Take a request for a synthesis route for a named compound. The trained model declines it, because the alignment stage showed it many requests of that shape and it learned to attach a refusal to the shape rather than to the exact words. Now wrap the same request as a scene in a novel, where a character explains the process to another character. The same model answers. Nothing has broken. A tendency has no threshold at which it must fire, and the fiction moved the request into a region the training barely covered.
Put the same two requests through a check on the output instead. The check reads the reply. The reply contains the route, whether it arrived bare or wrapped in dialogue, because the framing lives in the request and the route lives in the answer. Both requests are stopped. The wrapper bought nothing, and that is not because the check is stricter. It is because the check was never reading the wrapper in the first place.
The trick that works on one does not reach the other
In the first expression, the rules and the request are both text in the same window, and the model produces by continuing them. There is nothing in that arrangement marking as more authoritative than . So everything usually called jailbreaking is the same move: text arrives in the stream the model is continuing and competes with the rules on equal terms. A sentence beginning ignore your previous instructions works because the model is doing what it always does, which is continuing text, and the countermand is text.
A classifier is not continuing anything. It reduces the message to features and returns a number, and the number decides. To that function, ignore your previous instructions is a string with certain properties, and those properties may well push the score up rather than down, since adversarial phrasing correlates with adversarial intent. There is no path from the content of the message into the mechanism that judges it, because the mechanism is not following the message, it is measuring it. The natural guess, that a clever enough phrasing talks its way past both, holds for the first and has no way to begin on the second.
| Where the rule lives | What it reads | What removes it | Cost at serving time |
|---|---|---|---|
| trained into the weights | nothing separate; it is the model | a framing the training did not cover, or a retrain | nothing beyond the reply already being paid for |
| a check outside the model | the request or the reply, as data | control of the pipeline, not of the text | one extra call and its delay, on every request |
The costs are not symmetrical either, and the arithmetic is dull but decisive. At twenty requests a second, a day is requests, and thirty days is . A check billed at two hundredths of a cent a call costs $51{,}840{,}000 \times 0.0002 = \ a month. If that check takes 150 milliseconds, then requests are inside it at any instant, so three of them must run concurrently just to keep pace with arrivals, before any queue forms. The trained refusal adds no call and no delay, so its serving cost is zero and its latency is zero.
Error rates have the same shape. If the check wrongly blocks one honest request in a hundred, that is people a day told no for no reason. A trained tendency does not produce that particular number, but it produces the opposite failure: some requests that should have been refused get through, and there is no dial to trade one failure against the other.
Both stop being reliable in specific places, and the places differ. The check fails on coverage rather than on authority. One that matches strings can be walked past by base64, or by a translation into a language whose patterns were never collected, so it fails on unanticipated input in the same way a tendency does. It never fails by being talked out of its job.
The trained refusal fails in the other direction as well: it is fixed at training time. A rule that the product decides on next week is not in the weights and will not be until somebody retrains, whereas a check can be updated in an afternoon. And there is one scenario where the ordering inverts entirely. If the generating model is under somebody else's control, because they run their own deployment with their own weights and their own prompt, then both the training and the prompt are inside the thing that was captured. A check sitting after the model still reads the output and can still stop it. The last limit is streaming: text already shown to a user cannot be unsent, so a check placed at the end of a streamed reply protects only the tail of it, which is a property of where the check sits rather than of how good it is.
Worth keeping
- A trained refusal is a tendency with no threshold, so an unusual framing finds the gap; a check outside the model has no such gap, because the text it reads cannot instruct it.
- To remove a trained refusal you change the input; to remove a check you change the system around the model.
- A check on the output still works when the generating model is entirely under somebody else's control, because it lives outside the thing that was captured.
Where this goes next
This question is one step of What a Model Refuses, and Why, a course that works through its subject from the beginning. The page that teaches this part of it is Three Places the Rule Can Live, and it reads the whole way through whether or not you have an account.
What an account changes is the practice: problems standing under every idea, marked with a reason rather than a tick, in a copy of the course that is yours.
Read that pageThe whole courseOther questions people ask about this
- How many legitimate requests should I be willing to block in order to catch the bad ones?Block no more legitimate requests than one prevented harmful answer is worth: the break-even count is the harm cost divided by the refusal cost.
- If someone fully jailbreaks the model, what actually stops it from deleting my database?Nothing in the model stops it. What stops it is your code: the delete tool either cannot name your database or cannot delete irreversibly.
- How do I write a safety rule I can actually test, instead of just saying 'be harmless'?Name the action, the cases it covers, the cases it deliberately leaves out and what happens when it fires; then check that two readers label the same twenty borderline requests the same way.
- How does a document the model retrieved end up giving it instructions?A retrieved document gives instructions because its text is pasted into the same prompt as your instructions, so the model cannot tell data from command.
- Why does the model return JSON wrapped in extra text when I asked for JSON?A request for JSON does not force the model to return only JSON, so you need to validate the reply and repair it once rather than assume it will parse.
- Why do the numbers look good while users keep complaining?Because the score measures a fixed set of cases with a fixed rule, and the users are living through behaviour that the set and the rule never covered.