BlogRAG
Jak dzielić umowy, polityki i długie dokumenty, nie gubiąc warunków
Dziel dokumenty według struktury, którą już mają, czyli numerowanych klauzul, sekcji z nagłówkami i wierszy tabel, a do każdego chunka dołączaj ścieżkę nagłówków i potrzebne definicje. Potem porównaj dwie lub trzy strategie na pytaniach, których odpowiedź zależy od wyjątku albo warunku. Żaden rozmiar chunka nie pasuje do wszystkich dokumentów, więc niech zdecyduje twój własny zestaw testowy.
Jak odpowiedź odrywa się od swoich warunków
Dokumenty biznesowe umieszczają regułę w jednym miejscu, a jej ograniczenia w innym. Klauzula płatności mówi, że faktury są płatne w 30 dni, a następna, że nie dotyczy to kwot spornych. Polityka urlopowa używa pojęcia uprawniony pracownik, zdefiniowanego dwie strony wcześniej. Tabela cen zawiera liczby, których waluta i data obowiązywania stoją w wierszu nagłówka na poprzedniej stronie.
Jeśli pociąć taki dokument na równe kawałki, wyszukiwanie może zwrócić regułę bez wyjątku. Model odpowiada wtedy pewnie i myli się dokładnie w tym przypadku, o który pytał użytkownik. Nakładanie się chunków pomaga, gdy zdanie zostało przecięte na granicy. Definicji sprzed dwóch stron nie przywróci.
Dziel według struktury, którą dokument już ma
Wytyczne Microsoftu dotyczące chunkingu wiążą metodę ze stopniem ustrukturyzowania dokumentu. Teksty prawne i specyfikacje mają strukturę domyślną, czyli numerowane akapity bez znaczników, i dla nich zalecane są własny kod albo własne modele; chunki stałej wielkości z nakładaniem pasują do tekstu nieustrukturyzowanego, takiego jak maile i notatki. Wybór metody nazywają też decyzją półtrwałą, bo późniejsza zmiana wpływa na wszystko, co jest dalej w łańcuchu.
- Umowy: jeden chunk na numerowaną klauzulę, z podpunktami razem
- Polityki: jeden chunk na sekcję z nagłówkiem, dalszy podział tylko na podnagłówkach
- Procedury: każda procedura w całości, jeśli się mieści, bo krok wyrwany z kolejności jest niebezpieczny
- Tabele: wiersze albo grupy wierszy z powtórzonym nagłówkiem w każdym chunku
Przenieś kontekst do każdego chunka
Klauzula w rodzaju „termin z punktu 4.2 nie ma zastosowania” sama w sobie nic nie znaczy. Dodaj na początku to, czego potrzebowałby czytelnik: tytuł dokumentu, ścieżkę nagłówków, wersję albo datę obowiązywania i definicje pojęć użytych w chunku. Anthropic przetestował w 2024 roku pokrewny pomysł: model generował krótki kontekst dla każdego chunka, dopisywany przed embeddingiem i indeksowaniem słów kluczowych. W tych eksperymentach odsetek błędów w pierwszej dwudziestce spadł o 35 procent z kontekstowymi embeddingami i o 49 procent po dodaniu kontekstowego wyszukiwania po słowach kluczowych. Te liczby opisują zbiory danych Anthropic, a nie twoje.
Odwołania krzyżowe wymagają drugiego mechanizmu. Gdy pobrana klauzula odsyła do innej, aplikacja może dociągnąć tę drugą albo wyszukiwać małe chunki i przekazywać modelowi całą sekcję nadrzędną.
Wybór strategii przez eksperyment
Zbierz pytania, których poprawna odpowiedź zależy od warunku, wyjątku albo definicji, i oznacz zarówno fragment z odpowiedzią, jak i fragment z warunkiem. Zdefiniuj dwie lub trzy strategie i uruchom każdą na tych samych pytaniach z tym samym budżetem tokenów na pobrany tekst, dopasowując liczbę chunków do ich rozmiaru. LlamaIndex zaznacza, że mniejsze chunki mogą wymagać większego top-k, żeby pobrać dość materiału. Jeśli wolisz ustalić stałą liczbę chunków, podawaj, ile kontekstu i jaki koszt każda strategia przekazuje wtedy do modelu, bo większe chunki wnoszą do promptu więcej tekstu.
Chunking experiment: supplier contracts (hypothetical numbers)
40 labelled questions; every run passes about 4,000 tokens of
retrieved text to the prompt, so k is adjusted to the chunk size
Strategy k Answer passage Answer + its
in prompt condition in prompt
A fixed size, small chunks 12 33 / 40 19 / 40
B one chunk per numbered clause 8 34 / 40 27 / 40
C clause + heading path + defined 7 36 / 40 33 / 40
terms prepended to each chunk
Decision: C for contracts. Re-run when the template or embedding model changes.Liczby w przykładzie są zmyślone. Porównaj dwie ostatnie kolumny: wszystkie trzy strategie zwykle wprowadzają regułę do promptu, a różnica wychodzi dopiero wtedy, gdy wymagany jest także warunek. Zestaw testowy bez pytań zależnych od warunków oceniłby je niemal tak samo.
Koszty i miejsca, w których chunking według struktury zawodzi
Każdy typ dokumentu z własnym parserem to kod do utrzymania, a Microsoft wymienia liczbę odrębnych implementacji chunkingu jako czynnik kosztowy. Zeskanowane dokumenty z niepewnymi nagłówkami, klauzule dłuższe, niż przyjmuje model embeddingów, i wzory zmieniające numerację między wersjami osłabiają to podejście. Generowanie kontekstu dla każdego chunka modelem dodaje koszt przy ingestii. A ponieważ chunki i embeddingi zależą od siebie, zmiana strategii albo modelu embeddingów oznacza ponowne indeksowanie.
Rozsądna ścieżka: zacznij od domyślnego splittera swojego frameworka jako udokumentowanego punktu odniesienia, dodaj chunking według struktury dla dwóch lub trzech typów dokumentów, których dotyczą najważniejsze pytania, i zachowaj eksperyment, żeby dało się go powtórzyć po zmianie wzorów.
Pytania
Od jakiego rozmiaru chunka zacząć?
Przyjmij domyślną wartość swojego frameworka jako punkt odniesienia i zapisz ją. LlamaIndex na przykład dokumentuje domyślny rozmiar chunka 1024 z nakładaniem 20. Traktuj to jako punkt startowy do pobicia na własnych pytaniach, a nie jako zalecenie dla umów.
Czy model z długim kontekstem sprawia, że chunking jest zbędny?
Pozwala przekazywać większe chunki albo całe sekcje, co zmniejsza ryzyko odcięcia warunków. Przy dużym zbiorze nadal potrzebujesz wyszukiwania, żeby wybrać, co przekazać, a każdy dodatkowy token kosztuje czas i pieniądze przy każdym żądaniu. Sprawdź ten kompromis na własnych dokumentach.
Powiązane usługi
Tworzenie systemów RAG
Asystenci odpowiadający na podstawie twoich wewnętrznych dokumentów, z uprawnieniami, źródłami i testami na twoich pytaniach.
Inżynieria i architektura AI
Asystenci, interfejsy głosowe i agenci w produktach, które sprzedajesz, razem z serwowaniem modeli i wyszukiwaniem pod spodem.
Więcej z bloga
Wyszukiwanie czy generowanie?
Procedura diagnostyczna, która pokazuje, czy błędna odpowiedź RAG zaczęła się w ingestii, wyszukiwaniu, rerankingu czy w modelu, z oznaczonymi dowodami i śladem dla każdego pytania.
Tabele i arkusze w RAG
Kiedy asystent powinien pobierać wiersze tabel jako tekst, a kiedy uruchomić zapytanie, z regułami kierowania pytań, formatem wierszy do wyszukiwania i zabezpieczeniami dla generowanego SQL.
Przygotowanie źródeł do RAG
Jak zdecydować, z których dokumentów ma korzystać asystent oparty na wyszukiwaniu, kto odpowiada za każde źródło i jak znaleźć brakujące odpowiedzi przed indeksowaniem.
Porozmawiaj z inżynierem
Przyjdź z jednym zadaniem, które chcesz usprawnić. Rozmowa trwa 30 minut i nie wymaga dostępu do twoich systemów ani danych.
Rezerwacja odbywa się w Kalendarzu Google.
Wolisz najpierw napisać? Zostaw adres e-mail i kilka zdań, a odpowiemy, proponując terminy.
Sprawdź wersję roboczą w swoim programie pocztowym
Wyślij ją stamtąd, a inżynier odpowie ci osobiście, proponując terminy 30-minutowej rozmowy. Jeśli wersja robocza się nie otworzyła, napisz do nas na adres miki@cloudsail.com.