[{"data":1,"prerenderedAt":751},["ShallowReactive",2],{"blog-code-rag-repository-indexing-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":37,"cover":74,"og":75,"expertise":76,"locales":77,"lang":80,"title":81,"description":82,"coverAlt":83,"metaTitle":84,"takeaways":85,"faq":91,"toc":107,"blocks":132,"others":500},"code-rag-repository-indexing","2026-10-01",8,"rag",[9,10,11,12,13],"RAG","Code search","Tree-sitter","Embeddings","Coding agents",[15,16,17,18,19,20,21,22,23,24],"RAG over code","AST chunking","tree-sitter code chunking","repository map","code embeddings","semantic code search","codebase indexing","repo map tokens","incremental code index","CoIR benchmark",[26,29,32,34],{"name":27,"url":28},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":30,"url":31},"Abstract syntax tree","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAbstract_syntax_tree",{"name":11,"url":33},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTree-sitter_%28parser_generator%29",{"name":35,"url":36},"Merkle tree","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMerkle_tree",[38,41,44,47,50,53,56,59,62,65,68,71],{"title":39,"url":40},"cAST: AST-based chunking for code RAG (arXiv 2506.15655)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.15655",{"title":42,"url":43},"Aider docs: repository map","https:\u002F\u002Faider.chat\u002Fdocs\u002Frepomap.html",{"title":45,"url":46},"Aider blog: building a better repository map with tree-sitter (2023)","https:\u002F\u002Faider.chat\u002F2023\u002F10\u002F22\u002Frepomap.html",{"title":48,"url":49},"Anthropic Engineering: effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":51,"url":52},"Cursor blog: securely indexing large codebases (Jan 2026)","https:\u002F\u002Fcursor.com\u002Fblog\u002Fsecure-codebase-indexing",{"title":54,"url":55},"turbopuffer: Cursor customer story","https:\u002F\u002Fturbopuffer.com\u002Fcustomers\u002Fcursor",{"title":57,"url":58},"Kilo Code docs: codebase indexing","https:\u002F\u002Fkilo.ai\u002Fdocs\u002Fcustomize\u002Fcontext\u002Fcodebase-indexing",{"title":60,"url":61},"Serena on GitHub","https:\u002F\u002Fgithub.com\u002Foraios\u002Fserena",{"title":63,"url":64},"Voyage AI docs: pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":66,"url":67},"Qwen blog: Qwen3-Embedding (Jun 2025)","https:\u002F\u002Fqwenlm.github.io\u002Fblog\u002Fqwen3-embedding\u002F",{"title":69,"url":70},"CoIR: a benchmark for code information retrieval (arXiv 2407.02883)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2407.02883",{"title":72,"url":73},"CocoIndex blog: indexing a codebase","https:\u002F\u002Fcocoindex.io\u002Fblogs\u002Findex-codebase-v1","\u002Fimages\u002Fblog\u002Fcode-rag-repository-indexing\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcode-rag-repository-indexing\u002Fog.jpg","ai-engineer",[78,79,80],"en","de","hu","RAG kódon: AST-darabolás, repótérképek és kódbeágyazások ágensekhez","Hogyan találják meg a kódot a kódoló ágensek: AST-darabolás tree-sitterrel, repótérképek, Merkle-fás szinkron, kódbeágyazók 2026-ban, és mikor jobb a grep.","Elágazó kódfa táplál egy sor kartotékkártyát.","RAG kódon: AST-darabolás, repótérkép · Balázs Csorba",[86,87,88,89,90],"A soralapú darabolás kettévágja a függvényeket, és elválasztja az importokat az őket használó kódtól; a cAST-tanulmány AST-alapú darabolással +4,3 Recall@5-öt mért a RepoEvalon és +2,67 Pass@1-et a SWE-benchen.","A tree-sitter a közös elemző: darabolja a kódot függvény, osztály vagy metódus szerint, vonja össze a kis testvércsomópontokat, ossza fel a túl nagyokat, és minden darabhoz tárolja az útvonalat, a sortartományt, a szimbólumnevet és a szignatúrát.","Egy repótérképhez nem kell beágyazás: az Aider egy fájlfüggőségi gráfon rangsorolja a tree-sitter szimbólumokat, és alapértelmezésben 1k tokenes keretbe illeszti a szignatúrákat.","A frissesség a nehéz rész: a Cursor csak a Merkle-fa megváltozott ágait szinkronizálja, a Kilo Code fájlfigyelőt és hash-gyorsítótárat használ, a CocoIndex pedig csak a megváltozott fájlokat ágyazza be újra.","A grep és a glob sosem avul el, de keresésenként tokenbe kerül; az index tárhelyet, beágyazási költséget és karbantartást igényel. Sok csapatnak mindkettő kell: grep a pontos nevekhez, index a jelentéshez.",[92,95,98,101,104],{"q":93,"a":94},"Mi az a RAG kódon?","Visszakereséssel kiegészített generálás, ahol a korpusz egy kódrepó. A rendszer nem bekezdésekre bontja a szöveget, hanem a szintaxis mentén darabolja a kódot, többnyire függvényekre és osztályokra, ezeket beágyazásokkal vagy szimbólumtérképekkel indexeli, és egy feladathoz a legrelevánsabb részeket adja a modellnek.",{"q":96,"a":97},"Miért AST-darabolás fix sorablakok helyett?","A fix ablakok kettévágják a függvényeket, és elválasztják a dekorátorokat és importokat a hozzájuk tartozó kódtól. Az absztrakt szintaxisfa mentén való darabolás egyben tartja a teljes definíciókat. A cAST-tanulmány testvércsomópont-összevonással végzett rekurzív AST-darabolással +4,3 pont Recall@5-öt mért a RepoEvalon és +2,67 pont Pass@1-et a SWE-benchen.",{"q":99,"a":100},"Mi az a repótérkép?","Egy repó osztályainak és függvényeinek tömör, szignatúrákat tartalmazó összefoglalója, amelyet tree-sitter készít. Az Aider a fájlfüggőségek gráfján rangsorolja a szimbólumokat, és csak azt veszi bele, ami belefér a tokenkeretbe, alapértelmezésben 1k tokenbe, így a modell fájltartalmak nélkül látja a szerkezetet.",{"q":102,"a":103},"Melyik beágyazó modellt használjam kódhoz 2026-ban?","2026 októberében kódra hangolt lehetőség például a voyage-code-4 millió tokenenként 0,12 dollárért, és a saját üzemeltetésre a Qwen3-Embedding 0.6B, 4B és 8B méretben; a jina-embeddings-v4 kutatási licenc alatt 71,59-et jelent a CoIR-on. Választás előtt értékeljen két-három jelöltet a saját repójából vett lekérdezésekkel.",{"q":105,"a":106},"Kell egyáltalán vektorindex a kódoló ágenseknek?","Nem mindig. A Claude Code grep és glob segítségével, igény szerint navigál, ami elkerüli az elavult indexeket és a bonyolult szintaxisfákat, de lassabb, mint az előre kiszámolt visszakeresés. Az index nagy vagy ismeretlen repóknál és a név helyett jelentés szerint megfogalmazott kérdéseknél térül meg.",[108,111,114,117,120,123,126,129],{"id":109,"title":110},"why-line-based-chunking-fails-on-code","Miért bukik el a soralapú darabolás kódon",{"id":112,"title":113},"ast-chunking-with-tree-sitter","AST-darabolás tree-sitterrel",{"id":115,"title":116},"repo-maps-symbol-context-without-embeddings","Repótérképek: szimbólumkontextus beágyazás nélkül",{"id":118,"title":119},"how-commercial-agents-index-code","Hogyan indexelik a kódot a kereskedelmi ágensek",{"id":121,"title":122},"code-embedding-models-in-2026","Kódbeágyazó modellek 2026-ban",{"id":124,"title":125},"measuring-code-retrieval-and-keeping-it-fresh","A kódkeresés mérése és frissen tartása",{"id":127,"title":128},"when-agentic-grep-beats-an-index","Mikor jobb az ágensalapú grep egy indexnél, és egy ellenőrzőlista",{"id":130,"title":131},"sources","Források",[133,142,151,154,157,165,171,179,180,191,193,200,201,212,219,231,232,238,245,263,267,332,333,351,369,372,373,380,391,403,410,411,422,425,453,461,462],{"type":134,"content":135},"paragraph",[136,137,141],"A ",{"tag":138,"children":139},"strong",[140],"RAG kódon"," olyan visszakereséssel kiegészített generálás, ahol a korpusz egy repó, és másképp hibázik, mint a dokumentumokon futó RAG. A kódnak éles határai vannak (függvények, osztályok, importok), pontos azonosítói, amelyek többet számítanak a parafrázisnál, és hívási gráfja, amely összeköti a fájlokat. Ha prózaként daraboljuk, a modell fél függvényt kap importok nélkül; ha egyszer indexeljük és elfelejtjük, az ágens magabiztosan olvas olyan kódot, amelyet tegnap töröltek.",{"type":134,"content":143},[144,145,150],"Ez a cikk a tree-sitterrel végzett szerkezeti darabolással, a beágyazás nélküli repótérképekkel, azzal, hogyan tartja frissen az indexet a Cursor és a Kilo Code, a 2026 októberében elérhető kódbeágyazó modellekkel, a saját repón végzett mérés módjával, és azzal foglalkozik, mikor jobb a grep bármilyen indexnél. Hogy mi kerüljön egyáltalán egy ágens kontextusába, azt ",{"tag":146,"to":147,"children":148},"link","\u002Fblog\u002Fagents-md-skills-mcp-cli-decision-matrix",[149],"az AGENTS.md, skillek, MCP és CLI döntési mátrix"," írja le; ez a cikk arról szól, hogyan találjuk meg a kódot.",{"type":152,"level":153,"id":109,"text":110},"heading",2,{"type":134,"content":155},[156],"A soralapú darabolás azért bukik el, mert a kód határai nem fix sorszámokra esnek. Egy 40 soros ablak középen vág el egy függvényt, egy dekorátort az egyik darabban, az osztályát a következőben hagyja, és elválasztja az importokat az őket használó kódtól. A visszakereső ezután olyan töredékeket rangsorol, amelyek önmagukban már nem jelentenek semmit.",{"type":134,"content":158},[159,160,164],"A cAST-tanulmány megmérte a hatást. A soralapú heurisztikákról azt írja, hogy „gyakran szétvágják a szemantikai szerkezeteket, kettéosztják a függvényeket vagy összevonják az össze nem tartozó kódot”, és az absztrakt szintaxisfa mentén végzett rekurzív darabolással váltja ki őket, a kis testvércsomópontokat egy méretkorlátig összevonva. Ez 4,3 ponttal javította a Recall@5-öt a RepoEval visszakeresésen és 2,67 ponttal a Pass@1-et a SWE-bench generáláson (",{"tag":161,"href":40,"children":162},"a",[163],"cAST","). A javulás abszolút értékben szerény, de egy elemzőből jön, nem egy nagyobb modellből.",{"type":166,"src":167,"alt":168,"wide":169,"caption":170},"image","\u002Fimages\u002Fblog\u002Fcode-rag-repository-indexing\u002Fdiagram-5.webp","Sorablakok és AST-darabok Két oszlop ugyanarról a forrásfájlról. Az A oszlop, fix sorablakok: az 1. ablak az importokat és a parse() első felét tartalmazza; a 2. ablak a parse() maradékát és egy osztályától levágott dekorátort; a 3. ablak az osztálytörzset a dekorátora nélkül. A B oszlop, AST-csomópontok: egy modul-darab az importokkal és a fájlszintű konstansokkal; egy függvény-darab a teljes parse() törzzsel, útvonallal, sortartománnyal és szignatúrával; egy osztály-darab az Order osztályhoz, a dekorátorral együtt. Lábléc jelzi a cAST eredményeit: +4,3 Recall@5 a RepoEvalon és +2,67 Pass@1 a SWE-benchen.",true,"A fix sorablakok szétvágják a definíciókat; az AST-darabok egyben tartják a függvényeket és osztályokat, és magukkal viszik a helyüket és szignatúrájukat.",{"type":134,"content":172},[173,174,178],"A kódkeresés egy második ok miatt sem szövegkeresés: a lekérdezések keverik a természetes nyelvet a pontos azonosítókkal. Egy olyan kérdéshez, mint „hol próbáljuk újra az ERP-hívást”, szemantikus egyezés kell, a „ki hívja a ",{"tag":175,"children":176},"code",[177],"createSalesOrder","-t” kérdéshez viszont pontos szimbólumkeresés. Egy jó rendszer mindkettőt kiszolgálja, ezért kombinálja a lenti rendszerek többsége a szerkezetet a kereséssel.",{"type":152,"level":153,"id":112,"text":113},{"type":134,"content":181},[182,183,186,187,190],"A tree-sitter a közös elemző ezekben a rendszerekben: konkrét szintaxisfává elemzi a fájlt, a ",{"tag":175,"children":184},[185],"tags.scm","-hez hasonló lekérdezőfájlok pedig nyelvenként meghatározzák, mi számít definíciónak vagy hivatkozásnak (",{"tag":161,"href":46,"children":188},[189],"Aider","). A daraboló végigmegy a legfelső szintű csomópontokon, a függvényeket, osztályokat és metódusokat darabként adja ki, összevonja a kis szomszédokat, hogy egy rövid segédfüggvényekből álló fájlból ne legyen ötven apró darab, a túl nagy csomópontokat pedig a gyerekeikbe lépve osztja fel.",{"type":175,"code":192},"# Sketch: AST chunks with sibling merging, the idea behind cAST\nfrom tree_sitter import Language, Parser\nimport tree_sitter_python as tspython\n\nparser = Parser(Language(tspython.language()))\nMAX_CHARS = 1000  # Kilo Code documents 100 to 1,000 characters per block\n\ndef chunks(src: bytes, path: str):\n    buf = []\n    for node in parser.parse(src).root_node.children:\n        text = src[node.start_byte:node.end_byte].decode()\n        if len(text) > MAX_CHARS and node.child_count:\n            yield from split_children(node, src, path)   # oversized: recurse\n        elif sum(len(t) for t, _ in buf) + len(text) \u003C= MAX_CHARS:\n            buf.append((text, node))                     # merge small siblings\n        else:\n            yield emit(buf, path)                        # path, lines, symbol, signature\n            buf = [(text, node)]\n    if buf:\n        yield emit(buf, path)",{"type":134,"content":194},[195,196,199],"A Cline és Roo vonalból származó Kilo Code konkrét beállításokat dokumentál ehhez: tree-sitter-elemzés 100 és 1000 karakter közötti szemantikai blokkokra, a nagy függvények felosztása, és soralapú tartalék azokhoz a fájlokhoz, amelyeket az elemző nem ért (",{"tag":161,"href":58,"children":197},[198],"Kilo Code","). A méretkorlátoktól függetlenül minden darabhoz tároljon metaadatot: a fájl útvonalát, a sortartományt, a szimbólum nevét és a szignatúrát. Az ágensnek az útvonal és a sorok kellenek a valódi fájl megnyitásához, a szignatúra pedig a törzs nélkül is olvashatóvá teszi a darabot egy találati listában.",{"type":152,"level":153,"id":115,"text":116},{"type":134,"content":202},[203,204,207,208,211],"Egy repótérkép vektorindex nélkül adja meg a modellnek a repó alakját. Az Aider tree-sitterrel építi: a legfontosabb osztályok és függvények típusokkal és hívási szignatúrákkal. Hogy mi fér bele a tokenkeretbe, egy gráfrangsoroló algoritmus dönti el egy olyan gráfon, ahol minden fájl egy csomópont, a függőségek pedig élek. A ",{"tag":175,"children":205},[206],"--map-tokens"," beállítás alapértéke 1k token, és a térkép bővül, amíg még nincs fájl hozzáadva a csevegéshez (",{"tag":161,"href":43,"children":209},[210],"Aider dokumentáció",").",{"type":134,"content":213},[214,215,218],"A térkép szignatúrákat tartalmaz, nem törzseket, ezért olcsó. Az Aider 2023-as tervezési jegyzete elmagyarázza, hogy a tree-sitter azért váltotta le a ctagset, mert közvetlenül a forrásból mutat teljes szignatúrákat, és telepíthető csomagként szállítja a nyelvi támogatást (",{"tag":161,"href":46,"children":216},[217],"Aider blog","). A visszakeresési minta: előbb a jelölők. A modell elolvassa a térképet, kiválasztja a szükséges fájlokat, és csak azután olvassa el őket teljesen. Egy ismert repóban sok feladathoz ez elég, és semmit sem kell újra beágyazni.",{"type":134,"content":220},[221,222,225,226,230],"A nyelvi szerverek egy lépéssel tovább mennek. A Serena egy MCP-eszközkészlet szimbólumszintű visszakereséshez és szerkesztéshez, amelynek alapértelmezett háttere a Language Server Protocol, több mint 40 nyelvvel (",{"tag":161,"href":61,"children":223},[224],"Serena","). Az ágens szövegkeresés helyett egy szimbólum definícióját vagy hivatkozásait kéri, és pontos választ kap. Hogy ez a gyakorlatban mennyit spórol, azt ",{"tag":146,"to":227,"children":228},"\u002Fblog\u002Ftoken-saving-tools-coding-agents-top-20",[229],"a kódoló ágensek tokenspóroló eszközeiről"," szóló cikk mutatja be.",{"type":152,"level":153,"id":118,"text":119},{"type":134,"content":233},[234,235,211],"A Cursor Merkle-fával indexel. Minden fájl SHA-256 hasht kap, minden mappa pedig a gyerekei hashét, így egy módosítás után csak a megváltozott ágak térnek el, és csak azokat kell szinkronizálni. Egy 50 000 fájlos munkaterületen pusztán a fájlnevek és hashek nagyjából 3,2 MB-ot tesznek ki. A megváltozott fájlokat szintaktikai darabokra bontja, a beágyazásokat a darab tartalma szerint gyorsítótárazza, egy hasonlósági hash pedig újrahasznosítható meglévő indexet keres, tartalmi bizonyítékokkal, hogy egy kliens csak olyan fájlokra kapjon találatot, amelyeket ténylegesen olvashat (",{"tag":161,"href":52,"children":236},[237],"Cursor",{"type":134,"content":239},[240,241,244],"A mögötte álló vektorréteg a turbopuffer, amely szerint a Cursor visszakeresése több mint egybillió vektort kezel, kódbázis-példányonként külön névtérrel, a Cursor saját modelljével beágyazva. Egy meglévő névtér másolása egy új checkouthoz az első lekérdezésig eltelt medián időt 7,87 másodpercről 525 milliszekundumra, a p99-et pedig 4,03 óráról 21 másodpercre csökkentette (",{"tag":161,"href":55,"children":242},[243],"turbopuffer","). Ez minden kódindex beüzemelési gondja: egy nagy repó első indexelése a lassú rész.",{"type":134,"content":246},[247,248,250,251,254,255,258,259,211],"A Kilo Code ugyanezt a mintát adja helyi telepítéshez: alapból LanceDB, külső tárként Qdrant, beágyazási szolgáltatók, köztük az Ollama a teljesen helyi felépítéshez, fájlfigyelés és hash-alapú gyorsítótárazás a növekményes frissítéshez, valamint az ágváltások kezelése. Alapértékei között szerepel a 0,4-es minimális keresési pontszám és legfeljebb 50 találat (",{"tag":161,"href":58,"children":249},[198],"). Maga a Cline ezzel szemben jelenleg beépített eszközöket dokumentál, például ",{"tag":175,"children":252},[253],"read_files"," és ",{"tag":175,"children":256},[257],"search_codebase",", beágyazási indexet nem (",{"tag":161,"href":260,"children":261},"https:\u002F\u002Fdocs.cline.bot\u002Ftools-reference\u002Fall-cline-tools.md",[262],"Cline dokumentáció",{"type":166,"src":264,"alt":265,"wide":169,"caption":266},"\u002Fimages\u002Fblog\u002Fcode-rag-repository-indexing\u002Fdiagram-19.webp","Indexelt visszakeresési út kódhoz Öt lépés balról jobbra: a repó, amelyet Merkle-hashek követnek; a tree-sitter a megváltozott fájlokból AST-darabokat készít; a darabok beágyazást kapnak, tartalom-hash szerinti gyorsítótárral; a vektorok kódbázisonként külön névtérbe kerülnek egy tárban; a keresés darabokat ad vissza, majd az ágens elolvassa a fájlokat.","Az indexelt út egyszer fizet a szerkezetért és a beágyazásokért; az ágensalapú út (grep, glob, olvasás, ismétlés) minden dobozt kihagy, és helyette keresésenként tokenben fizet.",{"type":268,"head":269,"rows":280},"table",[270,272,274,276,278],[271],"Rendszer",[273],"Darabolás",[275],"Visszakeresési primitív",[277],"Tárolás",[279],"Frissesség",[281,292,302,312,322],[282,284,286,288,290],[283],"Aider repótérkép",[285],"tree-sitter címkék, csak szignatúrák",[287],"gráfrangsor a fájlfüggőségeken",[289],"nincs; a térkép a promptba kerül",[291],"kérésenként újraépül, 1k token alapból",[293,294,296,298,300],[237],[295],"szintaktikai darabok",[297],"szemantikus keresés beágyazásokon",[299],"turbopuffer, névtér kódbázisonként",[301],"Merkle-fa, csak a változott ágak",[303,304,306,308,310],[198],[305],"tree-sitter blokkok, 100–1000 karakter",[307],"vektorkeresés, min. pontszám 0,4",[309],"LanceDB vagy Qdrant",[311],"fájlfigyelő és hash-gyorsítótár",[313,314,316,318,320],[224],[315],"nincs; szimbólumok nyelvi szerverekből",[317],"LSP definíció- és hivatkozáskeresés",[319],"a nyelvi szerver állapota",[321],"élő",[323,325,327,329,330],[324],"Claude Code",[326],"nincs",[328],"grep (ripgrep) és glob, igény szerint",[326],[331],"sosem avul el; keresésenként token",{"type":152,"level":153,"id":121,"text":122},{"type":134,"content":334},[335,336,339,340,343,344,347,348,211],"2026 októberében három gyakorlati út van. Hosztolt és kódra hangolt: a Voyage a ",{"tag":175,"children":337},[338],"voyage-code-4","-et jelöli aktuális kódmodelljeként millió tokenenként 0,12 dollárért, 200 millió ingyenes tokennel, míg a ",{"tag":175,"children":341},[342],"voyage-code-3"," 0,18 dolláros áron a régebbi modellek közé került (",{"tag":161,"href":64,"children":345},[346],"Voyage","). Saját üzemeltetésű: a Qwen3-Embedding 0.6B, 4B és 8B méretben érhető el 32k kontextussal, Matryoshka-dimenziókkal, és több mint 100 nyelvet támogat, a programozási nyelveket is beleértve (",{"tag":161,"href":67,"children":349},[350],"Qwen",{"type":134,"content":352},[353,354,358,359,363,364,368],"A harmadik út egy általános multimodális vagy hosszú kontextusú modell. A jina-embeddings-v4 egyetlen 2048 dimenziós vektort vagy késői interakcióhoz tokenszintű vektorokat tud kiadni, 71,59-et jelent a CoIR kódbenchmarkon, és a Qwen Research License alatt érhető el, ami kereskedelmi felhasználásnál számít (",{"tag":161,"href":355,"children":356},"https:\u002F\u002Fjina.ai\u002Fmodels\u002Fjina-embeddings-v4\u002F",[357],"Jina","). A Cohere Embed v4 128k kontextust és 256-tól 1536 dimenzióig terjedő Matryoshka-kimenetet kínál millió tokenenként 0,12 dollárért (",{"tag":161,"href":360,"children":361},"https:\u002F\u002Fdocs.cohere.com\u002Fchangelog\u002Fembed-multimodal-v4",[362],"Cohere","). A modellválasztás általános kérdés, ezt a ",{"tag":146,"to":365,"children":366},"\u002Fblog\u002Fembedding-model-selection-2026",[367],"beágyazó modell kiválasztásáról"," szóló cikk tárgyalja; kódnál a hosszú kontextus azért számít, mert egész fájlok és hosszú függvények is beleférnek.",{"type":134,"content":370},[371],"Néhány százezer soros repónál ezeken az árakon kicsi a beágyazási számla; a valódi költség a változások utáni újrabeágyazás és az a fejlesztési munka, amely helyesen tartja az indexet. A kódra hangolás ott térül meg leginkább, ahol a lekérdezések természetes nyelvűek, a kód pedig olyan szakmai neveket használ, amelyeket az általános modell sosem látott.",{"type":152,"level":153,"id":124,"text":125},{"type":134,"content":374},[375,376,379],"A saját repóján mérjen, a nyilvános benchmarkokat csak józansági ellenőrzésnek használja. Az ACL 2025-ön megjelent CoIR tíz adathalmazt fog össze nyolc visszakeresési feladaton és hét területen, és a szerzők szerint még a legkorszerűbb modelleknek is jelentős nehézségeik voltak a kódkereséssel (",{"tag":161,"href":70,"children":377},[378],"CoIR","). Az Ön lekérdezései, azonosítói és konvenciói nincsenek benne, ezért építsen saját kis készletet.",{"type":381,"ordered":169,"items":382},"list",[383,385,387,389],[384],"Gyűjtsön 30–50 valódi kérdést jegyekből és kódellenőrzésekből, mindegyikhez a választ adó fájllal és szimbólummal.",[386],"Keverje a természetes nyelvű kérdéseket a pontos névkeresésekkel, mert ezek más-más visszakeresőt terhelnek.",[388],"Mérje a recallt 5-nél és 10-nél minden darabolási és modellváltozatra, és tartsa a készletet a repóban.",[390],"Futtassa újra modellváltás és nagyobb refaktorálás után, ne csak egyszer.",{"type":134,"content":392},[393,394,397,398,402],"A frissesség ugyanannyi tervezést igényel, mint a minőség. A bevált minták: fájlfigyelők tartalom-hash gyorsítótárral (Kilo Code), csak a megváltozott ágakat szinkronizáló Merkle-fák (Cursor) és memoizált folyamatok. A CocoIndex fájlonként és feldolgozási lépésenként kulcsolja a gyorsítótárát, így egy néhány fájlt érintő commit csak azokat ágyazza be újra, a törölt fájlok sorai eltűnnek, az index pedig vagy felzárkóztató futásként a CI-ban, vagy élő módban, a munkakönyvtárat körülbelül egy másodperces késéssel figyelve fut (",{"tag":161,"href":73,"children":395},[396],"CocoIndex","). A törlések azok az esetek, amelyeket a legtöbb rendszer elront, így jut el egy ágens oda, hogy már eltávolított kódra hivatkozik. A késői darabolás és a kontextuális visszakeresés ezen felül kontextussal egészíti ki a darabokat, lásd ",{"tag":146,"to":399,"children":400},"\u002Fblog\u002Fcontextual-retrieval-late-chunking",[401],"kontextuális visszakeresés és késői darabolás",".",{"type":404,"variant":405,"title":406,"body":407},"callout","warn","A ranglista nem az Ön repója",[408],[409],"A kódbeágyazások benchmarkpontszámai hónapról hónapra változnak, és egyik sem tartalmazza az Ön elnevezési konvencióit. A CoIR-számot használja a szűkített lista szűrőjeként, a döntést pedig hagyja a saját kérdéskészletére.",{"type":152,"level":153,"id":127,"text":128},{"type":134,"content":412},[413,414,417,418,211],"A grep akkor jobb egy indexnél, ha a repó elég kicsi a gyors kereséshez, folyamatosan változik, vagy nem hagyhatja el a gépet. Az Anthropic hibridként írja le a Claude Code-ot: a CLAUDE.md előre betöltődik, és „az olyan primitívek, mint a glob és a grep, lehetővé teszik, hogy bejárja a környezetét és igény szerint töltsön be fájlokat, gyakorlatilag megkerülve az elavult indexek és a bonyolult szintaxisfák problémáit”. Ugyanez az írás megjegyzi, hogy a futásidejű felfedezés lassabb, mint az előre kiszámolt visszakeresés (",{"tag":161,"href":49,"children":415},[416],"Anthropic","). A Claude Code Grep eszköze ripgrepre épül, mellette ott a Glob (",{"tag":161,"href":419,"children":420},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Ftools-reference",[421],"Claude Code dokumentáció",{"type":134,"content":423},[424],"A Claude Code-ot, az opencode-ot és a Codexet párhuzamosan használom, és a kompromisszum a mindennapokban is látszik: a grepet előnyben részesítő ágensek egy ismeretlen területen több keresési és olvasási körre költenek tokent, de sosem adnak vissza olyan kódot, amely már nem létezik. Az index költsége ennek a fordítottja: tárhely, beágyazási költség és a fenti frissességi gépezet, cserébe kevesebb kör a jelentés szerint megfogalmazott kérdéseknél.",{"type":381,"ordered":426,"items":427},false,[428,433,438,443,448],[429,432],{"tag":138,"children":430},[431],"Repóméret",": amíg a ripgrep azonnal válaszol, kezdjen greppel és repótérképpel.",[434,437],{"tag":138,"children":435},[436],"Változási ütem",": gyakori változásnál a grep vagy az LSP előnyös; egy indexnek törléseket is kezelő növekményes frissítés kell.",[439,442],{"tag":138,"children":440},[441],"Monorepó",": sok csapat és ismeretlen terület az index mellett szól, lehetőleg megosztva és checkoutok között újrahasznosítva.",[444,447],{"tag":138,"children":445},[446],"Megfelelőség",": ha a kód nem hagyhatja el a gépet, használjon helyi beágyazót és helyi tárat, vagy hagyja ki az indexet.",[449,452],{"tag":138,"children":450},[451],"Alapból hibrid",": grep a pontos nevekhez, LSP a definíciókhoz és hivatkozásokhoz, index a jelentéshez.",{"type":134,"content":454},[455,456,460],"Ha visszakeresést épít egy kódoló ágenshez vagy belső kódasszisztenshez, a ",{"tag":146,"to":457,"children":458},"\u002Fexpertise\u002Fai-engineer",[459],"MI-mérnöki munkám"," az ilyen rendszereket fedi le a darabolástól a kiértékelésig.",{"type":152,"level":153,"id":130,"text":131},{"type":381,"ordered":169,"items":463},[464,467,470,473,476,479,482,485,488,491,494,497],[465],{"tag":161,"href":40,"children":466},[39],[468],{"tag":161,"href":43,"children":469},[42],[471],{"tag":161,"href":46,"children":472},[45],[474],{"tag":161,"href":49,"children":475},[48],[477],{"tag":161,"href":52,"children":478},[51],[480],{"tag":161,"href":55,"children":481},[54],[483],{"tag":161,"href":58,"children":484},[57],[486],{"tag":161,"href":61,"children":487},[60],[489],{"tag":161,"href":64,"children":490},[63],[492],{"tag":161,"href":67,"children":493},[66],[495],{"tag":161,"href":70,"children":496},[69],[498],{"tag":161,"href":73,"children":499},[72],[501,574,632,690],{"slug":502,"published":503,"minutes":504,"category":7,"tags":505,"keywords":509,"about":522,"sources":532,"cover":568,"og":569,"expertise":76,"locales":570,"lang":80,"title":571,"description":572,"coverAlt":573},"embedding-model-selection-2026","2026-10-17",9,[12,9,506,507,508],"MTEB","Vector search","Model selection",[510,511,512,513,514,515,516,517,518,519,520,521],"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",[523,526,529],{"name":524,"url":525},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":527,"url":528},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":530,"url":531},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[533,536,539,542,545,548,551,553,556,559,562,565],{"title":534,"url":535},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":537,"url":538},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":540,"url":541},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":543,"url":544},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":546,"url":547},"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":549,"url":550},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":552,"url":64},"Voyage AI: Pricing",{"title":554,"url":555},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":557,"url":558},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":560,"url":561},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":563,"url":564},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":566,"url":567},"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",[78,79,80],"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":575,"published":503,"minutes":576,"category":7,"tags":577,"keywords":581,"about":593,"sources":601,"cover":626,"og":627,"expertise":76,"locales":628,"lang":80,"title":629,"description":630,"coverAlt":631},"contextual-retrieval-late-chunking",10,[9,578,12,579,580],"Chunking","Contextual retrieval","Late chunking",[582,583,584,585,586,587,588,589,590,591,592],"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",[594,595,598],{"name":27,"url":28},{"name":596,"url":597},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":599,"url":600},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[602,605,608,611,614,617,620,623],{"title":603,"url":604},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":606,"url":607},"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":609,"url":610},"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":612,"url":613},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":615,"url":616},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":618,"url":619},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":621,"url":622},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":624,"url":625},"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",[78,79,80],"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.",{"slug":633,"published":503,"minutes":504,"category":7,"tags":634,"keywords":638,"about":651,"sources":659,"cover":684,"og":685,"expertise":76,"locales":686,"lang":80,"title":687,"description":688,"coverAlt":689},"rag-access-control-permissions",[9,635,636,637,507],"Access control","Security","Multi-tenancy",[639,640,641,642,643,644,645,646,647,648,649,650],"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",[652,655,658],{"name":653,"url":654},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":656,"url":657},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":27,"url":28},[660,663,666,669,672,675,678,681],{"title":661,"url":662},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":664,"url":665},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":667,"url":668},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":670,"url":671},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":673,"url":674},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":676,"url":677},"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":679,"url":680},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":682,"url":683},"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",[78,79,80],"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":691,"published":503,"minutes":576,"category":7,"tags":692,"keywords":697,"about":709,"sources":717,"cover":744,"og":745,"expertise":746,"locales":747,"lang":80,"title":748,"description":749,"coverAlt":750},"rag-product-catalog-pim-data",[9,693,694,695,696],"PIM","Product data","B2B e-commerce","Metadata filtering",[698,699,700,701,702,703,704,705,706,707,708],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[710,713,714],{"name":711,"url":712},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":27,"url":28},{"name":715,"url":716},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[718,721,724,727,729,732,735,738,741],{"title":719,"url":720},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":722,"url":723},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":725,"url":726},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":728,"url":716},"ETIM International: Classification",{"title":730,"url":731},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":733,"url":734},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":736,"url":737},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":739,"url":740},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":742,"url":743},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[78,79,80],"RAG termékkatalógusra: PIM-adatokból megbízható válaszok","A termékadat strukturált, ezért a PDF-szerű chunkolás itt elbukik. Hogyan sorosítsd a PIM-attribútumokat, és hogyan küldd a specifikációs kérdéseket szűrőkhöz.","Kilenc négyzetből álló keret apró jelekkel, alatta tölcsér egyetlen kártyához.",1792337025796]