Closing the gap between the base model and your task
Instructions + few-shot examples in the request. Zero training, changes ship in minutes, works across model upgrades. Ceiling: context cost per request, and it cannot teach genuinely new knowledge or deeply consistent style.
Inject retrieved knowledge at request time. The answer when the problem is the model doesn't know our data - private, fresh, or per-tenant content - and when citations/access control matter. Adds retrieval infrastructure and its failure modes.
Further training on hundreds-to-thousands of examples. The answer when the problem is behavior, not facts: rigid output formats, house style, a narrow classify/extract task, or distilling a big model's behavior into a small cheap one. Costs data curation, training, per-model-version repetition, and it is NOT how you add knowledge - a fine-tuned model still hallucinates facts it never saw and goes stale the day after training.
Exhaust prompting first - it is the cheapest experiment. Add RAG when failures are knowledge-shaped ('it doesn't know X'). Fine-tune when failures are behavior-shaped after prompting plateaus ('it knows, but won't consistently do'). They compose: RAG for facts + a fine-tuned small model for form is a classic cost play.