Ugrás a tartalomra

Utoljára frissítve:

RAG chunking stratégiák 2026 — melyiket válaszd és miért?

A RAG rendszer teljesítményét nem az LLM megválasztása határozza meg elsősorban — hanem az, hogyan bontod fel a dokumentumokat az indexelés előtt. A helyes chunking stratégia 15–25%-os retrieval-pontosság-javulást eredményez; a rossz stratégia ellenben még a legjobb modellel sem mentható meg. Ez az útmutató végigveszi a négy fő megközelítést, konkrét paraméterekkel, kódrészletekkel és teljesítmény-benchmarkokkal.

TL;DR

Rövid, egységes dokumentumok → fix méretű 256 token. Hosszú narratív szövegek → szemantikus chunking. Hierarchikus dokumentumok (kézikönyv, jogi szöveg) → parent-child chunking. Vegyes dokumentumállomány → hibrid. A döntést mindig RAGAS Context Precision metrikával validáld, ne csak intuícióból hozd meg.

4
Fő chunking stratégia — fix méretű, szemantikus, parent-child, hibrid/adaptív
256–512
Optimális leaf chunk token-méret a legtöbb vállalati RAG esetben
15–25%
RAGAS Context Precision javulás szemantikus vs. fix méretű chunking összehasonlításban

Miért kritikus a chunking a RAG minőségéhez?

A RAG pipeline három fő komponensből áll: dokumentum-indexelés, szemantikus visszakeresés és válasz-generálás. A chunking az indexelési fázis kulcslépése — és ez az egyetlen pont, ahol a legtöbb rendszer csendben elcsúszik. A rossz chunking nem dob hibát, nem jelez figyelmeztetést: egyszerűen silányabb kontextust ad a keresőnek, a kereső rosszabb dokumentumrészletet ad az LLM-nek, és az LLM egy meggyőző, de pontatlan választ generál.

A probléma lényege az egybefüggő kontextus szétszakítása. Ha egy 600 tokenes bekezdést a chunker kettévág a 512. tokennél, az egyik chunk elveszíti a konklúziót, a másik elveszíti az előzményt. A vektorkeresés mindkét chunk-ot alacsonyabb pontossággal tudja csak visszahozni, mert egyik sem teljes szemantikai egység.

Kulcsfelismerés

A RAG rendszer teljesítménye nem az LLM minőségén múlik elsősorban — az LLM-ek 2026-ban már mind elég jók ahhoz, hogy jó kontextusból jó választ adjanak. A szűk keresztmetszet a retrieval pontossága, és a retrieval pontossága a chunking minőségén múlik. Rossz chunking → félbe vágott kontextus → irreleváns keresési eredmény → hallucináció vagy kitérő válasz.

A saját Corpus V2 rendszeremben (1,48 millió vektorizált szövegtöredék, Qdrant) pontosan ezt tanultam meg: a rendszer első verziójában fix méretű, 512 tokenes chunkolást alkalmaztam. A RAGAS Context Precision 0,61 volt. Parent-child chunking bevezetése után — azonos dokumentumállomány, azonos embedding modell — 0,84-re emelkedett. Az LLM ugyanaz maradt. A különbséget kizárólag a chunking stratégia tette.

A 4 fő chunking stratégia összehasonlítása

Mielőtt belemennénk a részletekbe, a négy stratégia gyors összehasonlítása egy helyen — döntési alapnak:

Stratégia Hogyan vág Előnyök Hátrányok Mikor használd
Fix méretű Token-számon vág (pl. 512 token), opcionális overlap-pal Egyszerű, gyors, kiszámítható, minimális infrastruktúra-igény Mondathatáron és bekezdéshatáron vághat, kontextus-integritás sérülhet Rövid, egységes szerkezetű tartalmak (FAQ, termékleírás, bullet-point listák)
Szemantikus NLP-modell azonosítja a természetes tartalmi határokat (témaváltás, bekezdésvég) Kontextus-integritás megőrzése, jobb RAGAS Context Precision, természetes egységek Lassabb feldolgozás, embedding modell szükséges az indexelési fázisban is Narratív, hosszú szövegek: kézikönyvek, kutatási riportok, esettanulmányok
Parent-child Hierarchiás: kis leaf chunk-ok (256 token) + hozzájuk rendelt nagy parent chunk-ok (1024–2048 token) Pontos visszakeresés (leaf) + gazdag kontextus (parent) egyszerre — a legjobb kompromisszum Összetettebb pipeline, kettős indexelés szükséges, nagyobb vektorbázis-méret Hierarchikus dokumentumok: kézikönyv fejezetek, jogszabályok, specifikációk, policy dokumentumok
Hibrid / adaptív Dokumentum-típustól függ: kód → fix kis méret, narratív → szemantikus, hierarchikus → parent-child Rugalmas, minden dokumentumtípushoz optimalizált, a legmagasabb RAGAS-pontszám vegyes állományon Konfigurációs overhead, dokumentumtípus-detekció szükséges, karbantartás komplexebb Vegyes dokumentumtípusú vállalati tudásbázis, ahol az egységes stratégia kompromisszumot jelent

