Strona główna / Artykuły

Wyjaśnienie retrieval-Augmented Generation: naprawa luk w wiedzy modeli LLM

Dlaczego modele językowe generują halucynacje i tracą aktualność, oraz jak generacja wzbogacona o wyszukiwanie rozwiązuje ten problem krok po kroku: dzielenie na fragmenty, embeddingi, wyszukiwanie informacji i wzbogacanie promptu.

Wydawca: REACTAPP.TOP5 min czytania1205 słów

Źródła: What LLMs Often Get Wrong At, And How RAG Cures That

Gdzie modele językowe popełniają błędy

Pomyśl o końcowych egzaminach ustnych. Uczy się wszystkiego w noc przed egzaminem, wchodzi do sali, mówi pewnie z egzaminatorem i ma nadzieję, że wszystko pójdzie dobrze. Wtedy egzaminator pyta: „Dlaczego wybrałeś właśnie tę metodę w swoim projekcie?”. Nagle w pomieszczeniu zapada cisza.

Modele językowe napotykają ten sam problem.

Są zaprojektowane tak, by generować odpowiedzi brzmiące przekonująco. To oznacza, że często nie wiedzą, jak przyznać się do tego, że „nie wiem”.

Istnieje też problem przestarzałej wiedzy.

Załóżmy, że ten sam egzaminator pyta:

„Dlaczego wybrałeś tę metodę, skoro teraz istnieje lepsza?”

Będziesz w kropce.

Modele językowe napotykają dokładnie ten problem, gdy fakty, na których zostały wytrenowane, już nie odzwierciedlają rzeczywistości.

Zatem prawdziwe pytanie brzmi: Jak dostarczyć modelowi językowemu właściwe fakty dokładnie wtedy, gdy ich potrzebuje?

Wejście w generację wzbogaconą o wyszukiwanie

Niech nazwa cię nie przestraszy. To w rzeczywistości prosty proces: znajdź odpowiednie informacje, przekaż je modelowi i pozwól mu przekształcić je w odpowiedź.

To cała idea.

Rozważmy, co tak naprawdę dzieje się za tym opisem.

Sformułowanie problemu

Załóżmy, że tworzysz wewnętrznego asystenta AI dla firmy.

Firma ta ma mnóstwo dokumentów: podręcznik pracownika, wewnętrzne FAQ, zasady bezpieczeństwa i tak dalej.

Gdy asystent zostanie uruchomiony, ludzie naturalnie zaczną z nim eksperymentować. Ktoś wpisuje:

">Ile dni urlopu rodzicielskiego mam prawo otrzymać?"

Problem polega na tym, że model nie posiada wbudowanej świadomości specyficznych zasad twojej firmy. Nie można po prostu włożyć setek długich dokumentów do promptu i oczekiwać klarownej odpowiedzi — takie postępowanie niesie ryzyko przeładowania okna kontekstowego, dezorientacji modelu oraz innych problemów.

Jak faktycznie działa RAG

Zamiast polegać na wewnętrznej wiedzy LLM do udzielania odpowiedzi, najpierw pobieramy istotne materiały z naszej własnej bazy wiedzy. Następnie te materiały są przekazywane LLM.

LLM wykorzystuje te dostarczone informacje do sformułowania swojej odpowiedzi.

Innymi słowy, model nie musi zapamiętywać wszystkiego. Potrzebuje jedynie poprawnych informacji dostarczonych w odpowiednim momencie.

To rodzi kolejne pytanie: jak w ogóle zdecydować, co jest istotne?

Pobieranie danych

Wysyłanie każdego dokumentu do modelu LLM przy każdym pytaniu byłoby marnotrawstwem czasu i zasobów. Dlatego należy najpierw wyodrębnić istotne fragmenty, ponieważ skanowanie wszystkiego za każdym razem jest kosztowne i nieefektywne.

Aby to osiągnąć, dokumenty dzieli się na mniejsze części zwane chunkami. Jeden chunk może dotyczyć zasad urlopu rodzicielskiego, inny – procedur bezpieczeństwa, a jeszcze inny – sposobu zwrotu kosztów.

Znalezienie odpowiedniego chunka

Użytkownik może sformułować swoje pytanie w ten sposób: ">Ile czasu wolnego mogę mieć po urodzeniu dziecka?"

Tymczasem sam dokument może zawierać informację: ">Pracownicy mają prawo do 26 tygodni urlopu rodzicielskiego."

Sformułowanie się różni, ale znaczenie jest identyczne. Aby przezwyciężyć tę różnicę, systemy RAG polegają na embeddingach.

