[{"data":1,"prerenderedAt":699},["ShallowReactive",2],{"blog-contextual-retrieval-late-chunking-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":26,"sources":36,"cover":61,"og":62,"expertise":63,"locales":64,"lang":67,"title":68,"description":69,"coverAlt":70,"metaTitle":71,"takeaways":72,"faq":78,"toc":94,"blocks":125,"others":460},"contextual-retrieval-late-chunking","2026-10-17",10,"rag",[9,10,11,12,13],"RAG","Chunking","Embeddings","Contextual retrieval","Late chunking",[15,16,17,18,19,20,21,22,23,24,25],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[27,30,33],{"name":28,"url":29},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":31,"url":32},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":34,"url":35},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[37,40,43,46,49,52,55,58],{"title":38,"url":39},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":41,"url":42},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":44,"url":45},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":47,"url":48},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":50,"url":51},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":53,"url":54},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":56,"url":57},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":59,"url":60},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg","ai-engineer",[65,66,67],"en","de","hu","Kontextuális visszakeresés és késleltetett chunkolás: a RAG-chunkok visszakapják a kontextusukat","A chunkok elveszítik a dokumentumukat. Hogyan javít ezen a contextual retrieval, a late chunking és a kontextusos embedding, mennyibe kerül, és mikor hagyd ki.","Négy szabad négyzet, alul széles kapocs fogja össze, mindegyik felfelé egy nagy laphoz kapcsolódik.","Kontextuális visszakeresés, late chunking · Balázs Csorba",[73,74,75,76,77],"Az Anthropic kontextuális visszakeresése minden chunk elé 50–100 token LLM által írt kontextust tesz, és 35%-kal csökkentette a top 20 találat hibaarányát, kontextuális BM25-tel 49%-kal, rerankerrel 67%-kal.","Prompt-gyorsítótárazással a kontextus előállítása egyszeri indexelési költség: 2024-ben kb. 1,02 dollár millió dokumentumtokenenként, a mai Haiku-listaárakkal saját számításom szerint nagyjából 0,38–3,84 dollár.","A késleltetett chunkolás előbb a teljes dokumentumot embeddeli, majd chunkonként átlagolja a tokenvektorokat; nem kell hozzá LLM, de kell egy hosszú kontextusú embedding-modell, amelynek a tokenkimeneteihez hozzáférsz.","A late chunking tanulmányban az átlagos javulás a naiv chunkoláshoz képest kb. 1,5–1,9 nDCG@10 pont volt, kis chunkoknál a legnagyobb, és nulla, ha a környező szöveg nem kapcsolódik a tartalomhoz.","Kezdd az olcsó alapvonallal, a dokumentum címével és a szakasz útvonalával minden chunk előtt, és mérj, mielőtt a három módszer bármelyikéért fizetsz.",[79,82,85,88,91],{"q":80,"a":81},"Mi a kontextuális visszakeresés?","Az Anthropic által 2024 szeptemberében közzétett előfeldolgozási lépés. Egy LLM elolvassa a teljes dokumentumot és minden chunkot, rövid kontextust ír, amely elhelyezi a chunkot, és ezt a kontextust a chunk elé fűzik az embeddelés és a BM25-indexelés előtt.",{"q":83,"a":84},"Mi a késleltetett chunkolás (late chunking)?","A Jina AI kutatóinak módszere: az embedding-modellt a teljes dokumentumon futtatod, aztán a tokenembeddingeket chunkokra bontod, és chunkonként átlagolod. Minden chunkvektor a dokumentum többi részét is látva készül, külön LLM-hívás nélkül.",{"q":86,"a":87},"Drága a kontextuális visszakeresés?","Indexeléskor chunkonként egy LLM-hívásba kerül, nem lekérdezésenként. A dokumentumra alkalmazott prompt-gyorsítótárazással az Anthropic 2024-ben kb. 1,02 dollárra becsülte millió dokumentumtokenenként; a jelenlegi Claude Haiku listaárakkal újraszámolva nagyjából 0,38 és 3,84 dollár közé esik.",{"q":89,"a":90},"Segít a late chunking a kulcsszavas keresésnek?","Nem. A late chunking csak a vektorokat változtatja meg. A BM25 továbbra is a nyers chunkszöveget látja. A kontextuális visszakeresés magát a szöveget módosítja, így egyszerre javítja a BM25-öt és a vektoros keresést.",{"q":92,"a":93},"Mikor hagyjam ki mindezt?","Ha a chunkok már önmagukban is érthetők, például termékrekordok vagy GYIK-bejegyzések, vagy ha a teljes tudásbázis belefér a promptba. Az Anthropic szerint kb. 200 000 token alatt egyszerűbb lehet mindent a kontextusba tenni, mint RAG-ot építeni.",[95,98,101,104,107,110,113,116,119,122],{"id":96,"title":97},"context-loss","Miért veszítik el a chunkok a kontextusukat?",{"id":99,"title":100},"contextual-retrieval","Hogyan működik a kontextuális visszakeresés?",{"id":102,"title":103},"cost","Mennyibe kerül a kontextus előállítása?",{"id":105,"title":106},"late-chunking","Hogyan működik a késleltetett chunkolás?",{"id":108,"title":109},"contextual-models","Mi a helyzet a kontextusos embedding API-kkal?",{"id":111,"title":112},"comparison","Hogyan viszonyul egymáshoz a három megközelítés?",{"id":114,"title":115},"when-to-skip","Mikor nem éri meg a plusz kontextus?",{"id":117,"title":118},"implementation","Mire figyelj a megvalósításnál?",{"id":120,"title":121},"which-to-pick","Melyiket válaszd?",{"id":123,"title":124},"sources","Források",[126,130,139,142,145,148,149,152,161,164,202,205,208,209,212,274,277,278,281,287,290,293,295,296,299,301,304,305,358,370,371,399,400,428,429,432,433],{"type":127,"content":128},"paragraph",[129],"A chunkolás veszteséges lépés. Egy chunk, amely azt mondja, hogy „a maximális terhelés 40 kg”, a kézikönyvben teljesen egyértelmű volt, ahol a két oldallal korábbi címsor megnevezte a terméket. Kivágva és önmagában embeddelve már nem említi sem a terméket, sem a változatot, sem a forrásdokumentumot, így egy terméknévvel feltett kérdés talán soha nem találja meg.",{"type":127,"content":131},[132,133,138],"2024 óta háromféle megoldás jelent meg: a kontextuális visszakeresés, amely minden chunkot egy LLM-mel egészít ki; a késleltetett chunkolás, amely darabolás előtt a teljes dokumentumot embeddeli; és az API-ként árult kontextusos embedding-modellek. Ez a cikk összeveti, mit változtat mindegyik, mit mondanak a közzétett számok, mennyibe kerülnek, és melyik olcsó alapvonalat próbálom ki először. A korábban leírt ",{"tag":134,"to":135,"children":136},"link","\u002Fblog\u002Frag-pipeline-chunking-hybrid-search-reranking",[137],"chunkolási és hibrid keresési pipeline-ra"," épít.",{"type":140,"level":141,"id":96,"text":97},"heading",2,{"type":127,"content":143},[144],"Az embedding-modellek csak azt a szöveget látják, amelyet átadsz nekik. Ha a dokumentumot előbb feldaraboljuk, és minden darabot külön embeddelünk, a chunkon kívülre mutató hivatkozások, például „ez”, „ez a változat”, „a fenti táblázat” vagy egy ki nem mondott terméknév, értelmüket vesztik. A BM25 ugyanígy szenved: az egyező kulcsszó a címsorban van, nem a chunkban.",{"type":127,"content":146},[147],"A nagyobb chunk a kézenfekvő kerülőút, de felhígítja a vektort, és több irreleváns szöveget küld a modellnek. Az okosabb határok kevésbé segítenek, mint remélnénk: Qu, Tu és Bao 2024-es tanulmánya szerint a szemantikus chunkolás többletköltségét nem igazolja következetes javulás a fix méretű chunkokhoz képest. Az alábbi megoldások békén hagyják a határokat, és helyette kontextust adnak hozzá.",{"type":140,"level":141,"id":99,"text":100},{"type":127,"content":150},[151],"Az Anthropic 2024. szeptember 19-én tette közzé a kontextuális visszakeresést. Minden chunknál egy kis modell megkapja a teljes dokumentumot és a chunkot, és rövid, a chunkot a kereséshez elhelyező kontextust kell írnia, csak ezzel válaszolva. Az eredményt, ami általában 50–100 token, a chunk elé fűzik. Az összefűzött szöveget embeddelik, és BM25-höz is indexelik; az Anthropic ezt kontextuális embeddingnek és kontextuális BM25-nek nevezi.",{"type":153,"attrs":154,"inner":158,"caption":159},"diagram",{"viewBox":155,"role":156,"aria-labelledby":157},"0 0 720 170","img","crl1-t crl1-d","\u003Ctitle id=\"crl1-t\">Kontextuális visszakeresés indexeléskor\u003C\u002Ftitle>\u003Cdesc id=\"crl1-d\">A teljes dokumentumot egyszer gyorsítótárazzuk. Minden chunkhoz egy kis LLM rövid kontextust ír, amelyet a chunk elé fűzünk. Az összefűzött szöveg a beágyazási és a BM25-indexbe is bekerül; a lekérdezések ezután hibrid keresést és rerankert használnak.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"crl1-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Dokumentum\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">gyorsítótárazva\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#crl1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Chunk\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">hívásonként egy\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#crl1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Kis LLM\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">50–100 token\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#crl1-ah)\" \u002F>\u003Crect x=\"441\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"500\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Kontextus + chunk\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">egy szöveg\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#crl1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Két index\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">vektor + BM25\u003C\u002Ftext>",[160],"Az LLM indexeléskor chunkonként egyszer fut; a lekérdezési útvonalon semmi sem változik.",{"type":127,"content":162},[163],"A közölt hatás jelentős. Az Anthropic a top 20 találat hibaarányát mérte, vagyis egy mínusz recall@20 értéket, kódbázisok, szépirodalom, arXiv-cikkek és tudományos cikkek átlagában:",{"type":165,"head":166,"rows":173},"table",[167,169,171],[168],"Konfiguráció",[170],"Hibaarány",[172],"Csökkenés",[174,181,188,195],[175,177,179],[176],"Alap embeddingek",[178],"5.7%",[180],"–",[182,184,186],[183],"Kontextuális embeddingek",[185],"3.7%",[187],"35%",[189,191,193],[190],"Kontextuális embeddingek + kontextuális BM25",[192],"2.9%",[194],"49%",[196,198,200],[197],"Mindkettő, rerankeléssel",[199],"1.9%",[201],"67%",{"type":127,"content":203},[204],"Ugyanabból a cikkből két részlet könnyen elsikkad. A chunkok elé fűzött általános dokumentum-összefoglalók csak nagyon csekély javulást hoztak, tehát a kontextusnak chunkspecifikusnak kell lennie. A rerankelt beállítás pedig kb. 150 jelöltet kért le, újrarangsorolta őket, és a top 20-at tartotta meg, ami jobban teljesített, mint 5 vagy 10 chunk átadása.",{"type":206,"code":207},"code","import anthropic\n\nclient = anthropic.Anthropic()\n\ndef chunk_context(document: str, chunk: str) -> str:\n    \"\"\"One call per chunk; the document block is cached and reused for every chunk.\"\"\"\n    msg = client.messages.create(\n        model=\"claude-haiku-4-5\",\n        max_tokens=150,\n        messages=[{\"role\": \"user\", \"content\": [\n            {\"type\": \"text\", \"text\": f\"\u003Cdocument>\\n{document}\\n\u003C\u002Fdocument>\",\n             \"cache_control\": {\"type\": \"ephemeral\"}},\n            {\"type\": \"text\", \"text\": (\n                f\"Here is a chunk from the document:\\n\u003Cchunk>\\n{chunk}\\n\u003C\u002Fchunk>\\n\"\n                \"Write a short context that situates this chunk within the document \"\n                \"to improve search retrieval. Answer only with the context.\")},\n        ]}],\n    )\n    return msg.content[0].text.strip()\n\n# Index context and chunk together, but keep both fields for display and re-runs.\nrecord = {\"context\": ctx, \"chunk\": chunk, \"index_text\": f\"{ctx}\\n\\n{chunk}\"}",{"type":140,"level":141,"id":102,"text":103},{"type":127,"content":210},[211],"Az Anthropic kb. 1,02 dollárra becsülte millió dokumentumtokenenként, egyszeri költségként, 8000 tokenes dokumentumokkal, 800 tokenes chunkokkal, chunkonként 50 token utasítással és 100 token kontextussal, gyorsítótárazott dokumentummal számolva. Ez a szám a Claude 3 Haiku 2024-es árain alapult. Ugyanezekkel a feltevésekkel és az Anthropic árlistájának jelenlegi áraival újraszámoltam: millió dokumentumtokenre ez 125 dokumentum és 1250 chunk, dokumentumonként egy gyorsítótár-írás, kilenc gyorsítótár-olvasás, a chunk és az utasítás normál bemenetként, a kontextus kimenetként.",{"type":165,"head":213,"rows":222},[214,216,218,220],[215],"Tétel 1 millió dokumentumtokenre",[217],"Token",[219],"Haiku 4.5",[221],"Haiku 5.5 (100k-ig)",[223,232,241,250,259],[224,226,228,230],[225],"Gyorsítótár-írás, dokumentumok",[227],"1.0M",[229],"$1.25",[231],"$0.13",[233,235,237,239],[234],"Gyorsítótár-olvasás, dokumentumok",[236],"9.0M",[238],"$0.90",[240],"$0.09",[242,244,246,248],[243],"Bemenet, chunk és utasítás",[245],"1.06M",[247],"$1.06",[249],"$0.11",[251,253,255,257],[252],"Kimenet, kontextus",[254],"0.125M",[256],"$0.63",[258],"$0.06",[260,265,266,270],[261],{"tag":262,"children":263},"strong",[264],"Összesen",[],[267],{"tag":262,"children":268},[269],"$3.84",[271],{"tag":262,"children":272},[273],"$0.38",{"type":127,"content":275},[276],"Így vagy úgy, indexelési költség, amelyet csak dokumentumváltozáskor kell újra megfizetni, és a fejlesztési időhöz képest kicsi. A buktató a változás: ha egy dokumentum egy bekezdése módosul, a benne lévő összes chunk kontextusa megváltozhat, ezért a teljes dokumentumot kontextualizáld újra, ne csak a szerkesztett chunkot.",{"type":140,"level":141,"id":105,"text":106},{"type":127,"content":279},[280],"A késleltetett chunkolás, amelyet Günther és kollégái javasoltak a Jina AI-nál 2024 szeptemberében, a darabolást a folyamat végére teszi. A hosszú kontextusú embedding-modell elolvassa a teljes dokumentumot, vagy amennyi belefér, és tokenenként egy vektort állít elő. Az attention révén minden tokenvektor már tükrözi a környező szöveget. Csak ezután alkalmazzuk a chunkhatárokat: az egyes chunkokon belüli tokenvektorokat átlagolással egy chunk-embeddinggé vonjuk össze. A tanulmány szavaival: chunkolás a transformer után, közvetlenül az átlagoló pooling előtt.",{"type":153,"attrs":282,"inner":284,"caption":285},{"viewBox":155,"role":156,"aria-labelledby":283},"crl2-t crl2-d","\u003Ctitle id=\"crl2-t\">Naiv és késleltetett chunkolás\u003C\u002Ftitle>\u003Cdesc id=\"crl2-d\">Késleltetett chunkolásnál a teljes dokumentum egyszer halad át a transformeren. A tokenembeddingeket ezután a chunkhatároknál szétválasztjuk és átlagoljuk, így minden chunkvektor hordoz kontextust a dokumentum többi részéből.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"crl2-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Teljes dokumentum\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">8k tokenig\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#crl2-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Transformer\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">egy futás\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#crl2-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Tokenvektorok\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">kontextusos\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#crl2-ah)\" \u002F>\u003Crect x=\"441\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"500\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Szakaszolás\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">chunkhatárok\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#crl2-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Átlagolás\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">1 vektor\u002Fchunk\u003C\u002Ftext>",[286],"A naiv chunkolás minden chunkon külön futtatná a transformert, így egyik chunk sem látná a szomszédait.",{"type":127,"content":288},[289],"A Jina eredeti cikke egy Berlinről szóló Wikipédia-szöveggel mutatja be a hatást: a lakosságszámról szóló mondat koszinusz-hasonlósága a „Berlin” lekérdezéshez naiv chunkolással 0,708, késleltetett chunkolással 0,825 volt, mert a „lakossága” szó most már magában hordozta a várost. A tanulmány benchmarkjai szerényebbek. Három modell és négy BeIR-adatkészlet átlagában a késleltetett chunkolás kb. 1,8 ponttal javította az nDCG@10 értéket fix méretű chunkoknál, 1,9-cel mondatalapú és 1,5-tel szemantikus chunkoknál. A legnagyobb egyedi ugrás az NFCorpuson volt, 23,5-ről 30,0-ra a jina-embeddings-v2-small modellel.",{"type":127,"content":291},[292],"A tanulmány a korlátokról is őszintén ír. A javulás kis chunkoknál a legnagyobb, és néhány szövegértési adatkészleten nagy chunkokkal a naiv chunkolás nyert. A szintetikus needle és passkey feladatoknál, ahol a környező szöveg összefüggéstelen töltelék, a késleltetett chunkolás nem segített. A modell ablakánál hosszabb dokumentumokat a szerzők átfedő makrochunkokra bontják, és mindegyikre külön alkalmazzák a módszert.",{"type":206,"code":294},"import torch\nfrom transformers import AutoModel, AutoTokenizer\n\n# Any mean-pooling, long-context embedding model whose token outputs you can read.\ntok = AutoTokenizer.from_pretrained(MODEL)\nmodel = AutoModel.from_pretrained(MODEL)\n\ndef late_chunk(text: str, spans: list[tuple[int, int]]) -> list[torch.Tensor]:\n    \"\"\"spans are character ranges from your normal chunker.\"\"\"\n    enc = tok(text, return_offsets_mapping=True, truncation=True,\n              max_length=8192, return_tensors=\"pt\")\n    offsets = enc.pop(\"offset_mapping\")[0].tolist()\n    with torch.no_grad():\n        tokens = model(**enc).last_hidden_state[0]      # one vector per token\n    out = []\n    for start, end in spans:\n        idx = [i for i, (s, e) in enumerate(offsets) if e > s and s >= start and e \u003C= end]\n        v = tokens[idx].mean(dim=0)                     # pool only this chunk's tokens\n        out.append(v \u002F v.norm())\n    return out",{"type":140,"level":141,"id":108,"text":109},{"type":127,"content":297},[298],"A harmadik lehetőség modellként csomagolja az ötletet. A Voyage 2025 júliusában adta ki a voyage-context-3, 2026 júniusában a voyage-context-4 modellt: egy dokumentum összes chunkját együtt küldöd el, és chunkonként egy vektort kapsz, mindegyiket a teljes dokumentumot látva kiszámítva. Az API dokumentumok listáját fogadja, mindegyik chunkok listája, kérésenként legfeljebb 1000 bemenettel, összesen 120 000 tokennel és 16 000 chunkkal. A lekérdezések ugyanazon a végponton, egyelemű listaként mennek. A voyage-context-4 millió tokenenként 0,12 dollárba kerül, maga is tud chunkolni, a 32 000 tokennél hosszabb dokumentumokat pedig feldarabolja.",{"type":206,"code":300},"import voyageai\n\nvo = voyageai.Client()\n\ndocs = [[\"Chunk 1 of manual A ...\", \"Chunk 2 of manual A ...\"],\n        [\"Chunk 1 of manual B ...\"]]\nres = vo.contextualized_embed(inputs=docs, model=\"voyage-context-4\",\n                              input_type=\"document\")\nchunk_vectors = [r.embeddings for r in res.results]   # one list per document\n\nq = vo.contextualized_embed(inputs=[[\"maximum load of the X200 shelf\"]],\n                            model=\"voyage-context-4\", input_type=\"query\")\nquery_vector = q.results[0].embeddings[0]",{"type":127,"content":302},[303],"A Voyage szerint a voyage-context-3 chunkszintű visszakeresésben 6,76%-kal verte az Anthropic-stílusú kontextuális visszakeresést és 23,66%-kal a Jina late chunkingot. Ezeket szolgáltatói számként kezeld, és figyelj arra, hogy a voyage-context-3 cikk az összefoglalóban és az eredmények részben két különböző százalékkészletet közöl. Az architekturális lényeg ettől függetlenül áll: dokumentumkontextust kapsz chunkonkénti LLM-hívás nélkül, cserébe szolgáltatóhoz kötöd az indexelést és a lekérdezést is.",{"type":140,"level":141,"id":111,"text":112},{"type":165,"head":306,"rows":317},[307,309,311,313,315],[308],"Megközelítés",[310],"Mi változik",[312],"Mi kell hozzá",[314],"Segít a BM25-nek",[316],"Fő költség",[318,329,338,349],[319,321,323,325,327],[320],"Cím- és címsor-előtag",[322],"Chunkszöveg",[324],"Feldolgozott szerkezet",[326],"Igen",[328],"Szinte semmi",[330,332,333,335,336],[331],"Kontextuális visszakeresés",[322],[334],"Chunkonként LLM-hívás",[326],[337],"LLM-tokenek indexeléskor",[339,341,343,345,347],[340],"Késleltetett chunkolás",[342],"Csak a vektorok",[344],"Hosszú kontextusú modell, tokenkimenet",[346],"Nem",[348],"Saját inferencia",[350,352,353,355,356],[351],"Kontextusos embedding API",[342],[354],"Egy szolgáltató indexhez és lekérdezéshez",[346],[357],"Tokenalapú API-ár",{"type":359,"variant":360,"title":361,"body":362},"callout","tip","Először az olcsó alapvonalat próbáld ki",[363],[364,365,369],"A három módszer bármelyike előtt fűzd minden chunk elé a dokumentum címét és a címsorok útvonalát, például: „X200 polc kézikönyv > Műszaki adatok > Terhelés”. Lekérdezéskor semmibe sem kerül, a BM25-nek és a vektoroknak egyaránt segít, és ha a feldolgozód megőrzi a címsorokat, ahogy a ",{"tag":134,"to":366,"children":367},"\u002Fblog\u002Fpdf-document-parsing-for-rag",[368],"PDF-feldolgozás RAG-hoz"," cikkben tárgyaltam, néhány sor kód. Ezt mérd le, aztán a kontextuális visszakeresést ehhez mérd, ne a csupasz chunkokhoz.",{"type":140,"level":141,"id":114,"text":115},{"type":372,"items":373},"list",[374,379,389,394],[375,378],{"tag":262,"children":376},[377],"Önmagukban érthető rekordok."," A termékadatok, GYIK-bejegyzések és jegyek már megnevezik a tárgyukat. A plusz kontextus csak megismétli, ami ott van.",[380,383,384,388],{"tag":262,"children":381},[382],"Kis tudásbázisok."," Az Anthropic megjegyzi, hogy kb. 200 000 token, nagyjából 500 oldal alatt egyszerűbb lehet mindent a promptba tenni, mint visszakeresést építeni. Ezt a kompromisszumot a ",{"tag":134,"to":385,"children":386},"\u002Fblog\u002Frag-2026-hybrid-agentic-long-context",[387],"RAG 2026-ban"," cikkben mérlegeltem.",[390,393],{"tag":262,"children":391},[392],"Független környezet."," Egy fájlban gyűjtött, egymástól független jegyzetek semmi hasznosat nem adnak át a modellnek, ahogy a late chunking tanulmány needle-eredményei is mutatják.",[395,398],{"tag":262,"children":396},[397],"Gyorsan változó dokumentumok."," Ha a dokumentumok naponta változnak, a kontextuális visszakeresés azt jelenti, hogy naponta teljes dokumentumokon kell újrafuttatni az LLM-et. A late chunking vagy egy kontextusos API csak egy embedding-futásba kerül.",{"type":140,"level":141,"id":117,"text":118},{"type":372,"ordered":401,"items":402},true,[403,408,413,418],[404,407],{"tag":262,"children":405},[406],"Tárold külön a kontextust és a chunkot."," Az összefűzött szöveget indexeld, de mindkét mezőt őrizd meg. Az Anthropic szerint a generálás javulhat, ha a modell meg tudja különböztetni a hozzáadott kontextust az eredeti szövegtől, a hivatkozásokhoz pedig a nyers chunk kell.",[409,412],{"tag":262,"children":410},[411],"Verziózd a kontextusprompt."," A prompt mostantól az index része. Ha módosítod, újra kell kontextualizálni, ezért adj neki verziót, és tárold ezt minden chunk mellett.",[414,417],{"tag":262,"children":415},[416],"Szabd a saját területedre."," Az Anthropic szerint a szakterületre szabott promptok, például szójegyzékkel, felülmúlhatják az általánosat. Egy B2B-katalógusnál arra utasítanám a modellt, hogy mindig nevezze meg a termékcsaládot és a változatot.",[419,422,423,427],{"tag":262,"children":420},[421],"A visszakeresést mérd, ne a benyomásaidat."," Hasonlítsd össze a recall@20 és az nDCG@10 értéket címkézett kérdéseken előtte és utána, ahogy a ",{"tag":134,"to":424,"children":425},"\u002Fblog\u002Frag-evaluation-metrics",[426],"RAG értékelése"," cikkben. A közzétett javulások mások adatain számolt átlagok.",{"type":140,"level":141,"id":120,"text":121},{"type":127,"content":430},[431],"Ökölszabályom: ha hibrid keresést futtatsz, a kontextuális visszakeresés az alapértelmezés, mert ez az egyetlen lehetőség, amely a kulcsszavas találatokat is javítja, és bármely embedding-modellel működik. Ha a korpusz nagy és gyakran változik, vagy a dokumentumok nem kerülhetnek LLM-szolgáltatóhoz, egy saját hosztolású, hosszú kontextusú modellel végzett késleltetett chunkolás embedding-költségen hozza a haszon egy részét. Ha már olyan szolgáltatót használsz, amely kontextusos embeddinget kínál, és elfogadod a kötöttséget, az a legkevesebb fejlesztéssel jár. Mindhárom esetben a cím- és címsor-előtaggal kezdj, és tartsd meg a rerankert, amely az Anthropic számaiban az utolsó lépést hozta 49%-ról 67%-ra.",{"type":140,"level":141,"id":123,"text":124},{"type":372,"ordered":401,"items":434},[435,439,442,445,448,451,454,457],[436],{"tag":437,"href":39,"children":438},"a",[38],[440],{"tag":437,"href":42,"children":441},[41],[443],{"tag":437,"href":45,"children":444},[44],[446],{"tag":437,"href":48,"children":447},[47],[449],{"tag":437,"href":51,"children":450},[50],[452],{"tag":437,"href":54,"children":453},[53],[455],{"tag":437,"href":57,"children":456},[56],[458],{"tag":437,"href":60,"children":459},[59],[461,534,592,645],{"slug":462,"published":5,"minutes":463,"category":7,"tags":464,"keywords":468,"about":481,"sources":491,"cover":528,"og":529,"expertise":63,"locales":530,"lang":67,"title":531,"description":532,"coverAlt":533},"embedding-model-selection-2026",9,[11,9,465,466,467],"MTEB","Vector search","Model selection",[469,470,471,472,473,474,475,476,477,478,479,480],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[482,485,488],{"name":483,"url":484},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":486,"url":487},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":489,"url":490},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[492,495,498,501,504,507,510,513,516,519,522,525],{"title":493,"url":494},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":496,"url":497},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":499,"url":500},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":502,"url":503},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":505,"url":506},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":508,"url":509},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":511,"url":512},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":514,"url":515},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":517,"url":518},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":520,"url":521},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":523,"url":524},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":526,"url":527},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[65,66,67],"Embedding-modell választása 2026-ban: ranglisták, költségek és összehasonlító teszt a saját adatokon","Hogyan válassz embedding-modellt RAG-hoz 2026-ban: mit mond az MTEB és az RTEB, API vagy nyílt súlyok, árak, dimenziók és egy egyhetes összehasonlító teszt.","Három oszlop egymásra rakott kockákból, középen a legmagasabb, mindegyik rövid sávval mérve.",{"slug":535,"published":5,"minutes":463,"category":7,"tags":536,"keywords":540,"about":553,"sources":561,"cover":586,"og":587,"expertise":63,"locales":588,"lang":67,"title":589,"description":590,"coverAlt":591},"rag-access-control-permissions",[9,537,538,539,466],"Access control","Security","Multi-tenancy",[541,542,543,544,545,546,547,548,549,550,551,552],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[554,557,560],{"name":555,"url":556},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":558,"url":559},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":28,"url":29},[562,565,568,571,574,577,580,583],{"title":563,"url":564},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":566,"url":567},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":569,"url":570},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":572,"url":573},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":575,"url":576},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":578,"url":579},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":581,"url":582},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":584,"url":585},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[65,66,67],"Hozzáférés-kezelés RAG-hoz: jogosultságtudatos visszakeresés dokumentumszivárgás nélkül","Hogyan szivárogtatnak dokumentumot a RAG-asszisztensek, és hogyan állítsd meg: ACL minden chunkon, előszűrés, sorszintű biztonság pgvectorban, jogszinkron.","Hét kártya sorban, haton lakat jelvény, a csupasz kártya nyilat küld kifelé.",{"slug":593,"published":594,"minutes":463,"category":7,"tags":595,"keywords":600,"about":611,"sources":619,"cover":639,"og":640,"expertise":63,"locales":641,"lang":67,"title":642,"description":643,"coverAlt":644},"pdf-document-parsing-for-rag","2026-10-16",[9,596,597,598,599],"PDF parsing","OCR","Docling","Document AI",[601,602,603,604,605,606,607,608,609,610],"pdf parsing for rag","best pdf parser for rag","docling vs marker","marker vs mineru","pdf to markdown for llm","extract tables from pdf for rag","ocr for rag pipeline","olmocr bench","scanned pdf rag","document parsing llm",[612,615,618],{"name":613,"url":614},"PDF","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPDF",{"name":616,"url":617},"Optical character recognition","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOptical_character_recognition",{"name":28,"url":29},[620,623,626,629,632,635,638],{"title":621,"url":622},"Docling: README, features and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fdocling-project\u002Fdocling",{"title":624,"url":625},"Auer et al.: Docling: An Efficient Open-Source Toolkit for AI-driven Document Conversion (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.17887",{"title":627,"url":628},"Datalab: Marker README, olmOCR-bench results and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fdatalab-to\u002Fmarker",{"title":630,"url":631},"OpenDataLab: MinerU README and license (GitHub)","https:\u002F\u002Fgithub.com\u002Fopendatalab\u002FMinerU",{"title":633,"url":634},"Poznanski et al.: olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.18443",{"title":636,"url":637},"Claude Platform Docs: PDF support","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fpdf-support",{"title":38,"url":39},"\u002Fimages\u002Fblog\u002Fpdf-document-parsing-for-rag\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpdf-document-parsing-for-rag\u002Fog.jpg",[65,66,67],"PDF-feldolgozás RAG-hoz: layout-pipeline-ok, OCR és vizuális modellek összevetve","Miért a PDF-feldolgozáson múlik a RAG minősége, miben más a Docling, a Marker, a MinerU és a VLM-OCR, és hogyan teszteld a parsert saját dokumentumokon.","Rendezetlen blokkok egy lapon egyenletes sorrá válnak a második lapon.",{"slug":646,"published":594,"minutes":647,"category":7,"tags":648,"keywords":652,"about":662,"sources":672,"cover":693,"og":694,"expertise":63,"locales":695,"lang":67,"title":696,"description":697,"coverAlt":698},"multilingual-rag-german-hungarian",7,[9,649,11,650,651],"Multilingual","German","Hungarian",[653,654,655,656,475,657,658,659,660,661],"multilingual rag","german rag embeddings","hungarian nlp search","cross-lingual retrieval","bge-m3 german","german compound words search","hungarian stemming postgres","multilingual-e5-large-instruct","qwen3 embedding multilingual",[663,666,669],{"name":664,"url":665},"Cross-language information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-language_information_retrieval",{"name":667,"url":668},"Agglutinative language","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgglutinative_language",{"name":670,"url":671},"Compound (linguistics)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCompound_(linguistics)",[673,675,678,681,684,687,690],{"title":674,"url":494},"Enevoldsen et al.: MMTEB: Massive Multilingual Text Embedding Benchmark (2025)",{"title":676,"url":677},"Chen et al.: M3-Embedding (BGE-M3): Multi-Linguality, Multi-Functionality, Multi-Granularity (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2402.03216",{"title":679,"url":680},"Zhang et al.: Qwen3 Embedding: Advancing Text Embedding and Reranking Through Foundation Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.05176",{"title":682,"url":683},"Hugging Face: intfloat\u002Fmultilingual-e5-large-instruct model card","https:\u002F\u002Fhuggingface.co\u002Fintfloat\u002Fmultilingual-e5-large-instruct",{"title":685,"url":686},"Elasticsearch Reference: Hyphenation decompounder token filter","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Freference\u002Ftext-analysis\u002Fanalysis-hyp-decomp-tokenfilter",{"title":688,"url":689},"PostgreSQL 18 Documentation: Text search dictionaries","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Ftextsearch-dictionaries.html",{"title":691,"url":692},"Snowball: stemming algorithms by language","https:\u002F\u002Fsnowballstem.org\u002Falgorithms\u002F","\u002Fimages\u002Fblog\u002Fmultilingual-rag-german-hungarian\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmultilingual-rag-german-hungarian\u002Fog.jpg",[65,66,67],"Többnyelvű RAG német és magyar tartalomra: embeddingek, összetett szavak és nyelvek közötti keresés","RAG német és magyar tartalom fölött: többnyelvű embeddingek, összetett szavak, szótövezés, ékezetek és nyelvenkénti értékelés.","Két sor kis négyzet, mindegyik fölött pont, olvad össze egyetlen magas téglalappá.",1792222774311]