AI Agents · Lekcja

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.

Lekcja 2 z 414 kroki

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:

  1. Utwórz osadzenia fragmentów na poziomie zdań
  2. 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ą.

Bezpłatny start

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

  1. Co rozwiązuje RAG (odcięcie wiedzy, halucynacje)
  2. Strategie dzielenia na fragmenty (stałe, zdaniowe, semantyczne)
  3. Indeksowanie zbioru dokumentów
  4. Budowanie prostego RAG z FAISS lub Chroma
← Powrót do AI Agents