Concept page: Fine-tuning vs RAG vs Prompting. Decision framework for choosing between prompt engineering (cheap, instant), RAG (dynamic facts + citations), and fine-tuning (LoRA/QLoRA/DPO for behavior/style/format). Shows hybrid production pattern combining all three. 6 scenarios: prompting ladder (zero-shot to CoT), RAG for knowledge, LoRA SFT for format consistency, hybrid (fine-tune+RAG+prompt), anti-pattern fine-tune-for-facts, LoRA hot-swap for multi-domain inference. Includes 2 ADRs covering the full decision ladder and LoRA/QLoRA/DPO/full fine-tune tradeoffs.
Команды постоянно тянутся к fine-tuning как к "серьёзному" решению ("у нас же свой домен, надо обучить модель"), хотя в 80% случаев prompting + RAG решают задачу за дни вместо недель, без GPU-кластера и без MLOps-цикла. Обратный антипаттерн встречается реже, но тоже больно: команда пытается prompt-инжинирингом запомнить 50K product docs, раздувает prompt до 100K токенов, латентность ползёт вверх, cost — тоже, а ответы всё равно галлюцинируют.
Три approach имеют принципиально разные cost/quality/iteration profiles. Prompting — настройка input к pretrained LLM (few-shot, CoT, structured output, prompt caching). Setup hours, cost $0.005-$0.10 / 1K req, iteration instant (поменял prompt — увидел эффект). RAG — embed query → ANN search → top-K chunks в prompt + cross-encoder rerank. Setup 1-2 недели, cost $0.01-$0.20 / 1K, iteration минуты (re-index). Fine-tuning (LoRA / QLoRA / DPO) — обучение weights на domain dataset. Setup недели, cost $50-$10K per training run, iteration часы-дни.
Этот гайд — decision ladder, в каком порядке пробовать каждый approach и когда комбинировать. Без ladder архитекторы тратят месяцы на fine-tuning там, где хватило бы 3 дня prompt-инжиниринга, либо обратное — пытаются prompt-tricks решить задачу, которая принципиально требует RAG (dynamic facts) или fine-tune (consistent format).
"Prompting первым — пять минут, eval-set, baseline. Если нужны актуальные facts или citations — RAG. Если нужно поведение (tone, format, domain language) — LoRA. Production обычно — hybrid: fine-tuned tone + RAG facts + system prompt rules."
Decision ladder, строго в этом порядке:
1. Prompting — few-shot + CoT + structured output + prompt cache
2. RAG — для dynamic knowledge / citations / multi-tenant KB
3. LoRA / QLoRA SFT — для tone / format / domain language consistency
4. DPO — для alignment (helpful, safe, on-brand)
5. Hybrid — fine-tuned base + RAG facts + prompt rules (production)
Перепрыгнуть шаг можно только если ты заранее знаешь почему. "Кажется fine-tune круче" — не аргумент.
Принципиальная разница по двум осям:
| Ось | Prompting | RAG | Fine-tune |
|---|---|---|---|
| Knowledge актуальность | training cutoff | минуты (re-index) | stale сразу после train |
| Citations / auditability | нет | да | нет |
| Поведение (tone, format) | brittle | brittle | стабильно (baked in weights) |
| Iteration speed | instant | минуты | часы-дни |
| Setup cost | hours | 1-2 week | weeks + GPU |
| Per-request cost | $$ | $$$ | $ (после train) |
Топология — типичный production LLM stack с тремя параллельными приложением путями: Prompting path (app → prompt-builder → managed LLM), RAG path (app → embedder → vector-db → reranker → prompt-builder), и Fine-tuning inference path (app → router → base model + LoRA adapters). Отдельная offline-группа — Training pipeline (dataset → GPU cluster → eval suite → adapter registry → router).
ADR на узле App API gateway развёрнут в двух документах. ADR-001 — сам decision ladder, цифры по cost/iteration, когда каждый approach пайдёт. ADR-002 — выбор техники fine-tuning (LoRA vs QLoRA vs Full vs DPO), cost guidelines, eval discipline. Это конспект гайда, привязанный к узлу.
Шесть сценариев анимации — каждый показывает один уровень ladder или anti-pattern:
Zero-shot → few-shot (+11% accuracy) → CoT (+4%). Покрывает 50-70% задач без infra.
Когда docs обновляются weekly и нужны citations. Re-index 5 минут vs re-train 4 часа.
5K (query, ideal response) пар → LoRA rank 16 → eval → registry → vLLM hot-swap. Tone-score +34%, format adherence +25%.
Production reality: один query задействует все три approach одновременно.
Anti-pattern: fine-tune для product facts → через неделю stale → бесконечный retrain цикл.
Один base 70B + 50 LoRA adapters = 50 specialized assistants на одном inference fleet.
Стандартный путь от cheap к expensive:
zero-shot -> baseline, ~$0.001/req
few-shot (3-5) -> +5-15% accuracy, ~$0.003/req
CoT -> +3-8% на reasoning tasks, latency +700ms
self-consistency-> sample N times, vote; +2-5%, cost xN
structured out -> JSON mode, function calling; -50% parsing errors
prompt caching -> Anthropic, OpenAI; 90% discount на prefix
Prompt caching (Anthropic, OpenAI, Google) — game-changer для систем с длинным system prompt + коротким user input. Cached prefix считается в 0.1× обычной цены input токенов, hit rate в production обычно 80-95%. Если у тебя 5K-токенный system prompt — без caching это $15/M, с caching ~$1.5/M.
Когда работает: docs обновляются weekly, нужны citations (legal, compliance), multi-tenant (per-tenant KB), >50K документов не помещается в context. См. подробности в /concepts/rag-architecture и /concepts/embeddings-vector-search.
Quality of retrieval = quality of answer. Базовый stack: dense embedder (Voyage-3, OpenAI text-embedding-3-large, BGE-M3) → vector DB (Qdrant, Weaviate, pgvector) с HNSW + BM25 hybrid → cross-encoder reranker (Cohere Rerank-3, BGE-reranker) → top-5 chunks в prompt.
Antipattern: skip reranker. Top-50 ANN результаты содержат много false positives — cross-encoder фильтрует их. Без reranker точность падает на 15-30% в production benchmarks.
LoRA (Hu et al. 2021) замораживает base weights, добавляет low-rank adapter matrices (rank 8-128) к attention layers. Trainable params 0.1-1% от full. Llama-3-70B + LoRA rank=16 = ~80M trainable params (вместо 70B).
Когда работает: prompt-tricks дают 70%, но 30% drift в стиле; модель отказывается следовать необычному формату; специфический жаргон (medical, legal, finance) теряется; prompt уже >2K токенов и продолжает расти.
Recipe: 5K-50K (input, ideal_output) пар, HuggingFace PEFT, rank=16, target Q+K+V+O attention proj, 3-5 epochs, lr=2e-4, bf16. Eval каждый epoch на held-out 10%. Train Llama-3-8B на A100 = $5-10, 70B = $50-100.
QLoRA (Dettmers 2023) = LoRA + 4-bit quantization base (NF4). Можно fine-tune 70B на одной A100 80GB вместо 8x. Quality потеря 1-3% vs full LoRA.
DPO (Rafailov 2023) заменяет RLHF: вместо reward model + PPO напрямую optimизирует preference pairs (chosen, rejected). Проще, стабильнее, дешевле. Llama-3-Instruct, Claude используют SFT + DPO в финальной стадии. Используется когда нужна refusal behavior, brand voice, helpful-vs-harmless balance.
Один approach редко достаточно. Customer support assistant в продакшене:
Каждый слой меняется независимо: docs update → re-index (RAG); brand voice update → re-train LoRA; policy update → edit prompt. Без разделения слоёв любое изменение требует pipeline через все три.
Контекст. Команды выбирают approach под влиянием хайпа ("LLM нужно fine-tune!") или legacy bias ("у нас уже Pinecone, давайте всё через RAG"). Без принципов получаешь либо месяцы fine-tuning там, где prompt решал, либо обратное.
Решение. Decision ladder, шесть правил:
Альтернативы.
Последствия.
Fine-tuning не нужен, если:
RAG не нужен, если:
Prompting не достаточен, если:
rag-architecture — глубокая страница про RAG: chunking, embeddings, hybrid retrieval, reranking, eval.embeddings-vector-search — dense vs sparse, HNSW vs IVF, BM25 + dense fusion.prompt-engineering-patterns — few-shot, CoT, self-consistency, structured output.llm-cost-optimization — prompt caching, model routing, batch API, distillation.llm-eval-frameworks — eval-set design, LLM-as-judge, regression testing.Книги, статьи, источники:
Применяется в кейсах: