Strategia dzielenia dokumentów (Chunking Strategies)
Metodologia dekompozycji dużych dokumentów i baz kodu na samodzielne informacyjnie fragmenty (chunki) w celu generowania wektorowych osadzeń oraz precyzyjnego wyszukiwania w systemach RAG.
1. Przegląd koncepcji i problem systemowy
Modele embeddingów (np. text-embedding-3-large lub bge-m3) mają sztywno ograniczoną długość okna wejściowego (od 512 do 8192 tokenów). Nawet jeśli model technicznie jest w stanie przyjąć duży dokument PDF w całości, kompresuje on wszystkie informacje do pojedynczego wektora o stałym wymiarze (np. 1536 liczb).
Jeśli nie przeprowadzisz granularnego chunkingu:
- Uśrednianie semantyczne (Vector Dilution): Wektor dokumentu liczącego 50 stron staje się tak ogólny, że traci szczegóły dotyczące konkretnych funkcji czy konfiguracji.
- Brak możliwości precyzyjnego pobierania danych w RAG: System wyszukiwania wciągnie cały gigantyczny dokument do kontekstu generatywnej LLM, natychmiast wyczerpując budżet tokenów.
- „Zabójstwo” struktury przy naiwnym cięciu: Stały podział według liczby znaków (Character Splitting) rozrywa słowa na pół, oddziela nagłówek funkcji od jej implementacji i niszczy tabele.
Chunking to fundament inżynierii RAG: przekształca monolityczny surowy tekst w kolekcję informacyjnie autonomicznych, powiązanych ze sobą bloków znaczeniowych.
2. Taksonomia architektoniczna i model mentalny
W zależności od struktury danych wyróżnia się cztery poziomy architektoniczne chunkingu:
- 1. Chunking o stałej wielkości z nakładaniem (Fixed-Size Sliding Window): Najprostsze podejście: tekst jest cięty na bloki po $N$ tokenów z nakładką wynoszącą $M$ tokenów. Szybkie, ale często narusza logiczne granice akapitów.
- 2. Rekurencyjny chunking znakowy (Recursive Character Splitting):
Podejście hierarchiczne (standard LangChain/LlamaIndex). Algorytm próbuje ciąć tekst najpierw według podwójnego znaku nowej linii (
\n\n), jeśli fragment jest zbyt duży – według pojedynczego (\n), następnie według kropki (.), a tylko w ostateczności według spacji. - 3. Chunking semantyczny (Semantic / Embedding-Distance Chunking): Tekst jest dzielony na pojedyncze zdania. Dla każdego generowany jest wektor, a następnie obliczana podobieństwo kosinusowe między sąsiednimi zdaniami. Granica chunka jest ustawiana w punktach gwałtownej zmiany semantyki (zmiana tematu rozmowy).
- 4. Chunking składniowy AST/Markdown (Structural Chunking):
Uwzględnia drzewo składniowe dokumentu: dzieli Markdown ściśle według poziomów nagłówków (
#,##,###), zachowując ścieżkę nawigacyjną (breadcrumbs), a kod programistyczny – według węzłów klas i funkcji za pomocą Tree-sitter.
3. Pipeline techniczny i mechanika wewnętrzna
Pipeline profesjonalnego chunkingu składa się z 4 etapów:
- Document Ingestion & Pre-cleaning (Oczyszczanie):
Usuwanie niewidocznych znaków specjalnych, ujednolicanie znaków nowej linii (
\r\n->\n) oraz normalizacja kodowania Unicode (NFC). - Boundary Detection (Wykrywanie granic): Parser buduje drzewo składniowe (AST) lub znajduje bezpieczne punkty cięcia (separatory Markdown, puste linie między funkcjami).
- Window Formatting & Overlap Calculation (Cięcie i nakładanie): Tekst jest grupowany w bloki o rozmiarze 500–700 tokenów. Do początku każdego następnego chunka dodawany jest bufor nakładki (10–15%) z poprzedniego fragmentu.
- Metadata Enrichment & Context Injection (Wzbogacanie kontekstem):
Do każdego chunka dodawany jest prefiks z metadanymi:
[File: api/auth.ts | Class: AuthService | Method: validateToken]Gwarantuje to, że wektor fragmentu zostanie odnaleziony nawet przy zapytaniu, w którym nazwa metody nie występuje w jego ciele.
4. Praktyczne scenariusze inżynierskie w środowisku produkcyjnym
01. Indeksacja bazy kodowej repozytorium przez Tree-sitter
Każdy plik TypeScript jest parsowany do drzewa składniowego. Osobny chunk jest tworzony dla każdego eksportowanego interfejsu oraz każdej funkcji. Jeśli funkcja zajmuje 20 linii, staje się samodzielnym chunkiem wraz z komentarzem JSDoc i listą importowanych typów.
02. Przetwarzanie złożonych tabel i raportów finansowych
Zwykłe cięcie rozrywa wiersze tabeli, pozbawiając liczby sensu. Profesjonalny chunking konwertuje każdy wiersz tabeli na samodzielny tekst: „W 2024 roku przychód działu Cloud wyniósł $35B, co stanowi wzrost o 15% w porównaniu z rokiem 2023”, tworząc wektory o wysokiej precyzji wyszukiwania.
03. Parsowanie dokumentacji API (OpenAPI / Swagger)
Każdy endpoint (np. POST /v1/payments) jest wydzielany do osobnego chunka, zawierającego ścieżkę, metodę HTTP, opis parametrów, przykładową odpowiedź oraz kody błędów, co pozwala agentowi bezbłędnie generować kod klienta.
5. Pułapki, typowe błędy i bezpieczeństwo
- Problem „wiszących zaimków” (Dangling Pronouns): Jeśli zdanie „Ta funkcja wymaga uprawnień administratora” trafiło do chunka 2, a sama nazwa funkcji pozostała w chunku 1, model nie będzie w stanie odpowiedzieć na zapytanie. Zawsze używaj metadanych z wzbogaceniem o kontekst nadrzędny (Parent Document Retrieval).
- Rozrost bazy wektorowej przez nadmierne Overlap: Nakładka powyżej 25% prowadzi do duplikacji informacji w bazie danych, zwiększa koszt indeksacji i obciąża wyniki wyszukiwania identycznymi fragmentami.
- Utrata kontekstu strukturalnego (Loss of Lineage): Chunk bez wskazania nazwy pliku i numeru linii zamienia się w bezimienny szum, utrudniając generowanie precyzyjnych przypisów w odpowiedziach agenta.
FAQ: Strategia dzielenia dokumentów (Chunking Strategies)
Powiązane pojęcia
RAG (Retrieval-Augmented Generation)
Wzorzec architektoniczny AI dla przedsiębiorstw, który dynamicznie wzbogaca okno kontekstowe modelu o zweryfikowane, istotne wiedze z zewnętrznych repozytoriów (baz wektorowych, grafów, indeksów pełnotekstowych) przed wygenerowaniem końcowej odpowiedzi.
Wektorowe osadzenia (Dense Embeddings)
Matematyczna projekcja tekstu, kodu lub danych multimodalnych do gęstego wielowymiarowego wektora liczbowego, w którym kąt i geometria między współrzędnymi odzwierciedlają ich semantyczne podobieństwo.
Wyszukiwanie hybrydowe (Dense + Sparse Search)
Architektura retrievalu w nowoczesnych systemach RAG, łącząca semantyczne wyszukiwanie wektorowe (Dense Embeddings) z klasycznym indeksowaniem pełnotekstowym opartym na słowach kluczowych (Sparse / BM25) za pomocą algorytmów fuzji rankingów (RRF).
Markdown AST dla agentów (Abstract Syntax Tree)
Hierarchiczna, drzewiasta reprezentacja składni Markdown (standard mdast / Unified.js), która umożliwia systemom programistycznym i agentom AI deterministyczne analizowanie, transformowanie oraz bezpieczne edytowanie treści technicznych bez wykorzystania kruchych wyrażeń regularnych.