Optymalizacja RAG dla dokumentów prawnych: lekcje z Agentic RAG Legal Challenge
Zespół deweloperów przetestował system RAG na zbiorze dokumentów prawnych z konkursu Agentic RAG Legal Challenge. Głównym celem było poprawienie dokładności cytowania i wiarygodności odpowiedzi (grounding). Dokumenty pochodzące z DIFC (orzecznictwo sądowe, ustawy, akt regulacyjne) zostały przetworzone z PDF do Markdowna za pomocą wizualnego renderowania stron jako obrazów, a następnie przetworzone przez model Qwen 3.5-9b na Mac Studio M3 Ultra.
Użycie semantycznego dzielenia tekstu (chunking) opartego na embeddowaniach FRIDA (gęstych) i GTE (rzadkich) pozwoliło podzielić 30 dokumentów na około 2000 fragmentów. Każdy fragment zawiera:
- text: kompletną myśl lub fakt
- path: źródło dokumentu
- context: opis kontekstu fragmentu w dokumencie
Kontekst generowany jest przez LLM (Qwen), który otrzymuje fragment i cały dokument. Dzięki temu kompensowana jest utrata spójności przy dzieleniu. Embeddingi przechowywane są w Qdrant. Indeksacja 30 dokumentów trwała około 2 godziny — głównym ograniczeniem była faza prefill podczas generowania kontekstów (15–20 sekund na fragment lokalnie).
Pipeline generacji odpowiedzi
Dla każdego pytania:
- Intent: LLM generuje możliwe wersje pytań do wyszukiwania.
- Select: Wektorowanie za pomocą FRIDA/GTE, wyszukiwanie w Qdrant z wykorzystaniem RRF, wybór top-N fragmentów. LLM dokonuje rerankingu i wybiera najbardziej trafne.
- Answer: Wyfiltrowane fragmenty są przesyłane do LLM z poleceniem udzielenia odpowiedzi oraz wskazaniem numerów użytych fragmentów dla celów groundingu.
Metryki konkursu: Total = (0.7 × S_det + 0.3 × S_asst) × G × T × F. Kluczowy czynnik G (grounding) to sprawdzanie odnośników do stron. S_det to precyzja odpowiedzi deterministycznych (boolean, data, nazwa, liczba). S_asst to jakość odpowiedzi tekstowych oceniana przez LLM-judges.
Wyniki eksperymentów i benchmarki
15 prób w fazie przygotowawczej (30 dokumentów, 100 pytań) pokazały ewolucję od podstawowego RAG do wersji zoptymalizowanej. Kluczowe wersje:
| Wersja | S_det | S_asst | G | Total |
|--------|--------|---------|---|--------|
| v3 (GPT-5.4) | 0.843 | 0.667 | 0.451 | 0.362 |
| v5 (CAG Qwen 1M) | 0.971 | 0.553 | 0.563 | 0.403 |
| v6 (BM25) | 0.943 | 0.540 | 0.390 | 0.269 |
| v7 (BM25 + semantic RRF) | 0.871 | 0.567 | 0.717 | 0.468 |
| v11 (MORAG v3) | 1.000 | 0.680 | 0.757 | 0.664 |
| v15 (finał) | 0.986 | 0.733 | 0.901 | 0.780 |
Wzrost G z 0,45 do 0,90 był kluczowy dla sukcesu. BM25 osiągnął najgorszy wynik (Total 0,269). CAG (pełny kontekst 350K tokenów w Qwen 3.5-Flash) świetnie radził się z S_det (0,971), ale miał problemy z groundingiem.
Wbudowany RAG od OpenAI na PDF dał 0,362 — akceptowalna precyzja, ale słabe cytowanie.
Porównanie podejść: RAG vs alternatywy
- BM25: szybkie wyszukiwanie po słowach kluczowych (TF-IDF), ale ignoruje sens — niski G (0,390).
- CAG: pełen kontekst w promptcie (1M tokenów), wysoka S_det, ale grounding cierpi z powodu braku jawnych odnośników.
- Hybrid RAG (MORAG): FRIDA/GTE + RRF + reranking przez LLM + rozumowanie według typu pytania. Osiągnięto 1,000 S_det i 0,901 G.
Element agentywny: po kroku Select model autonomicznie decyduje o kolejnych krokach (włącz/wyłącz rozumowanie, pinowanie map).
MORAG (github.com/catonmoon/morag) przewyższył wbudowany RAG od OpenAI/Grok we wszystkich metrykach.
Mac Studio M3 Ultra poradził sobie z indeksacją (embeddings native), ale nie nadawał się do zadań z dużym obciążeniem prefill — przełączono na OpenRouter.
Co jest ważne
- Grounding (G) — dominujący czynnik: nawet idealna odpowiedź jest bezwartościowa bez dokładnych odnośników do stron.
- Hybrydowe pobieranie (gęste + rzadkie + RRF) + reranking przez LLM drastycznie zwiększa trafność fragmentów.
- Semantyczne dzielenie z generacją kontekstu zachowuje spójność bez kosztów dużych LLM.
- Typ pytania określa tryb działania: rozumowanie dla tekstów wolnych, bezpośredni dla danych deterministycznych.
— Editorial Team
Brak komentarzy.