Choose the right approach for customizing large language models. Covers when to use fine-tuning, RAG, or prompt engineering, with cost analysis, implementation complexity, and decision framework.
This reference explains how to choose between fine-tuning, Retrieval-Augmented Generation (RAG), and prompt engineering for LLM applications. It is relevant when designing new AI features or modifying existing ones, particularly when considering trade-offs between model capability, cost, and development effort.
Use fine-tuning when you need a model that understands domain-specific concepts, patterns, or data that are not well-covered by the base model.
Fine-tuning is appropriate when:
Example training setup using Hugging Face Transformers:
python -m torch.distributed.launch \
--nproc_per_node=2 \
--use_env \
run_clm.py \
--model_name_or_path gpt2 \
--train_file train.txt \
--validation_file val.txt \
--output_dir fine-tuned-model \
--overwrite_output_dir \
--do_train \
--do_eval \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 8 \
--learning_rate 5e-5 \
--num_train_epochs 3 \
--save_steps 1000 \
--eval_steps 1000
Failure mode: Training may silently underfit if the dataset is too small or lacks sufficient diversity. The model will not learn the intended patterns and performance will degrade on out-of-distribution examples.
Use RAG when you want to provide the LLM with access to external knowledge without modifying its weights, especially when the knowledge base changes frequently.
RAG is appropriate when:
Example RAG setup with a vector database:
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# Initialize embeddings and vector store
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = Chroma(persist_directory="chroma_db", embedding_function=embeddings)
# Create retrieval chain
qa = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0),
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 4})
)
Failure mode: RAG fails silently when the vector database is not updated or becomes stale. Queries may return outdated information, and performance degrades if the retrieval process misaligns with the query intent.
Use prompt engineering when you want to leverage the existing model capabilities without additional infrastructure, training, or deployment complexity.
Prompt engineering is appropriate when:
Example prompt structure:
You are a helpful assistant that answers questions about software development.
Here is the context: [CONTEXT]
Based on the context, answer the following question:
[QUESTION]
Failure mode: Prompt engineering silently fails when the prompt lacks sufficient specificity or examples. The model may hallucinate or fail to follow instructions correctly, especially in complex or nuanced scenarios.
| Criteria | Fine-Tuning | RAG | Prompt Engineering |
|---|---|---|---|
| Data Requirements | High (10K+ samples) | Medium (document collection) | Low (natural language) |
| Knowledge Update | Requires retraining | Easy (update documents) | Easy (modify prompts) |
| Infrastructure | High (training, hosting) | Medium (vector DB, API) | Low (API calls only) |
| Speed of Iteration | Slow | Fast | Very Fast |
| Cost of Errors | High (hallucinations) | Medium (outdated info) | Medium (misunderstood instructions) |
Confusing RAG with Fine-Tuning: RAG does not require retraining but can be combined with fine-tuning. Using both together is common but requires careful orchestration.
Confusing Prompt Engineering with Model Selection: A better prompt does not replace a better model. The same prompt may work differently across models (e.g., gpt-3.5 vs gpt-4).
Confusing RAG Retrieval with Fine-Tuning: Both approaches improve factual accuracy, but RAG uses external data while fine-tuning modifies the model's internal representation.
Use transformers library to train a model on domain-specific text. Specify --model_name_or_path with a base model and provide training and validation files.
# Example command to fine-tune a causal language model
python run_clm.py \
--model_name_or_path gpt2 \
--train_file data/train.txt \
--validation_file data/val.txt \
--output_dir output_model \
--do_train \
--do_eval \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 8 \
--learning_rate 5e-5 \
--num_train_epochs 3
Use langchain to create a retrieval-augmented pipeline. The key components are embedding model, vector store, and retrieval chain.
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
# Create vector store from documents
vectorstore = FAISS.from_texts(documents, OpenAIEmbeddings())
# Query with similarity search
docs = vectorstore.similarity_search(query)
Use structured prompt templates with variable substitutions to maintain consistency.
template = """
User: {question}
Assistant: Based on the following context:
{context}
Answer in a concise way.
"""
prompt = template.format(question="What is AI?", context="AI is artificial intelligence.")
Fine-tuning errors include:
ValueError: Training data is too small - Indicates insufficient examples for learningRuntimeError: CUDA out of memory - Suggests batch size or model size mismatchRAG errors include:
RetrievalError: No documents found - Indicates missing or misconfigured vector storeContextWindowExceededError - Happens when retrieved context exceeds token limitsPrompt engineering failures include:
ResponseGenerationError: Model did not follow instructions - Indicates unclear or ambiguous promptHallucinationError: Generated content contradicts known facts - Suggests insufficient grounding in factsFine-tuning requires model versioning and rollback procedures. When deploying a new fine-tuned model, ensure you can quickly switch back to the previous version if needed.
RAG systems need monitoring for:
Prompt engineering requires:
The key is choosing the right approach based on your data, infrastructure, and error tolerance requirements. Each method has distinct trade-offs in terms of effort, cost, and capability that should guide your implementation decisions.
This page was rewritten on 15 October 2026. It replaced a templated version that was not specific to its own title. How these pages are written and checked. If anything here is wrong, tell us at [email protected] and we will correct it.
We use cookies for analytics (Google Analytics) and advertising (Google AdSense) to improve your experience and support free content. Privacy Policy