Good Reasons to Fine-Tune
Introduction
Last lesson — L184 (Prompting vs RAG vs Fine-Tuning: The Decision) — gave you the rule that decides almost every case: knowledge → RAG, behavior → fine-tune, and prompt first, always. The honest answer there was usually don't fine-tune. This lesson is the other half of that coin: the small, well-understood set of places where fine-tuning genuinely pays off — so that when you do reach for it, you reach for it for a real reason, not a vibe.
Here is the one-sentence mental model to carry through the whole container: fine-tuning changes a model's behavior, not its knowledge. It bakes how the model responds into the weights; what it knows still belongs in the prompt or in retrieval. Every good reason below lives on the behavior side of that line — or in the economics of running a small specialist at scale. Get this, and you'll never waste a training run on a problem a prompt or a retriever already solves.

First, the Honest Default: You Probably Don't Need It
Before the good reasons, respect the default, because it's what separates engineers from cargo-cultists: most of the time, you should not fine-tune. Prompt engineering in 2026 is far more capable than most people assume — structured-output modes, tool schemas, long context, and a couple of good few-shot examples dissolve the majority of "our model isn't good enough" problems for free, in minutes.
The practitioner consensus is a ladder, and you climb it in order:
Prompt → RAG → Fine-tune → Distill
Fine-tuning is the rung where you take on a real commitment: you need a labeled dataset, a training run, an eval harness, somewhere to host the model, and a plan to re-train when things drift. So the bar for a "good reason" is high: it must be something prompting and RAG genuinely cannot deliver at the quality, cost, or latency you need. The good news is that bar is sometimes clearly met — and the rest of this lesson is exactly where.
The Core Frame: Behavior, Not Knowledge
Fine-tuning continues training a model on your examples, nudging its weights. Weights encode patterns of response — so what fine-tuning reliably shifts is behavior and form: the output shape (JSON, a function call, a SQL query), the style (tone, persona, terseness), the decision logic of a narrow task, and which refusals to make. What it does not reliably do is install facts — it pattern-matches them, forgets old ones (catastrophic forgetting), and still hallucinates, and they go stale the moment the world moves. Facts are a retrieval problem (RAG), not a weights problem.
So here's the test every good reason passes: "Is the gap a consistent behavior or form a prompt can't reliably hit — or the economics of a small specialist — rather than missing facts?" If yes, fine-tuning is on the table. If the gap is "the model doesn't know our latest pricing / our internal docs," stop — that's RAG, and no amount of training fixes it cleanly.
The Five Good Reasons
The genuine wins cluster into five recurring shapes. The first four are behavior/form wins; the fifth is the economics win (and it's often why you bother with the first four).
1) Structured-output reliability — the clearest win. If your app must emit JSON, SQL, XML, function calls, or any schema-constrained output, fine-tuning past a modest scale is almost always worth it. A prompted big model is usually right but drops or hallucinates a field on the long tail of inputs; baking the schema into the weights makes it reliably right. A fine-tuned Phi-4 (3.8B) matches GPT-4o on structured extraction — at a fraction of the cost.
2) Tool / function-calling reliability. Agents live or die on emitting the right tool with the right arguments. SFT on tool-call traces is the most reliable way to get there. The numbers are dramatic: published results show shell-command 61% → 98%, smart-home control 63% → 97%, and a banking voice assistant 34% → 96% after fine-tuning — and a 350M-parameter model reaching 96–98% of a 120B teacher on tool-call equivalence.
3) Tone, persona & refusal control. When you need a consistent voice — a brand persona, a clinical register, a specific way of declining unsafe requests — across thousands of calls, prompt instructions get overridden on edge cases. Fine-tuning makes the behavior the model's default, not a request it can ignore.
4) Domain format & jargon. Legal, medical, or a proprietary codebase: the model needs the field's phrasing, structure, and vocabulary — the style and patterns, not the changing facts. This is learnable from 500–1,000 good examples in a few hours on a single GPU. (The facts of the domain still come from retrieval.)
5) Cost & latency at scale — distillation. This is the reason that funds the others. Take a working big-model pipeline and distill it into a small fine-tuned specialist: shorter prompts (the instructions are now in the weights), cheap tokens, and predictable latency. Small fine-tuned models run at 1/5–1/29 the cost with 5–30× cheaper inference — "2026 is the year of fine-tuned small models" is not hype, it's a margin decision.
The Economics: Why a Small Specialist Wins at Scale
Reasons 1–4 tell you fine-tuning can work; the economics tell you when it's worth it. The key insight: a prompted big model carries a long, carefully-engineered prompt — system instructions, the output schema, a handful of few-shot examples — and you pay for those input tokens on every single call. Fine-tuning moves all of that into the weights, so the deployed model needs only a tiny prompt. Cheaper per token, fewer tokens, lower latency.
That creates a crossover: below some monthly volume the prompted model is cheaper (no training cost, nothing to host); above it, the fine-tuned small model wins — and at high volume it isn't close. The distillation pattern is how you get there without hand-labeling: use a strong teacher (Claude or a GPT-class model) to label your real inputs, then train a small open student on those pairs.
# DISTILLATION: turn an expensive prompted pipeline into a cheap fine-tuned specialist.
# Step 1 - use a strong TEACHER (the model you already prompt in prod) to label real inputs.
from anthropic import Anthropic
client = Anthropic()
def teacher_label(user_input: str) -> str:
msg = client.messages.create(
model="claude-opus-4-8",
max_tokens=512,
system=SYSTEM_PROMPT_WITH_SCHEMA_AND_FEWSHOT, # the 1,500+ input tokens you pay for EVERY call
messages=[{"role": "user", "content": user_input}],
)
return msg.content[0].text
# 1k-5k rows is plenty for a narrow task (see L196 - Data Quality, Coverage & Quantity).
dataset = [{"input": x, "output": teacher_label(x)} for x in real_production_inputs]
# Step 2 - fine-tune a SMALL open STUDENT on (input -> output). The instructions now live in the
# WEIGHTS, so at inference the student needs only a tiny prompt. (Unsloth = free-Colab speed + low VRAM.)
from unsloth import FastLanguageModel
from trl import SFTTrainer, SFTConfig
model, tok = FastLanguageModel.from_pretrained("unsloth/Llama-3.2-3B-Instruct", load_in_4bit=True)
model = FastLanguageModel.get_peft_model(model, r=16, lora_alpha=32) # a LoRA adapter ~ 0.5% of params
SFTTrainer(
model=model, tokenizer=tok, train_dataset=to_chat(dataset),
args=SFTConfig(per_device_train_batch_size=2, num_train_epochs=2, learning_rate=2e-4),
).train()
# Result: the 3B student matches the teacher ON THIS TASK at ~1/10-1/20 the cost and lower latency.
# You'll learn LoRA (L201), QLoRA's 4-bit (L199), and hyperparameters (L202) properly in Section 2.Notice what distillation is not: it's not "make the small model smart." It's "make the small model smart at one narrow job" — the exact job your teacher already does well. That's the whole trick, and it's why the win is real.
See It: The Fine-Tuning Payoff Lab
Put it together. Pick the gap you're facing, set how ready you are (have you really tried a prompt? do you have data?), then drag the monthly volume and watch the cost crossover. Find the trap — and watch the verdict change as you change your inputs.