Fix méretű chunking — paraméterek és implementáció

A fix méretű chunking a legegyszerűbb és leggyakrabban alkalmazott stratégia. A dokumentumot meghatározott token- vagy karakterszámonként darabolja — opcionálisan átfedéssel (overlap), hogy az egységek határán ne vágjon el összefüggő szövegegységeket.

A két kulcsparaméter: chunk_size (hány token kerüljön egy chunk-ba) és chunk_overlap (hány tokennyi átfedés legyen a szomszédos chunk-ok között). Az overlap célja, hogy egy mondat közepén ne szűnjön meg a kontextus: a következő chunk visszanéz az előző végébe.

Ajánlott chunk_size értékek tartalom-típusonként

Tartalom típusa Ajánlott chunk_size Ajánlott overlap Indoklás
Kód, SQL, JSON 128–256 token 20–32 token A kódblokkok önmagukban kompakt logikai egységek; nagyobb méret irreleváns kontextust hoz be
FAQ, bullet-pont listák, termékleírás 256 token 32–51 token Rövid, önálló egységek; az overlap megakadályozza a lista-elem szétszakadását
Általános vállalati dokumentum 512 token 51–102 token (10–20%) Egyensúly a pontosság és a kontextus-gazdaságosság között
Narratív szöveg, kutatási riport 512–1024 token 100–200 token A hosszabb bekezdések és érvek megőrzéséhez nagyobb egység szükséges
Táblázatok, strukturált adatok 256 token 0–32 token A táblázat sorai önálló egységek; az overlap itt zavart okozhat a sor-összefüggésekben

LangChain RecursiveCharacterTextSplitter — példa

Python — LangChain fix méretű chunking (RecursiveCharacterTextSplitter)
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import PyPDFLoader

# Dokumentum betöltése
loader = PyPDFLoader("vallalati_kezikonyv.pdf")
documents = loader.load()

# Chunker inicializálása
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,         # token-méret (kb. karakterben: 512 * 4 = ~2048 karakter)
    chunk_overlap=51,       # ~10% overlap
    length_function=len,
    separators=[            # hierarchikus elválasztók — előbb bekezdés, aztán mondat, aztán szó
        "\n\n",           # bekezdéshatár (legjobb vágási pont)
        "\n",              # sorvég
        " ",                # szóhatár
        ""                  # karakter-szintű fallback
    ]
)

# Chunkolás
chunks = text_splitter.split_documents(documents)

print(f"Dokumentumok száma: {len(documents)}")
print(f"Chunk-ok száma:     {len(chunks)}")
print(f"Átlagos chunk méret: {sum(len(c.page_content) for c in chunks) / len(chunks):.0f} karakter")

# Qdrant-ba töltés (feltéve: embedder már inicializálva)
from langchain.vectorstores import Qdrant
vectorstore = Qdrant.from_documents(
    chunks,
    embedding=embedder,
    url="http://localhost:6333",
    collection_name="corpus_fixed"
)
Gyakorlati tipp

A RecursiveCharacterTextSplitter a separators listán balról jobbra halad: először bekezdéshatáron próbál vágni, majd sorvégen, majd szóhatáron — és csak utoljára folyamodik karakterszintű vágáshoz. Ez sokkal jobb eredményt ad, mint az egyszerű CharacterTextSplitter, amely mindig a megadott karakternél vág, figyelmen kívül hagyva a szöveges struktúrát.

Szemantikus chunking — hogyan működik?

A szemantikus chunking nem token-számon, hanem tartalmi határokon vágja a szöveget. Az NLP-modell mondatonként vektorizálja a szöveget, majd cosine similarity-vel megméri, mennyire hasonlóak az egymást követő mondatok. Ahol az összehasonlítás eredménye egy meghatározott küszöbérték alá esik, ott a chunker éles témaboundary-t jelez — és ott vágja ketté a szöveget.

A folyamat lépései:

  1. Mondatokra bontás: A szöveget mondatonként szegmentálják (NLTK sent_tokenize vagy spaCy).
  2. Mondatvektorizálás: Minden mondathoz embedding-vektor készül az embedder modellel.
  3. Cosine similarity számítás: Minden egymást követő mondatpár hasonlóságát mérik.
  4. Küszöb meghatározása: Ahol a similarity-érték egy threshold (pl. 0.75) alá esik, ott témaváltást jelez a rendszer.
  5. Vágás: A témaváltás-pontoknál vágja a szöveget — természetes tartalmi határokon.
Eredmény vs. fix méretű

Szemantikus chunkingnál a chunk-ok mérete változó — egy rövid, önálló gondolat 80 token is lehet, egy részletes érv 900 token. Ez természetesebb egységeket eredményez, de megnehezíti a vektorbázis méretének előre becslését. Ellenben: a RAGAS Context Precision általában 15–25%-kal magasabb szemantikus chunkingnál fix méretűhöz képest azonos dokumentumállományon.

LangChain SemanticChunker — példa

Python — LangChain szemantikus chunking (SemanticChunker)
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai import OpenAIEmbeddings
# vagy helyi modellhez:
# from langchain_community.embeddings import HuggingFaceEmbeddings

# Embedder inicializálása (szemantikus chunkernek is kell)
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
# helyi alternatíva:
# embeddings = HuggingFaceEmbeddings(model_name="Qwen/Qwen3-Embedding-8B")

# SemanticChunker inicializálása
# breakpoint_threshold_type lehetséges értékei:
#   "percentile"        — az összes similarity-pont X. percentilise alatt vág
#   "standard_deviation" — az átlag mínusz N szórás alatt vág
#   "interquartile"     — IQR-alapú outlier detekció
text_splitter = SemanticChunker(
    embeddings=embeddings,
    breakpoint_threshold_type="percentile",
    breakpoint_threshold_amount=85  # a 85. percentilis alatti hasonlóságnál vág
)

# Szöveg betöltése és chunkolása
with open("kutatasi_riport.txt", "r", encoding="utf-8") as f:
    raw_text = f.read()

chunks = text_splitter.create_documents([raw_text])

print(f"Szemantikus chunk-ok száma: {len(chunks)}")
print(f"Min chunk méret: {min(len(c.page_content) for c in chunks)} karakter")
print(f"Max chunk méret: {max(len(c.page_content) for c in chunks)} karakter")
print(f"Átlag chunk méret: {sum(len(c.page_content) for c in chunks) / len(chunks):.0f} karakter")

A breakpoint_threshold_amount hangolása a legfontosabb lépés: ha túl alacsony, sok apró chunk keletkezik (szétszabdalt kontextus); ha túl magas, kevés nagy chunk (túl tág visszakeresés). Az optimális érték dokumentumtípusonként eltér — ajánlott 30–50 dokumentumon RAGAS Context Precision mérésével kalibrálni.

Parent-child chunking — a hibrid megközelítés

A parent-child chunking a legtöbb vállalati RAG esetben a legjobban teljesítő stratégia, mert egyszerre oldja meg a visszakeresés pontosságát és a kontextus-gazdagságát — amelyek egymással versenyeznek a többi stratégiában.

Az architektúra logikája: small leaf chunk (256 token) → pontos szemantikus visszakeresés; nagy parent chunk (1024–2048 token) → gazdag kontextus az LLM-nek. A retrieval a leaf chunk vektorán keres, de a generáláshoz a teljes parent chunk szövegét adja a modellnek.

Architektúra — hogyan épül fel

Parent-child chunking — architektúra és retrieval flow
PARENT CHUNK (1024–2048 token)
"3.2 Szabadságolási folyamat — teljes HR-policy szekció (900 szó)"
→ NEM kerül a vektoradatbázisba külön vektorként (csak text store-ban él)
↓ felosztás leaf chunk-okra
Leaf 1 (256 tok)
"A szabadság igénylése..."
Leaf 2 (256 tok)
"Jóváhagyási lépések..."
Leaf 3 (256 tok)
"Rendkívüli szabadság..."
Leaf 4 (210 tok)
"GYES és GYED..."
↓ leaf chunk-ok vektorizálva → Qdrant-ba töltve
vec([0.12, -0.34, ...])
vec([0.67, 0.09, ...])
vec([-0.23, 0.51, ...])
vec([0.44, -0.18, ...])
↓ lekérdezés: "Hogyan kérhetek szabadságot?"
✓ Leaf 1 → legközelebbi vektor (0.91 similarity)
↓ leaf match → parent_id alapján parent chunk előhívása
LLM-nek átadva: PARENT CHUNK teljes szövege (900 szó)
→ Az LLM a teljes folyamat kontextusában válaszol, nem csak a leaf töredékéből

A parent chunk nem kerül közvetlenül a vektoradatbázisba — csak a leaf chunk-ok vektorizálódnak. A parent szövegét egy dokumentumtárban (Document Store) tartja a pipeline, és a leaf-match metadata alapján hívja elő. LangChain-ben ez az InMemoryStore vagy RedisDocumentStore; LlamaIndex-ben a SimpleDocumentStore.

LlamaIndex HierarchicalNodeParser — példa

Python — LlamaIndex parent-child chunking (HierarchicalNodeParser)
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.core.node_parser import HierarchicalNodeParser, get_leaf_nodes
from llama_index.core.storage.docstore import SimpleDocumentStore
from llama_index.core import StorageContext

# Dokumentumok betöltése
documents = SimpleDirectoryReader("./docs/").load_data()

# HierarchicalNodeParser: 3 szint
# chunk_sizes: [2048, 512, 128]
#   → 2048 token = root (legfelső szint)
#   → 512 token  = parent
#   → 128 token  = leaf (legalsó szint, ez kerül a vektoradatbázisba)
node_parser = HierarchicalNodeParser.from_defaults(
    chunk_sizes=[2048, 512, 128]
)

# Összes node generálása (mindhárom szint)
nodes = node_parser.get_nodes_from_documents(documents)

# Leaf node-ok kiemelése (ezek kerülnek a vektoradatbázisba)
leaf_nodes = get_leaf_nodes(nodes)

print(f"Összes node:  {len(nodes)}")
print(f"Leaf node-ok: {len(leaf_nodes)}")

# Document store feltöltése (az összes node — parent + leaf — tárolása)
docstore = SimpleDocumentStore()
docstore.add_documents(nodes)

storage_context = StorageContext.from_defaults(docstore=docstore)

# Index létrehozása csak a leaf node-okból (vektorizálás)
index = VectorStoreIndex(
    leaf_nodes,
    storage_context=storage_context,
    show_progress=True
)

# AutoMergingRetriever: leaf visszakeresés, parent kontextus visszaadás
from llama_index.core.retrievers import AutoMergingRetriever
base_retriever = index.as_retriever(similarity_top_k=6)
retriever = AutoMergingRetriever(
    base_retriever,
    storage_context,
    verbose=True,
    simple_ratio_thresh=0.3   # ha a leaf-ek >30%-a ugyanabból a parent-ből, merge-el
)

# Lekérdezés
from llama_index.core.query_engine import RetrieverQueryEngine
query_engine = RetrieverQueryEngine.from_args(retriever)
response = query_engine.query("Milyen dokumentumok szükségesek a szabadság-igényléshez?")
print(response)

Chunk-méret benchmarkok és RAGAS mérés

A chunking stratégia kiválasztása nem lehet csak elméleti — mindig mérni kell a konkrét dokumentumállományon. A RAGAS keretrendszer (ragas.io) a négy legfontosabb retrieval és generálási metrikát automatizáltan méri kérdés-válasz párok alapján.

A mérés menete: (1) összeállítasz 30–50 kérdés-válasz párt a dokumentumokból, (2) lefuttatod a RAG pipeline-t mindhárom chunking stratégiával, (3) a RAGAS kiszámolja a metrikákat, (4) az eredmény alapján döntesz.

Stratégiák összehasonlítása — jellemző benchmark-értékek

Stratégia Context Precision Context Recall Latency (átlag) RAGAS Score
Fix méretű (512 tok, 10% overlap) 0.61–0.70 0.72–0.80 120–180 ms 0.65–0.74
Fix méretű (256 tok, 10% overlap) 0.68–0.76 0.65–0.73 90–140 ms 0.66–0.74
Szemantikus 0.78–0.87 0.74–0.82 200–350 ms 0.76–0.84
Parent-child (256 leaf / 1024 parent) 0.82–0.91 0.79–0.87 180–280 ms 0.80–0.89
Hibrid / adaptív 0.84–0.93 0.81–0.89 220–400 ms 0.82–0.91
Fontos megjegyzés a benchmarkokhoz

Ezek a számok jellemző tartományok vállalati dokumentumokon végzett mérések alapján — nem abszolút igazságok. A saját dokumentumállományodon mért RAGAS-pontszám eltérhet. Különösen: magyar nyelvű szövegeken az embedding modell megválasztása (multilingual-e5, Qwen3-Emb) nagyobb hatással lehet a végeredményre, mint a chunking stratégia. Mindig mérj a saját adatodon.

