Mapa pól RAG: od podstawowych zasad do błędów w produkcji
Dwa pipeline’y, trzy etapy oraz lista nazwanych błędów: jak działa generacja wzbogacona o dane, gdzie się psuje oraz jakie rozwiązania radzą sobie z każdym problemem.
Źródła: The Complete RAG Roadmap: From “What Is It?” to Production
Generowanie wzbogacone o wyszukiwanie jest łatwe do zaprezentowania, ale trudne do poprawnego wdrożenia. Działający prototyp można stworzyć w czterdziestu liniach kodu i w ciągu popołudnia. Następnie przychodzi długi proces wyjaśniania, dlaczego system trzy razy na dziesięć udziela błędnych odpowiedzi lub dlaczego chatbot z pewnością siebie cytuje klauzulę umowy, której nigdy nie istniało. Ten plan obejmuje oba aspekty: zaczyna się bez żadnego żargonu, a kończy na technikach, które odróżniają demonstrację na weekend od systemu, któremu ludzie powierzają swoje pieniądze.
Idea w prostych słowach
Wyobraź sobie model językowy jako dobrze wykształconego absolwenta, który nigdy nie widział twoich plików. Przyswoił sobie dużą część publicznej sieci internetowej, ale nic z twoich umów najmu, polityki HR, katalogu produktów ani prezentacji zarządu z ostatniego kwartału.
RAG przekształca egzamin z zamkniętą książką w egzamin z otwartą książką. Zamiast polegać na tym, że model zapamiętał twoje dane, system najpierw wyszukuje odpowiednie strony, przekazuje je modelowi i poleca mu odpowiadać wyłącznie na podstawie tych informacji. Nazwa ta opisuje trzy kroki:
- Pobierz: przeszukaj swoje dokumenty i wybierz te nieliczne fragmenty, które są istotne.
- Wzbogać: umieść te fragmenty w instrukcji obok pytania.
- Stwórz: poproś model, aby napisał odpowiedź opartą na dostarczonych mu informacjach.
To jest cała idea. Każda późniejsza modyfikacja, od narzędzi do ponownego rankowania po grafy, służy tylko temu, by jeden z tych trzech kroków stał się lepszy.
Dla czytelników niebędących specjalistami technicznymi korzyścią jest możliwość wyjaśnienia, co buduje zespół inżynierski, dlaczego coś zawodzi w określony sposób oraz jakich pytań należy zadawać podczas prezentacji dostawcy. Dla inżynierów chodzi o mechanizmy działania, kompromisy i sposoby awarii, co oznacza konieczność zastanowienia się, dlaczego podobieństwo kosinowe jest dziwną zamiennikiem relevancji, dlaczego fragmenty o długości 512 tokenów psują struktury danych oraz dlaczego zbiór do oceny ma większe znaczenie niż wybór modelu. Nikt nie uzna stwierdzenia „po prostu użyj bazy danych wektorowej” za kompletną odpowiedź.
Dwa procesy, nie jeden
Prawie każdego myli jeden aspekt strukturalny – system RAG nie jest pojedynczym procesem. To dwa procesy, które nigdy nie działają jednocześnie.
Przebieg A zajmuje się indeksowaniem. Odbywa się to z wyprzedzeniem, zazwyczaj jako zadanie zbiorcze. Dokumenty są dzielone na fragmenty, z których każdy jest przekształcany w listę liczb odzwierciedlających jego treść, a te liczby trafiają do indeksu umożliwiającego wyszukiwanie. To powolny proces, a to właśnie na nim decyduje się około 80% jakości ostatecznej odpowiedzi.
Przebieg B służy do wyszukiwania. Działa w czasie rzeczywistym, gdy tylko użytkownik zadaje pytanie. Pytanie jest przekształcane na liczby za pomocą dokładnie tej samej metody, znajdują się najbliższe przechowywane fragmenty, które są umieszczane w zapytaniu, a następnie przychodzi odpowiedź.
Jeśli obie ścieżki nie zgadzają się co do kodowania, nic nie działa, to tak jakby porządkować dokumenty alfabetycznie, a potem szukać według koloru. Ludzie mają tendencję do skupiania się na ścieżce B, czyli na promptzie, modelu i temperaturze, podczas gdy większość problemów leży w ścieżce A. Indeksowanie odbywa się raz, zapytania za każdym razem, a większość błędów kryje się w przerwie pomiędzy nimi.
Etapy, od podstaw do produkcji
Podstawy
Pierwszym tematem jest to, skąd właściwie pochodzą halucynacje – nie chodzi o to, że model jest głupi. Do powiązanych koncepcji należą: co to jest okno kontekstowe, dlaczego całą bazę danych nie można po prostu wkleić do niego oraz co oznacza data końcowa wiedzy. Istnieje też pytanie, które ludzie rozumieją błędnie: RAG, dopasowywanie modelu i większe okno kontekstowe to trzy odrębne narzędzia do trzech różnych problemów, a mimo to ciągle zaleca się je do rozwiązywania zadań siebie nawzajem.
Ubezpieczyciel, którego sformułowanie umowy zmienia się co kwartał, pokazuje tę różnicę. Dokładna kalibracja oznaczałaby ponowne szkolenie co kwartał. RAG oznacza aktualizację folderu.
Przyjmowanie i dzielenie na fragmenty
Przyjmowanie dokumentów to już samo w sobie wyzwanie: pliki PDF, które w rzeczywistości są zeskanowanymi obrazami, tabele, nagłówki, stopki oraz 40-stronicowy dodatek, którego nikt nie potrzebuje. Następnie przychodzi kwestia dzielenia na fragmenty, czyli decyzja o tym, jak podzielić dokument. Brzmi to banalnie, ale tak nie jest. Jeśli fragment będzie zbyt mały, będzie zawierał tylko zdanie „Depozyt podlega zwrotowi” bez żadnych informacji o warunkach. Jeśli fragment będzie zbyt duży, model utonie w szumie. Główne metody to dzielenie o stałej wielkości, uwzględniające strukturę zdań oraz dzielenie rekurencyjne, plus technika nakładania się fragmentów, która zapobiega przecinaniu zdań.
Weźmy umowę najmu liczącą 60 stron, której klauzula karna zależy od definicji podanej 40 stron wcześniej. Granice fragmentów decydują o tym, czy ten związek pozostanie nienaruszony.
Embeddingi i wyszukiwanie wektorowe
Ten etap wydaje się magiczny, ale tak nie jest. Tekst jest przekształcany w listę liczb, ułożoną tak, aby fraza o anulowaniu zamówienia znajdowała się blisko frazy o zwrocie zakupu, a daleko od frazy o zamówieniu dodatkowych towarów. Do powiązanych koncepcji należą wymiary, podobieństwo kosinowe oraz fakt, że bliskość w przestrzeni wektorowej nie gwarantuje odpowiedzi.
Następnie przychodzi kwestia przechowywania: co tak naprawdę robi baza danych wektorowych, dlaczego wyszukiwanie siłowe zawodzi w dużych skali oraz co musi poświęcić przybliżone wyszukiwanie najbliższego sąsiada dla uzyskania szybszej szybkości działania.
Pętla wyszukiwania
Tutaj elementy są łączone ze sobą. Wybór wartości top-k, czyli liczby fragmentów do pobrania, jest częścią tego procesu, a większa liczba nie oznacza lepszych wyników. Filtrowanie metadanych pozwala na przeszukiwanie tylko dokumentów z 2024 roku lub wyłącznie obszaru Mumbai. Ważna jest również struktura promptu, ponieważ sposób uporządkowania uzyskanego kontekstu i kolejność jego prezentacji wpływają na odpowiedź.
Następnie następuje uzasadnienie i podawanie cytatów. Model powinien odwoływać się na coś takiego jak Sekcja 4.2, a nie po prostu wyrażać pewność co do swoich odpowiedzi. Równie istotne jest, aby wskazał, że odpowiedź nie znajduje się w dokumentach – to prawdopodobnie najmniej doceniana cecha każdego systemu RAG.
Ocena
Prawie wszyscy pomijają ten etap, co tłumaczy, dlaczego prawie wszyscy dostarczają uszkodzone rozwiązania typu RAG. Problem, którego nie można zmierzyć, nie da się naprawić. Jakość można ocenić na podstawie dwóch pytań: czy został pobraany odpowiedni materiał oraz czy model pozostał wobec niego wierny? Każdy z tych aspektów zawodzi sam w sobie i wymaga odrębnej korekty. Narzędzie to obejmuje zestaw idealnych pytań testowych pochodzących od rzeczywistych użytkowników, ocenę procesu pobierania danych pod kątem precyzji i dokładności, ocenę generowanych odpowiedzi pod kątem wierności i trafności wobec pytania, a także model językowy pełniący rolę sędziego, który wskazuje, gdzie ta metoda zawodzi.
Jeden system osiągnął 90% wyniku w procesie pobierania danych i 55% w kwestii wierności. Jego wyszukiwanie było poprawne, ale odpowiedzi nadal były błędne.
Ulepszenia, każde powiązane z konkretnym problemem
Lepsze pobieranie danych
Poszukiwanie hybrydowe łączy wyszukiwanie oparte na znaczeniu z tradycyjnym dopasowywaniem słów kluczowych, ponieważ metody embeddingów bardzo słabo radzą sobie z dokładnymi identyfikatorami, takimi jak numery modeli i identyfikatory faktur. Metoda ponownego rankowania tanio pozyskuje 50 kandydatów, a następnie pozwala wolniejszemu, lecz bardziej inteligentnemu modelowi wybrać 5 najlepszych. Transformacja zapytania przepisuje niejasne pytanie na takie, które można przeszukać, dzieli złożone pytanie na części lub wykorzystuje HyDE, który generuje fałszywą, idealną odpowiedź i przeprowadza wyszukiwanie z jej użyciem zamiast z pytania.
Zapytanie o porównanie dwóch projektów w Bangalore pod kątem daty posiadania i ceny to jedno pytanie wymagające trzech oddzielnych wyszukań.
Lepsze indeksowanie
Poprawne naprawianie pasa ruchu A wymaga zastosowania kilku technik. Zapytania typu rodzic-dziecko przeszukują małe, precyzyjne fragmenty, ale dostarczają modelowi również szerszy obszar wokół nich. Semantic chunking dzieli tekst w miejscach zmiany tematu, a nie na podstawie arbitralnej liczby znaków. Indeksy streszczające i hierarchiczne najpierw przeszukują streszczenia dokumentów, a następnie zagłębiają się w szczegóły. Graph RAG przechowuje relacje pomiędzy entytetami, a nie tylko tekst, dzięki czemu może odpowiadać na pytania takie jak: które dostawcy są jednocześnie klientami.
Dobrym przykładem jest zapytanie dotyczące zgodności z regulacjami – wymaga ono reguły, jej poprawki z 2023 roku oraz notatki o zwolnieniu z obowiązków, czyli trzech dokumentów dla jednej odpowiedzi.
Behawior agentowy
Po tym etapie RAG nie jest już sztywnym procesem i zaczyna podejmować decyzje. Mechanizm kierowania pytaniami przekierowuje je do odpowiedniego indeksu, bazy danych SQL lub w ogóle nie przeprowadza żadnego wyszukiwania. Wyszukiwanie wieloetapowe czyta dane, wykrywa braki i próbuje ponownie. Systemy Self-RAG i Corrective RAG pozwalają systemowi ocenić własny uzyskany kontekst i odrzucić go, jeśli jest nieistotny, a następnie uciec się do wyszukiwania w internecie lub szczerego przyznania, że nie ma odpowiedzi.
Weźmy przykład pytania o to, dlaczego dana roszczenie zostało odrzucone. Aby na nie odpowiedzieć, konieczne jest kolejne pobieranie polityki, pliku z roszczeniem oraz kodu odrzucenia.
Zdezorganizowane dokumenty
Prawdziwa wiedza biznesowa rzadko przybiera postać uporządkowanych akapitów. Pojawia się w postaci arkuszy kalkulacyjnych, skanów, planów pięter, zrzutów ekranu i diagramów. Do niezbędnych umiejętności należą analiza uwzględniająca układ elementów, wyodrębnianie tabel nawet z połączonymi komórkami, włączanie obrazów oraz wyszukiwanie informacji w dokumentach, gdzie odpowiedź znajduje się w wykresie. Klasycznym przykładem jest pytanie dotyczące cen, którego numer znajduje się wyłącznie na zeskanowanym karcie cenowej.
Kwestie produkcyjne
Wszystko przestaje działać po demonstracji. Budżety opóźnień pokazują, dokąd zmierzają te milisekundy. Ważna jest cena za zapytanie, a także cache, który naprawdę pomaga. Indeks musi pozostawać aktualny, gdy dokumenty zmieniają się co godzinę. Kontrola dostępu musi zagwarantować, że użytkownik A nie będzie mógł pobrać fragmentów dokumentów użytkownika B – to częsty i rzeczywisty problem. Zatrute dokumenty mogą wprowadzać szkodliwe polecenia. Monitorowanie i rejestracja wydarzeń ujawniają, kiedy jakość w tle się pogarsza. System, który działał doskonale przy 200 dokumentach, może zawieść przy 200 000.
Najpierw poznaj przyczyny awarii
Jeśli jedna rzecz musi być dobrze zrozumiana, to właśnie to: zaawansowany RAG nie jest bardziej rozwiniętą wersją podstawowego RAG. To zbiór poprawek, z których każda dotyczy konkretnej awarii o określonej nazwie. Gdy przyczyna awarii zostanie zrozumiana, technika dopasowywania staje się oczywistym krokiem.
Trzy zasady zapewniają uczciwość tego podejścia:
- Brak kultu określonych frameworków. Koncepcje są ważniejsze od narzędzi, a każdy, kto rozumie zasady dzielenia na części, może je zastosować wszędzie.
- Brak niewyjaśnionego kodu skopiowanego i wklejonego. Kod pojawia się dopiero wtedy, gdy jest jasne, dlaczego ma taki wygląd.
- Brak udawania, że zawsze działa. W niektórych przypadkach RAG okazuje się niewłaściwą odpowiedzią, a prostsze rozwiązania są lepsze.
Początkujący powinni omawiać tematy w kolejności, ponieważ każdy z nich opiera się na poprzednim. Ci, którzy mają już działający system, który ich rozczarowuje, mogą przejść bezpośrednio do etapu oceny.
Literatura pokrewna
- Praktyczne notatki: Przenoszenie RAG do produkcji: problemy end-to-end z rzeczywistych przypadków — Szczegółowy przewodnik po praktycznych notatkach dotyczących przenoszenia RAG do produkcji oraz problemach występujących na całym etapie, wraz z informacjami o umowach, kontrolach oraz gotowych fragmentach kodu przeznaczonych dla zespołów wdrażających ten model.
- Hybrydowe wyszukiwanie w Postgres dla asystenta zdrowotnego: schemat, dzielenie na fragmenty, RRF i ocena wyników — Budowa warstwy wyszukiwania w asystencie zdrowotnym w Postgres: dzielenie danych na fragmenty z uwzględnieniem struktury, hybrydowe wyszukiwanie za pomocą pgvector z wykorzystaniem RRF, kwantyfikacja binarna, progi oraz metody oceny wyników.