Two things to feel from the Lab: the "fresh facts" chip is a trap (it routes to RAG, not fine-tuning), and the savings only appear past the break-even volume — fine-tuning's ROI is a volume game, which is exactly why the good reasons and the economics are the same conversation.
Why This Matters
Fine-tuning is the most over-reached-for tool in the AI-engineering kit and one of the most expensive to reach for wrongly — a training run, a dataset, an eval, a hosted endpoint, and a re-training treadmill. Knowing the good reasons cold means you spend that budget only where it returns multiples: reliable structure and tool calls your product depends on, a voice you can't otherwise hold, and the margin of a small specialist at scale. Everywhere else, you'll confidently say "that's a prompt" or "that's retrieval" — and ship faster than the team that fine-tuned.
🧪 Try It Yourself
Defend a decision. Take a feature you actually work on (or pick one: "summarize support tickets into a fixed JSON triage object," high volume). Answer the three Lab questions for it: (1) Is the gap form/behavior or facts? (2) Have you truly exhausted a strong prompt + structured-output mode? (3) Do you have (or can you distill) 1,000+ labeled examples? Then write one paragraph arguing either "fine-tune a thin LoRA" or "don't — it's a prompt/RAG job," and name the single number (monthly volume) that would flip your answer. If you can't name that number, you haven't earned the training run yet.
Mental-Model Corrections
- "Fine-tuning makes the model know our domain." No — it makes it sound like and format for your domain. The domain's facts still come from retrieval. Behavior, not knowledge.
- "We need GPT-5-level quality, so we must fine-tune the big model." Backwards. The win is usually a small model fine-tuned to match the big one on your narrow task — cheaper and faster, not smarter in general.
- "Fine-tuning replaces RAG." Rarely. The highest-ROI setup is a thin LoRA paired with retrieval — tuned behavior + fresh facts. They're complements (next lesson, L187 — Fine-Tuning + RAG Together).
- "It's worth it because quality went up 3%." Only if the volume justifies the cost. A quality bump with no scale and no data is a research project, not a shipping decision.
- "Distillation is for making small models generally smart." No — it's for making a small model smart at one job, by copying a teacher that already does that job.
Key Takeaways
- Fine-tuning changes behavior, not knowledge — it's for form, not facts. Facts → retrieval.
- Climb the ladder: prompt → RAG → fine-tune → distill. The default is don't fine-tune; earn it.
- The five good reasons: (1) structured-output reliability, (2) tool/function-calling reliability, (3) tone/persona/refusal control, (4) domain format & jargon — and (5) cost & latency at scale via distillation, the economics win that funds the rest.
- The evidence is real: Phi-4 (3.8B) matching GPT-4o on extraction; tool-calling 60s → high-90s; small fine-tuned models at 1/5–1/29 the cost.
- It's a volume game: a long few-shot prompt costs you every call; fine-tuning bakes it into the weights, and the savings appear past a break-even volume.
- Highest ROI = a thin LoRA on a strong base, paired with retrieval — not a from-scratch model, not a replacement for RAG.
Next: L186 — Bad Reasons to Fine-Tune (the expensive traps: chasing facts, tiny data, skipping the prompt, vanity quality bumps), then L187 — Fine-Tuning + RAG Together and L188 — Estimating Cost & Effort.