08 · LLM · 5 min czytania · aktualizacja
Fine-tuning, RAG czy prompt engineering — co wybrać, żeby dostosować LLM?
W skrócie
Zacznij od dobrego promptu. Gdy modelowi brakuje wiedzy, dodaj RAG. Fine-tuning zostaw na zmianę zachowania: formatu, stylu, specjalizacji, mniejszego modelu.
Co to jest
Prompting zmienia instrukcję i przykłady w zapytaniu, RAG (retrieval-augmented generation) dokleja do zapytania fragmenty dokumentów znalezione przez wyszukiwarkę, a fine-tuning zmienia wagi modelu na podstawie przykładów treningowych; wybieraj w tej kolejności: najpierw prompt, RAG, gdy brakuje wiedzy (zwłaszcza aktualnej lub prywatnej), a fine-tuning, gdy trzeba trwale zmienić zachowanie modelu — format, styl, umiejętność konkretnego zadania — albo zastąpić duży model mniejszym. Te metody się nie wykluczają: częsty układ produkcyjny to dostrojony model, który odpowiada na podstawie dokumentów z RAG.
Najprościej rozróżnić je pytaniem: czego modelowi brakuje? Jeśli nie rozumie, czego chcesz — problem jest w prompcie. Jeśli nie wie czegoś, czego nie było w danych treningowych — potrzebuje źródła wiedzy, czyli RAG. Jeśli wie i rozumie, ale robi to niekonsekwentnie, za długo, w złym formacie lub za drogo — pomoże fine-tuning.
Koszt i czas iteracji rosną w tej samej kolejności. Prompt zmienisz w minutę, indeks RAG zbudujesz w dzień, a dobry fine-tuning wymaga zbioru przykładów, ewaluacji i ponownego treningu przy każdej zmianie.
Mechanizm — dlaczego tak działa
Prompting korzysta z tego, co model już umie. Duże modele uczą się w kontekście: kilka przykładów w zapytaniu wystarcza, żeby przejęły format i zadanie, bez zmiany wag (Brown i in., 2020). Ograniczeniem jest okno kontekstu, koszt długich promptów przy każdym zapytaniu i to, że prompt nie doda wiedzy, której model nie ma.
RAG oddziela wiedzę od modelu. Dokumenty dzieli się na fragmenty, zamienia w wektory (osadzenia) lub indeksuje słowami, a przy każdym pytaniu wyszukuje kilka najbardziej pasujących i wkleja do kontekstu (Lewis i in., 2020). Wiedzę aktualizuje się, zmieniając indeks, bez treningu. Odpowiedź można opatrzyć źródłami, a dostęp do dokumentów kontrolować uprawnieniami. Słabym ogniwem jest wyszukiwanie: jeśli właściwy fragment nie trafi do kontekstu, model odpowie bez niego, często z przekonaniem.
Fine-tuning zmienia rozkład odpowiedzi. Trening na parach „wejście → pożądane wyjście” przesuwa wagi tak, żeby model konsekwentnie produkował określony format, ton czy decyzję. Metody PEFT, takie jak LoRA (Hu i in., 2022), uczą tylko niewielkich macierzy dodanych do wag, co obniża koszt o rzędy wielkości. Fine-tuning słabo nadaje się do wgrywania nowych faktów: porównania pokazują, że RAG skuteczniej dostarcza modelowi wiedzy niż dotrenowanie na tekstach (Ovadia i in., 2024), a uczenie nowych faktów przez fine-tuning może nasilać halucynacje (Gekhman i in., 2024).
Koszt w czasie działania. Długi prompt i RAG zwiększają liczbę tokenów w każdym zapytaniu, a więc koszt i opóźnienie. Fine-tuning przenosi koszt na trening: instrukcje „wbudowane” w wagi nie muszą być powtarzane, a mały dostrojony model może zastąpić duży w wąskim zadaniu.
Na przykładzie
Krok wyszukiwania w RAG na prawdziwym korpusie: 239 haseł tego Atlasu (stan przed dodaniem tego tekstu; łącznie 141 402 słowa, średnio 592 na hasło, bez sekcji pytań). Jako zapytanie biorę pole „pytanie” każdego hasła, np. „Jak działa las losowy?”, a jako odpowiedź poprawną — hasło, z którego pochodzi. Wyszukiwarka to zwykłe TF-IDF i podobieństwo cosinusowe ze scikit-learn, bez żadnego treningu i bez sieci neuronowej.
| Wyszukiwanie | Właściwe hasło na 1. miejscu | W pierwszej trójce | W pierwszej piątce |
|---|---|---|---|
| TF-IDF na słowach | 75,3% | 90,0% | 93,3% |
| TF-IDF na fragmentach słów (3–5 znaków) | 81,6% | 94,1% | 97,5% |
Wersja na fragmentach słów lepiej radzi sobie z polską fleksją („lasu”, „lasem”, „las”). Pięć znalezionych haseł to ok. 3000 słów — tyle trafiłoby do kontekstu modelu zamiast całego korpusu ponad 140 tys. słów. Błędy są pouczające: dla pytania „dlaczego większy model może generalizować lepiej?” (hasło o podwójnym zejściu) wyszukiwarka wskazała hasło o szerokości warstwy ukrytej. Model językowy dostałby wtedy kontekst z pogranicza tematu i musiałby to zauważyć sam.
Arytmetyka fine-tuningu z LoRA: model o wymiarze ukrytym 4096 i 32 warstwach (kształt modeli ok. 7 mld parametrów), LoRA rzędu 8 na macierzach zapytań i wartości. Każda macierz dostaje 2 × 4096 × 8 = 65 536 nowych wag, razem 2 × 32 × 65 536 = 4 194 304 — ok. 0,06% wszystkich parametrów. Dlatego taki fine-tuning mieści się na jednym GPU, ale nadal wymaga setek–tysięcy dobrych przykładów i osobnej ewaluacji.
W praktyce
Reguła wyboru:
- Zawsze najpierw prompt: jasna instrukcja, format wyjścia, 3–5 przykładów; zbuduj zestaw testowy 50–200 pytań z oczekiwanymi odpowiedziami, zanim zaczniesz cokolwiek zmieniać.
- Model nie zna faktów (dokumenty firmowe, aktualne dane, przepisy) albo musi cytować źródła → RAG: indeks (
TfidfVectorizerjako punkt odniesienia, osadzenia i baza wektorowa w produkcji), 3–10 fragmentów w kontekście, ocena trafności wyszukiwania osobno od jakości odpowiedzi. - Model wie, ale odpowiada niekonsekwentnie, w złym formacie lub stylu, albo chcesz zastąpić duży model mniejszym → fine-tuning, zwykle LoRA:
peft.LoraConfig(r=8, lora_alpha=16, target_modules=["q_proj", "v_proj"]). - Wiedza zmienia się co tydzień → nie dotrenowuj modelu na faktach; aktualizuj indeks RAG.
- Każdą zmianę oceniaj na tym samym zestawie testowym; mierz osobno trafność wyszukiwania (top-k), wierność odpowiedzi źródłom i koszt na zapytanie.
Najczęstsze pytania
- Czy duże okno kontekstu zastępuje RAG?
- Częściowo. Przy kilkuset stronach można czasem wkleić wszystko, ale koszt i opóźnienie rosną z każdym tokenem, a modele gorzej wykorzystują informacje ukryte w środku bardzo długiego kontekstu (Liu i in., 2024). Przy większych zbiorach dokumentów i tak potrzebne jest wyszukiwanie.
- Czy fine-tuning nauczy model wiedzy z moich dokumentów?
- W ograniczonym stopniu i nierzetelnie. Model może przyswoić styl i słownictwo, ale fakty z niewielkiej liczby przykładów zapamiętuje słabo i nie potrafi wskazać źródła. Do wiedzy używaj RAG, do zachowania — fine-tuningu.
- Ile kosztuje każde podejście?
- Prompting — praktycznie nic poza dłuższymi zapytaniami. RAG — budowa i utrzymanie indeksu oraz dodatkowe tokeny w każdym zapytaniu. Fine-tuning — przygotowanie danych, trening (z LoRA często godziny na jednym GPU), ewaluacja i powtarzanie przy każdej zmianie modelu bazowego.
Źródła
- Brown T. B. i in. „Language Models are Few-Shot Learners”, NeurIPS 2020.
- Lewis P. i in. „Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”, NeurIPS 2020.
- Hu E. J. i in. „LoRA: Low-Rank Adaptation of Large Language Models”, ICLR 2022.
- Ovadia O., Brief M., Mishaeli M., Elisha O. „Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLMs”, EMNLP 2024.
- Gekhman Z. i in. „Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations?”, EMNLP 2024.
- Liu N. F. i in. „Lost in the Middle: How Language Models Use Long Contexts”, Transactions of the Association for Computational Linguistics 12, 2024.