Rarely. Think of the options as a ladder ordered by what each one commits you to: prompting commits nothing, retrieval commits an index, a written skill commits documentation, supervised fine-tuning commits labeled data and a training run, and reinforcement fine-tuning commits a grader plus a base model that already succeeds sometimes. Most problems resolve on the first two rungs, because what looks like a fine-tuning problem is usually a context problem. And the base model keeps improving underneath whatever you trained — your fine-tune doesn't.
Ordering these by cost is less useful than ordering them by commitment — what you are still carrying six months later.
The usual symptom is a model that answers confidently and wrongly about your domain. That reads like ignorance and is almost always absence: nothing put the right material in front of it at the right moment. Retrieval fixes that directly, and it has a property fine-tuning does not — when the underlying fact changes, you update a document rather than retrain.
Fine-tuning teaches behaviour well and facts poorly. If your problem is "it doesn't know our products," that is retrieval. If it is "it won't produce output in our house format no matter how I prompt it," that is a genuine candidate for fine-tuning.
BloombergGPT is the cautionary case: 50B parameters trained from scratch on financial data, and GPT-4 subsequently beat it on almost every public financial benchmark with no finance-specific training at all. The base model improved underneath it.
That dynamic has not slowed. Context windows keep growing, inference costs keep falling, and each new frontier release erodes the case for a fine-tune built against the last one. A fine-tuned model is an asset that depreciates on someone else's release schedule — and needs maintaining the whole time.
"Fine-tuning" bundles three decisions people often treat as one:
You pick one from each, so LoRA + supervised and LoRA + reinforcement are both ordinary combinations. And whatever the source, the dataset needs a gate: generate several candidates, keep only those passing an objective check — matched against the source, executed as code, a citation that resolves, a known label. The gate after the generator is what does the work.
The short answer above is ours, and we've written at length about how we got to it: