Strona główna / Rozdział 4 · Kontekst i wiedza
Ostatnia zmiana · 7 min czytania
RAG
RAG (retrieval-augmented generation) to wyszukanie fragmentów twoich dokumentów i wklejenie ich do promptu przed pytaniem. Model odpowiada z podanego tekstu zamiast z pamięci, więc wiedza może być aktualna, prywatna i cytowana, ale jakość odpowiedzi zależy głównie od tego, co znajdzie wyszukiwanie.
Po ludzkuEgzamin z otwartą książką. Zamiast liczyć na pamięć ucznia, kładziesz przed nim właściwą stronę podręcznika tuż przed pytaniem. Jeśli podasz złą stronę, uczeń odpowie źle równie pewnie, bo czyta to, co dostał.
Przejdź krok po kroku przez pipeline. Zobacz, które fragmenty odpadają na wyszukiwaniu i rerankingu oraz co zmienia się w odpowiedzi
Pytanie pracownika: „Ile dni urlopu mam po 10 latach pracy u nas?”
Indeksowanie i chunking
- Indeks buduje się wcześniej, poza ścieżką pytania: parsowanie dokumentów, podział na fragmenty (chunki), embedding każdego fragmentu i zapis w indeksie wektorowym oraz tekstowym. Jak działają embeddingi i wyszukiwanie wektorowe, opisuje temat „Embeddingi i wyszukiwanie wektorowe”. Parsowanie PDF-ów, tabel i skanów to częste źródło błędów: tekstu zepsutego przy parsowaniu nie znajdzie żadne wyszukiwanie. Pomagają parsery rozumiejące układ strony i modele wizyjne, a wyszukiwanie po obrazach stron w ogóle pomija wyciąganie tekstu (ColPali, 2024).
- Wielkość chunka to kompromis. Za mały traci kontekst („w tym okresie przysługuje…”, ale w jakim?), za duży rozmywa dopasowanie i zjada okno. Punkt startowy to chunki po kilkaset tokenów, cięte po strukturze dokumentu (nagłówki, sekcje, akapity), a nie po liczbie znaków. Ostateczny rozmiar dobierasz ewaluacją.
- Contextual Retrieval (Anthropic, 2024): model dopisuje do każdego chunka 50–100 tokenów kontekstu z całego dokumentu, zanim chunk trafi do obu indeksów. W testach Anthropic razem z BM25 i rerankingiem obniżyło to odsetek właściwych fragmentów brakujących w top 20 (1 − recall@20) z 5,7% do 1,9%.
- Każdy chunk dostaje metadane: źródło, datę, wersję, uprawnienia. Zmieniony dokument trzeba przeindeksować, usunięty usunąć z indeksu, a zmiana modelu embeddingów wymaga przeliczenia całego zbioru.
Wyszukiwanie i reranking
- Wyszukiwanie hybrydowe (wektory plus BM25, scalone przez RRF) i reranking cross-encoderem opisuje temat „Embeddingi i wyszukiwanie wektorowe”. W pipelinie decydujesz o liczbach: ilu kandydatów pobrać (Anthropic brał top 150), ile fragmentów po rerankingu włożyć do promptu (zwykle kilka do kilkunastu) i ile opóźnienia możesz na to wydać.
- Pytanie z czatu bywa złym zapytaniem („a jak to było z tym urlopem?”). Pomaga przepisanie go przez model na samodzielne zapytanie z uwzględnieniem historii rozmowy.
- Uprawnienia filtruje się w zapytaniu do indeksu, na podstawie tożsamości użytkownika i ACL zsynchronizowanych ze źródłem, zanim fragment trafi do promptu. Polecenie „nie pokazuj tajnych dokumentów” w prompcie niczego nie gwarantuje, a dokumenty mogą zawierać wstrzyknięte polecenia (temat „Prompt injection”).
Sztuczki po stronie zapytania i indeksu
- HyDE (Gao i in., 2022): model pisze hipotetyczną odpowiedź, a wyszukiwanie idzie po jej embeddingu zamiast po embeddingu pytania. Pomaga, gdy pytania i dokumenty są sformułowane zupełnie inaczej, np. potoczne pytanie kontra język regulaminu. Kosztuje dodatkowe wywołanie modelu przed każdym wyszukiwaniem. Szkodzi, gdy model nie zna domeny: zmyślone nazwy i liczby ciągną wyszukiwanie do niewłaściwych sąsiadów. Modele embeddingów z osobnym prefiksem albo instrukcją dla zapytań częściowo zmniejszają tę rozbieżność bez dodatkowego wywołania.
- Odwrotny kierunek, po stronie indeksu: model generuje dla każdego chunka pytania, na które ten chunk odpowiada, i indeksujesz je obok niego (doc2query, 2019). Płacisz raz, przy indeksowaniu, a nie przy każdym pytaniu. Indeks rośnie, a zysk zależy od tego, jak dobrze wygenerowane pytania pokrywają prawdziwe pytania użytkowników.
- Multi-query rozwija przepisywanie pytania z poprzedniej sekcji: kilka wersji zapytania wykonywanych równolegle, z wynikami scalonymi przez RRF. Podnosi recall, gdy nie wiadomo, jakimi słowami opisano odpowiedź, kosztem wywołania modelu i kilku wyszukiwań. Pytanie wieloetapowe („kto ma więcej urlopu, zespół Ani czy Bartka?”) rozbija się na podpytania. Gdy kolejne zależy od wyniku poprzedniego, to już agentic retrieval.
- Small-to-big (parent-document retrieval): indeksujesz małe fragmenty, bo dają precyzyjne dopasowanie, a do modelu trafia większa całość, sekcja albo strona, bo daje kontekst. Ceną są tokeny w prompcie, a kilka trafień z tej samej sekcji trzeba scalić w jeden fragment.
- Late interaction (ColBERT, 2020): wektor dla każdego tokena zamiast jednego na fragment, a trafność to suma najlepszych dopasowań tokenów pytania do tokenów dokumentu (MaxSim). To środek między szybkim bi-encoderem a dokładnym cross-encoderem, kosztem wielokrotnie większego indeksu.
Prompt i cytaty
- Fragmenty idą do promptu z identyfikatorem i źródłem, a instrukcja każe odpowiadać tylko na ich podstawie, cytować identyfikatory i przyznać, gdy odpowiedzi w nich nie ma. Bez tej furtki model uzupełni luki z pamięci (temat „Halucynacje”).
- Przy długim materiale dokumenty idą przed pytaniem. Anthropic podaje, że pytanie na końcu poprawia jakość nawet o 30% przy złożonych wejściach z wieloma dokumentami. Zmienne fragmenty stoją za stałym system promptem, żeby nie psuć prompt cache’u (temat „Prompt caching”).
- Cytaty sprawdzaj w kodzie: czy cytowany fragment był w kontekście i czy cytat naprawdę w nim jest. API z wbudowanymi cytatami, jak Citations w Claude, zwracają cytowany tekst ze wskazaniem zakresu w dokumencie, a poprawność wskazania gwarantuje API.
Ewaluacja, agenci i alternatywy
- Wyszukiwanie i generowanie ewaluuje się osobno. Wyszukiwanie: zestaw pytań z oznaczonymi właściwymi fragmentami i recall@k, czyli jaka część oznaczonych fragmentów jest w pierwszych k wynikach (przy jednym właściwym fragmencie: czy w ogóle tam jest), przy k równym liczbie fragmentów w prompcie. Generowanie: wierność (czy każde twierdzenie wynika z podanych fragmentów) i kompletność, zwykle modelem jako sędzią sprawdzonym na ludzkich ocenach (temat „Ewaluacje”).
- Agentic retrieval: wyszukiwanie jest narzędziem, a model sam układa zapytania, czyta wyniki i szuka dalej (temat „Pętla agenta”). Radzi sobie z pytaniami wieloetapowymi i porównaniami, do których nie wystarczy jedno wyszukiwanie, kosztem kilku tur, czasu i tokenów.
- Długi kontekst zamiast RAG ma sens przy małym, stałym zbiorze, zwłaszcza z prompt cachingiem. Anthropic w 2024 r. wskazywał granicę ok. 200 tys. tokenów (ok. 500 stron), czyli całe ówczesne okno Claude’a. Przy oknach 1 mln tokenów (stan na wrzesień 2026) koszt na pytanie, opóźnienie i spadek jakości z długością rozstrzygają dużo wcześniej niż rozmiar okna (temat „Okno kontekstowe i agent”). RAG wygrywa przy dużym albo zmiennym zbiorze i gdy liczą się cytaty i uprawnienia. Fine-tuning uczy stylu i formatu, a faktów uczy zawodnie i trudno je potem aktualizować (temat „Fine-tuning i LoRA”).
Sprawdź się
Jak działa RAG i gdzie najczęściej zawodzi?
RAG podaje modelowi wiedzę w kontekście zamiast liczyć na jego pamięć. Wcześniej, offline, dokumenty się parsuje, tnie po strukturze, opisuje metadanymi i uprawnieniami, a potem indeksuje wektorowo oraz w BM25. Przy pytaniu wyszukiwanie idzie hybrydowo z filtrem uprawnień, reranker wybiera kilka najlepszych fragmentów, a prompt każe odpowiadać tylko z nich, z cytatami, i przyznać, gdy odpowiedzi nie ma. Najczęściej zawodzi parsowanie i wyszukiwanie, nie model: właściwego fragmentu po prostu nie ma w prompcie. Dlatego recall wyszukiwania i wierność odpowiedzi mierz osobno.
In English
RAG gives the model knowledge through its context instead of relying on its memory. Offline, documents are parsed, chunked along their structure, tagged with metadata and permissions, and indexed both as vectors and in BM25. At query time a hybrid search runs with a permission filter, a reranker picks the few best chunks, and the prompt says to answer only from them, with citations, and to admit when the answer is missing. What fails most often is parsing and retrieval, not the model: the right chunk simply is not in the prompt. So measure retrieval recall and answer faithfulness separately.
Pytania pogłębiające (5)
- Użytkownicy zgłaszają złe odpowiedzi. Jak szukasz przyczyny?
- Na trace’ach sprawdź etap po etapie: czy właściwy fragment był w wynikach wyszukiwania, czy przetrwał reranking, czy trafił do promptu i czy model go użył. Brak w wynikach to parsowanie, chunking albo zapytanie. Obecny, ale źle użyty to prompt albo model. Nieaktualna treść to proces indeksowania.
- RAG czy długi kontekst?
- Długi kontekst jest prostszy przy małym, stałym zbiorze, zwłaszcza z prompt cachingiem. RAG wygrywa przy dużym albo zmiennym zbiorze pod względem kosztu na pytanie, opóźnienia, uprawnień i cytatów, a krótszy kontekst to też mniejszy spadek jakości z długością.
- Jak obsłużyć uprawnienia?
- ACL zapisane w metadanych każdego chunka i zsynchronizowane ze źródłem, filtr w zapytaniu do indeksu na podstawie tożsamości użytkownika i test, że osoba bez dostępu nie dostaje fragmentu. Nigdy przez instrukcję w prompcie.
- Kiedy agentic retrieval zamiast jednego wyszukiwania?
- Gdy pytanie wymaga kilku kroków albo porównania źródeł i nie wystarczy do niego jedno zapytanie. Zacznij od jednego wyszukiwania, zmierz, na jakich pytaniach zawodzi, i dopiero tam płać turami i opóźnieniem agenta.
- Kiedy HyDE szkodzi?
- Gdy model nie zna domeny: hipotetyczna odpowiedź ma zmyślone nazwy, liczby i terminy, więc jej embedding ląduje obok dokumentów o czymś innym. Nie pomaga też przy wyszukiwaniu identyfikatorów i dokładnych fraz, gdzie wygrywa BM25, i przy ciasnym budżecie opóźnienia. Rozstrzyga porównanie recall@k z HyDE i bez niego na własnym zestawie pytań.
Źródła
- Anthropic: Contextual Retrieval
- Faysse i in.: ColPali, wyszukiwanie po obrazach stron (arXiv, 2024)
- Lewis i in.: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (arXiv)
- Gao i in.: Precise Zero-Shot Dense Retrieval without Relevance Labels, czyli HyDE (arXiv)
- Dokumentacja Claude: citations