Czym są embeddingi

Embedding przekształca fragment tekstu w zbiór liczb, które kodują jego znaczenie. Teksty o podobnym znaczeniu znajdują się blisko siebie w tym przestrzeni liczbowej — mierzonej za pomocą tak zwanego odległości wektorowej, która jest w istocie sposobem na określenie, jak daleko od siebie znajdują się dwa wektory.

Te embeddingi znajdują się wewnątrz bazy danych wektorowych. Gdy pojawia się nowe pytanie, ono również jest przekształcane w embedding, a system szuka najbliższych odpowiadających fragmentów.

Rezultatem jest zbiór istotnych fragmentów, które następnie są przekazywane do LLM jako kontekst wspierający.

Wzmacnianie

Gdy już zidentyfikowano istotne fragmenty, kolejnym krokiem jest ich połączenie.

Są one wstawiane do okna kontekstowego LLM razem z oryginalnym pytaniem:

Context:
Employees are entitled to 26 weeks of parental leave.

Question:
How long can I stay away from work after having a baby?

W tym momencie LLM ma wszystko, co jest potrzebne do dokładnej odpowiedzi.

Generowanie

Następuje teraz ta część, w której LLM doskonale radzi sobie: wytwarzanie rzeczywistej odpowiedzi.

Czyta zarówno pytanie użytkownika, jak i pobrany kontekst, a następnie generuje odpowiedź:

"Masz prawo do 26 tygodni urlopu rodzicielskiego.

I to zamyka cykl: Pobierz → Wzbogać → Zgeneruj.

Haczyk

LLM może rozumować tylko na podstawie tego kontekstu, który został pobrany. Jeśli zostanie pobraany niewłaściwy fragment, ostateczna odpowiedź może nadal być błędna, mimo że proces przebiegł prawidłowo.

Rozważmy następujący scenariusz:

Pytanie: „Jak długo trwa urlop rodzicielski?”

Pobrany fragment: „Poinformuj swojego kierownika 30 dni przed rozpoczęciem urlopu rodzicielskiego.”

Otrzymana odpowiedź: asystent informuje pracownika, że musi poinformować kierownika z pełnym miesiącem wyprzedzeniem o rozpoczęciu urlopu rodzicielskiego — co jest technicznie związane z tematem, ale w rzeczywistości nie odpowiada na pytanie o długość urlopu.

Poprawa jakości wydobywania informacji

Jak więc zapewnić, że krok wydobywania pokaże odpowiednie materiały?

Tutaj istotne są kilka czynników:

Strategia dzielenia na fragmenty: sposób podziału dokumentów wpływa na to, czy powiązany kontekst pozostaje nienaruszony w obrębie jednego fragmentu.

Jakość embeddingów: silniejsze embeddingi ułatwiają dopasowanie pytania użytkownika do treści, która rzeczywiście na nie odpowiada.

Technika wyszukiwania: Połączenie wyszukiwania opartego na podobieństwie semantycznym z tradycyjnym wyszukiwaniem według słów kluczowych pomaga uwzględnić zarówno znaczenie, jak i dokładne sformułowanie.

Ponowna klasyfikacja: Najpierw pobiera się początkową grupę kandydujących fragmentów, a następnie stosuje się drugi etap klasyfikacji, aby wyłonić te najbardziej przydatne.

Podstawowy cel pozostaje prosty: umieścić właściwy kontekst przed modelem LLM.

Podsumowanie

RAG to nie jakiś magiczny trik.

Znajdź odpowiednie informacje, przekaż je modelowi LLM i pozwól mu wygenerować odpowiedź.

To jest cały mechanizm.

Model LLM nigdy nie musiał znać wszystkiego od razu.

Potrzebuje jedynie właściwego kontekstu, dostarczonego w odpowiednim czasie.

I to jest podstawowa zasada RAG: złe dane prowadzą do złych wyników, a wysokiej jakości dane zapewniają wysoką jakość wyników.

Teraz, za każdym razem, gdy ktoś wspomni „RAG to, RAG tamto”, będziesz dokładnie wiedział, o czym mówi.

Literatura pokrewna

  • Doskonałe dostosowanie LLM: routowanie, pobieranie i ocena w zależności od surowych rozmiarów modelu — Dowiedz się, jak wybierać między małymi a dużymi modelami językowymi w zależności od obciążenia pracy, mierzyć koszt za pomyślnie wykonane zadanie oraz najpierw wykorzystywać routowanie, RAG, buforowanie i weryfikację.