A latency-különbség szemantikus és fix méretű között jellemzően az indexelési fázisban keletkezik (az embedding a vágási döntéshez is szükséges), nem a retrieval-nél. A production query latency a legtöbb esetben azonos vagy hasonló.

Implementációs döntési fa

A következő kérdéssorozat segít kiválasztani a megfelelő chunking stratégiát a konkrét felhasználási esethez. Haladj végig sorban — az első egyező feltételnél megvan az ajánlott stratégia.

Saját tapasztalat

A Corpus V2 rendszerben a könyvek és kutatási dokumentumok parent-child chunking-ot kapnak (256 leaf / 1024 parent), a rövid blog-bejegyzések és FAQ-tartalmak fix méretű 256 tokenes chunkolást. A RAGAS Context Precision az előbbinél 0.84, az utóbbinál 0.79 — mindkettő jobb az egységes fix stratégiánál (0.61) volt az egyetlen megközelítéssel.

Kérdések és válaszok

Mi az optimális chunk-méret RAG rendszerhez?

Általános ajánlás: 256–512 token a leaf (levél) chunk-okhoz, 1024–2048 token a parent chunk-okhoz hierarchikus rendszerben. A valóban optimális méret tartalom-függő: kód és táblázat esetén kisebb (128–256), narratív szövegnél nagyobb (512–1024) chunk javasolt. Mérés: RAGAS Context Precision metrikával validáld a kiválasztott méretet.

Mi az a parent-child chunking és mikor érdemes alkalmazni?

A parent-child chunking hierarchikus strukturát hoz létre: a kis leaf chunk-ok pontos visszakeresésre, a hozzájuk rendelt parent chunk kontextus-gazdagításra szolgál. Retrieval: a leaf chunk alapján keres, de a parent chunk szövegét adja a generatív modellnek. Akkor érdemes, ha az entitásaid hierarchikus dokumentumstruktúrájúak — pl. fejezetekbe rendezett kézikönyvek, jogszabályok, specifikációk.

Mennyi az optimális overlap a chunk-ok között?

Fix méretű chunkingnál 10–20% overlap általánosan elfogadott — 512 token chunk esetén 51–102 token overlap. A nagy overlap (>25%) növeli a redundanciát és a vektorbázis méretét; a nulla overlap mondat- és bekezdéshatárokon vághat szét értelmes egységeket. Szemantikus chunkingnál az overlap kevésbé releváns, mert a vágási pont természetes határon történik.

Mi a különbség a szemantikus chunking és a fix méretű chunking között?

Fix méretű chunking token-számon vág, függetlenül a tartalomtól — gyors és egyszerű, de félbevághat mondatokat és bekezdéseket. Szemantikus chunking NLP modelllel azonosítja a természetes tartalmi határokat (bekezdések, fejezetek, témaváltások) és ott vág — lassabb, de jobb kontextus-integritású chunk-okat eredményez. A RAGAS Context Precision általában 15–25%-kal jobb szemantikus chunkingnál.

Hogyan döntsem el, melyik chunking stratégiát válasszam?

Döntési fa: ha a dokumentumok rövid, egységes szerkezetűek (FAQ, termékleírás) → fix méretű 256 token. Ha hosszú, narratív szövegek (kézikönyv, kutatás) → szemantikus chunking. Ha hierarchikus struktúra és kontextus-megőrzés kritikus (jogi dokumentum, specifikáció) → parent-child. Ha változatos dokumentumtípusok és erőforrás rendelkezésre áll → hibrid/adaptív.

Milyen eszközökkel implementálható a különböző chunking stratégia?

Fix méretű: LangChain RecursiveCharacterTextSplitter, LlamaIndex SentenceSplitter. Szemantikus: LangChain SemanticChunker (OpenAI embeddings alapján), LlamaIndex SemanticSplitterNodeParser. Parent-child: LangChain ParentDocumentRetriever, LlamaIndex HierarchicalNodeParser. Qdrant-tal mindhárom kompatibilis — a chunk típus csak a betöltési pipeline-t érinti, a vektoradatbázis struktúráját nem.

Kapcsolódó tartalmak

RAG Chunking Audit — melyik stratégia illik a te dokumentumaidhoz?

Ha már van RAG rendszered, de a válaszminőség nem éri el az elvárt szintet — vagy ha most tervezed az implementációt és bizonytalan vagy a chunking stratégiában — áttekintem a dokumentumállományt, és konkrét paraméter-ajánlást adok RAGAS-alapú validálással.

Chunking Audit kérése Vissza a RAG hubhoz →