Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne)
Poznaj kompromisy między dzieleniem na fragmenty o stałym rozmiarze oraz fragmenty uwzględniające granice zdań lub znaczenie, aby poprawić jakość wyszukiwania.
Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne) to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Dlaczego dzielić na fragmenty?
Nie można utworzyć jednego wektora dla całego 200-stronicowego pliku PDF — wektor byłby zbyt abstrakcyjny, aby dopasować go do konkretnych zapytań. Dokument należy podzielić na mniejsze fragmenty (każdy o długości około 200–800 tokenów), utworzyć osadzenie dla każdego z nich i wyszukiwać na poziomie fragmentów.
Podział na fragmenty o stałym rozmiarze
Najprostsze podejście — podziel tekst co N znaków lub tokenów:
def fixed_chunks(text, chunk_size=1000, overlap=200):
chunks = []
i = 0
while i < len(text):
chunks.append(text[i:i + chunk_size])
i += chunk_size - overlap
return chunks
sample_text = "A" * 2500
chunks = fixed_chunks(sample_text, chunk_size=1000, overlap=200)
print(f"Split {len(sample_text)} characters into {len(chunks)} chunks")
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {len(c)} chars")
Dlaczego stosować nakładanie?
Nakładanie (zwykle 10–20% rozmiaru fragmentu) gwarantuje, że zdanie znajdujące się na granicy pojawi się w całości w co najmniej jednym fragmencie. Bez nakładania ważny fakt podzielony między fragmenty może być niemożliwy do znalezienia.
Podział na podstawie zdań
Podziel tekst na granicach zdań — nigdy w środku zdania:
import re
def sentence_chunks(text, max_chars=1000):
sentences = re.split(r'(?<=[.!?])\s+', text)
chunks = []
current = ''
for s in sentences:
if len(current) + len(s) > max_chars and current:
chunks.append(current.strip())
current = s
else:
current += ' ' + s
if current:
chunks.append(current.strip())
return chunks
sample_text = "This is sentence one. This is sentence two! Is this sentence three? Yes it is."
chunks = sentence_chunks(sample_text, max_chars=40)
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {c!r}")
Rekurencyjny podział (LangChain)
RecursiveCharacterTextSplitter z LangChain najpierw próbuje dzielić tekst na granicach akapitów, następnie zdań, a na końcu słów — zachowując strukturę w możliwie największym stopniu.
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100,
separators=['\n\n', '\n', '. ', ' ']
)
chunks = splitter.split_text(document)Podział semantyczny
Podziel tekst w miejscach zmiany tematu. Implementacje tworzą osadzenie dla każdego zdania i dzielą tekst tam, gdzie osadzenia kolejnych zdań znacznie się od siebie różnią.
Obliczenia trwają dłużej, ale powstające fragmenty są spójne tematycznie.
Podział uwzględniający Markdown
W dokumentach Markdown dziel tekst na granicach nagłówków, aby zachować całe sekcje. Każdy fragment dziedziczy nagłówki nadrzędne jako kontekst.
Podział uwzględniający kod
W przypadku kodu źródłowego dziel tekst na granicach funkcji i klas, a nie według liczby znaków. Narzędzia takie jak tree-sitter umożliwiają podział uwzględniający AST.
Wybór rozmiaru fragmentu
Kompromisy:
- Małe fragmenty (około 200 tokenów) — precyzyjne dopasowania, ale więcej fragmentów do zarządzania
- Duże fragmenty (około 1000 tokenów) — więcej kontekstu dla każdego dopasowania, ale mniejsza precyzja
Domyślna wartość: 500–800 tokenów z nakładaniem 10–20%.
Zachowywanie metadanych
Dołącz metadane do każdego fragmentu:
- Adres URL źródła / ścieżka pliku
- Numer strony
- Tytuł dokumentu
- Sekcja / nagłówek
- Znaczniki czasu utworzenia / aktualizacji
Przydają się do filtrowania, cytowań i ponownego sortowania.
Fragmenty z kontekstem
Nowsza technika: poprzedź każdy fragment jednolinijkowym kontekstem wygenerowanym przez LLM-a (np. „Ten fragment pochodzi z raportu finansowego firmy za II kwartał 2024 r. i dotyczy przychodów”). Poprawia wyszukiwanie o 30–50%.
Fragmenty nadrzędne i podrzędne
Indeksuj małe fragmenty, aby uzyskać precyzyjne dopasowania, ale pobieraj ich WIĘKSZY fragment nadrzędny, aby zapewnić kontekst:
- Utwórz osadzenia fragmentów na poziomie zdań
- Po dopasowaniu zwróć nadrzędny fragment o długości 800 tokenów
Dlaczego stosować nakładanie?
Dlaczego fragmenty zwykle nakładają się na siebie w 10–20%?
Podsumowanie
Zacznij od rekurencyjnego podziału znakowego na fragmenty o długości około 800 tokenów z nakładaniem 10%. W miarę wzrostu potrzeb dodawaj świadomość semantyczną i strukturalną.
Ucz się AI Agents dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 60
- Lekcje
- 239
Często zadawane pytania
Czy lekcja „Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne)” jest bezpłatna?
Tak — pełny tekst „Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne)”?
Poznaj kompromisy między dzieleniem na fragmenty o stałym rozmiarze oraz fragmenty uwzględniające granice zdań lub znaczenie, aby poprawić jakość wyszukiwania. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Co rozwiązuje RAG (odcięcie wiedzy, halucynacje)
- Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne)
- Indeksowanie zbioru dokumentów
- Budowanie prostego RAG z FAISS lub Chroma