[{"data":1,"prerenderedAt":698},["ShallowReactive",2],{"blog-rag-product-catalog-pim-data-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":26,"sources":36,"cover":63,"og":64,"expertise":65,"locales":66,"lang":69,"title":70,"description":71,"coverAlt":72,"metaTitle":73,"takeaways":74,"faq":80,"toc":96,"blocks":127,"others":440},"rag-product-catalog-pim-data","2026-10-17",10,"rag",[9,10,11,12,13],"RAG","PIM","Product data","B2B e-commerce","Metadata filtering",[15,16,17,18,19,20,21,22,23,24,25],"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",[27,30,33],{"name":28,"url":29},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":31,"url":32},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":34,"url":35},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[37,40,43,46,48,51,54,57,60],{"title":38,"url":39},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":41,"url":42},"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":44,"url":45},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":47,"url":35},"ETIM International: Classification",{"title":49,"url":50},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":52,"url":53},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":55,"url":56},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":58,"url":59},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":61,"url":62},"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",[67,68,69],"en","de","hu","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.","RAG PIM-termékadatokra · Balázs Csorba",[75,76,77,78,79],"A katalóguskérdéseknek típusai vannak: a cikkszámhoz pontos keresés kell, a specifikációhoz strukturált szűrő, és csak a leíró kérdések illenek jól a vektoros kereséshez.","A PIM-értékek típusosak, és nyelvet, csatornát és mértékegységet hordoznak, mint az Akeneo locale, scope és data hármasai; címkékkel és mértékegységgel sorosítsd őket, soha ne nyers attribútumkódokkal.","Termékmodellenként egy szöveget indexelj, a változatattribútumokat pedig strukturált payloadként tárold, hogy egy méretre vagy menetre vonatkozó kérdés ne egy embeddingen múljon.","Az LLM egy sémába vonja ki a szűrőket, amelyet az attribútummodellel validálsz, utána szűrt hibrid keresés fut; az ár és a készlet élőben jön a webshopból, nem az indexből.","Lekérdezésenként elvárt SKU-kkal értékelj, az Amazon ESCI-adathalmazának Exact, Substitute, Complement és Irrelevant fogalmaival.",[81,84,87,90,93],{"q":82,"a":83},"Beágyazhatom egyszerűen a termékexportot, és használhatok RAG-ot?","Igen, és a leíró kérdésekre elfogadhatóan fog válaszolni. A cikkszámoknál, a numerikus specifikációknál és a változatok közti különbségeknél viszont elbukik, mert az embeddingek nem hasonlítanak össze megbízhatóan számokat és pontos kódokat. Kombináld a szövegindexet az attribútumokon futó strukturált szűrőkkel.",{"q":85,"a":86},"Minden változat külön dokumentum legyen?","A szövegindexben általában nem. Egy termékmodell változatai szinte ugyanazt a szöveget tartalmazzák, ezért kiszorítják egymást a legjobb találatok közül. A termékmodellt indexeld, a változatattribútumokat payloadként tárold, a pontos változatot pedig szűrővel vagy lekérdezéssel oldd fel.",{"q":88,"a":89},"Honnan jön az ár és a készlet?","A válasz pillanatában a webshopból vagy az ERP-ből. B2B-ben az ár gyakran ügyfélspecifikus, a készlet folyamatosan változik, így egy indexpillanatkép eleve hibás. Az asszisztens a bejelentkezett ügyfél kontextusával hívjon meg egy ár- és elérhetőségi végpontot.",{"q":91,"a":92},"Segít az ETIM a RAG-ban?","Igen, ahol az adataid ezzel vannak osztályozva. Az ETIM osztályokat definiál egységes jellemzőlistával és előre meghatározott értékekkel, ami beszállítóktól függetlenül konzisztens attribútumneveket ad a szűrőkhöz, és többnyelvű szókészletet is.",{"q":94,"a":95},"Hogyan akadályozom meg, hogy az asszisztens specifikációkat találjon ki?","Az attribútumértékeket strukturált adatként, mértékegységgel add át a modellnek, utasítsd, hogy csak ezekből válaszoljon, és az üres attribútumot kezeld kifejezetten „nincs megadva” értékként. Teszteld olyan attribútumokra vonatkozó kérdésekkel, amelyekről tudod, hogy hiányoznak.",[97,100,103,106,109,112,115,118,121,124],{"id":98,"title":99},"what-pim-data-looks-like","Hogyan néznek ki valójában a PIM-adatok?",{"id":101,"title":102},"question-types","Melyik katalóguskérdéshez milyen visszakeresés kell?",{"id":104,"title":105},"document-granularity","Mi legyen egy dokumentum: termék, modell vagy változat?",{"id":107,"title":108},"serializing-attributes","Hogyan lesz az attribútumokból szöveg?",{"id":110,"title":111},"filters-not-embeddings","Miért szűrőbe valók a specifikációk, és nem embeddingbe?",{"id":113,"title":114},"prices-and-freshness","Mi ne kerüljön soha az indexbe?",{"id":116,"title":117},"multilingual-catalogues","Hogyan segítenek a nyelvek és az osztályozások?",{"id":119,"title":120},"evaluating-catalogue-rag","Hogyan teszteld a katalógusasszisztenst?",{"id":122,"title":123},"where-to-start","Hol érdemes kezdeni?",{"id":125,"title":126},"sources","Források",[128,132,146,149,179,181,184,187,188,191,243,246,247,250,253,262,263,274,303,305,308,309,328,330,338,345,346,354,357,358,366,369,370,377,399,400,408,409],{"type":129,"content":130},"paragraph",[131],"A legtöbb RAG-oktatóanyag dokumentumokból indul: PDF-ekből, wikioldalakból, kézikönyvekből. A termékkatalógus más eset. Egy PIM-ben a tudás már strukturált: típusos attribútumok, mértékegységek, változatok, osztályozások, nyelvenkénti fordítások és értékesítési csatornánkénti értékek. Ha ezt szöveggé lapítod, és úgy chunkolod, mint egy kézikönyvet, éppen azt a szerkezetet dobod el, amitől a katalóguskérdések megválaszolhatók.",{"type":129,"content":133},[134,135,140,141,145],"Ez a cikk egy katalógusasszisztens adatoldala: hogyan néznek ki a PIM-adatok, hogyan sorosítsd őket a visszakereséshez, mely kérdések tartoznak szűrőkhöz embeddingek helyett, és hogyan teszteld, hogy a válasz a helyes SKU-t nevezi meg. A ",{"tag":136,"to":137,"children":138},"link","\u002Fblog\u002Fsemantic-product-search-b2b",[139],"szemantikus termékkeresés B2B-webshopokban"," cikkre épít, amely a rangsorolással foglalkozik, és feltételezi, hogy a ",{"tag":136,"to":142,"children":143},"\u002Fblog\u002Fpimcore-erp-delta-sync",[144],"Pimcore–ERP deltaszinkron"," problémái már előrébb meg vannak oldva.",{"type":147,"level":148,"id":98,"text":99},"heading",2,{"type":129,"content":150},[151,152,156,157,160,161,164,165,168,169,160,172,164,175,178],"Vegyük példának az Akeneót. Egy termék ",{"tag":153,"children":154},"code",[155],"values"," mezője attribútumkód szerint van kulcsolva, és minden kód ",{"tag":153,"children":158},[159],"locale",", ",{"tag":153,"children":162},[163],"scope"," és ",{"tag":153,"children":166},[167],"data"," mezőkkel rendelkező értékobjektumok tömbjére mutat. Egy lokalizálható attribútumnak nyelvenként egy értéke van, egy csatornafüggőnek csatornánként egy, és ha mindkettő, akkor nyelv–csatorna páronként egy. A metrikus érték nem szám, hanem ",{"tag":153,"children":170},[171],"amount",{"tag":153,"children":173},[174],"unit",{"tag":153,"children":176},[177],"symbol"," mezőkből álló objektum, ahol a szimbólum a mértékegységcsaládból jön.",{"type":153,"code":180},"\"values\": {\n  \"name\":        [{ \"locale\": \"de_DE\", \"scope\": null, \"data\": \"Sechskantschraube DIN 933\" }],\n  \"length\":      [{ \"locale\": null, \"scope\": null,\n                    \"data\": { \"amount\": \"50\", \"unit\": \"MILLIMETER\", \"symbol\": \"mm\" } }],\n  \"material\":    [{ \"locale\": null, \"scope\": null, \"data\": \"stainless_a2\" }],\n  \"description\": [{ \"locale\": \"de_DE\", \"scope\": \"ecommerce\", \"data\": \"...\" },\n                  { \"locale\": \"de_DE\", \"scope\": \"print\",     \"data\": \"...\" }]\n}",{"type":129,"content":182},[183],"A változatok egy második réteget adnak hozzá. Az Akeneóban egy családváltozat egy vagy két változatszintet határoz meg, szintenként a tengelyeket, és azt, hogy mely attribútumok közösek és melyek változnak; így legfeljebb három gazdagítási szint lehet: gyökér termékmodell, al-termékmodell és változattermék. Csak a változatterméknek van SKU-ja, a termékmodellnek kódja van. A Pimcore a classification store-ral más utat jár: adattípusos kulcsok csoportokba rendezve, a csoportok objektumokhoz rendelve, opcionális lokalizációval, és mennyiségi értékekkel, amelyek egy számot egy mértékegységgel párosítanak.",{"type":129,"content":185},[186],"Sok műszaki B2B-katalógus emellett ETIM szerint is osztályozott; a kiadó szerint ez a műszaki termékek nemzetközi osztályozási szabványa: osztályok egységes jellemzőlistával és előre meghatározott értékekkel, 17 nyelven. Az ETIM 10.0 2024 decemberében jelent meg, IXF, azaz XML formátumban. Ha a beszállítóid ETIM-adatot szállítanak, már van egy márkákon átívelő attribútumszókészleted, ami a szűrőkhöz aranyat ér.",{"type":147,"level":148,"id":101,"text":102},{"type":129,"content":189},[190],"A leghasznosabb tervezési lépés az, hogy a várható kérdéseket aszerint rendezed, milyen visszakeresést igényelnek. Egy B2B-katalógusnál egészen más keverékre számíts, mint egy támogatási wikinél: sok kérdés kikeresés vagy feltétel, kevesebb a nyitott kérdés.",{"type":192,"head":193,"rows":200},"table",[194,196,198],[195],"Kérdés",[197],"Példa",[199],"Útvonal",[201,208,215,222,229,236],[202,204,206],[203],"Azonosító",[205],"Van 4711-050?",[207],"Pontos keresés SKU-ra, EAN-ra, beszállítói számra",[209,211,213],[210],"Specifikáció",[212],"M8 rozsdamentes csavar, legalább 50 mm",[214],"Strukturált szűrő, utána rangsor",[216,218,220],[217],"Összehasonlítás",[219],"Mi a különbség az X200 és az X300 között?",[221],"Mindkét rekord lekérése, attribútumok összevetése",[223,225,227],[224],"Leíró",[226],"Valami kültérre, sós víz közelébe",[228],"Hibrid keresés a szövegen",[230,232,234],[231],"Kapcsolat",[233],"Melyik anya illik ehhez a csavarhoz?",[235],"PIM-kapcsolatok, utána kikeresés",[237,239,241],[238],"Kereskedelmi",[240],"Mennyibe kerül nekem, van raktáron?",[242],"Élő hívás a webshophoz vagy ERP-hez, soha nem az index",{"type":129,"content":244},[245],"Az Amazon Shopping Queries adathalmaza jó hivatkozási alap a fogalmakhoz. Nagyjából 130 000 lekérdezése és 2,6 millió emberi relevanciaítélete minden lekérdezés–termék párt így címkéz: Exact (a lekérdezés minden feltételét teljesíti), Substitute (néhány szempontnak nem felel meg, de helyettesítheti), Complement (nem teljesíti a lekérdezést, de egy pontos találattal együtt használható) vagy Irrelevant. Egy katalógusasszisztensnek tudnia kell, a négy közül melyiket kínálja, és ki is kell mondania: a helyettesítő termék pontos találatként való bemutatása a klasszikus módja annak, hogy elveszítsd egy B2B-beszerző bizalmát.",{"type":147,"level":148,"id":104,"text":105},{"type":129,"content":248},[249],"Az első ösztön a SKU-nként egy dokumentum. Változatokat tartalmazó katalógusoknál ez a szövegindexben rosszul működik. Ugyanannak a csavarnak negyven hossza osztozik a néven, a leíráson és a legtöbb attribútumon, így egy leíró lekérdezés egyetlen termék közel azonos másolataival tölti meg a legjobb találatokat, és minden alternatívát kiszorít. Negyven szinte azonos szöveg beágyazása ráadásul tárhelyet és indexelési időt visz el haszon nélkül.",{"type":129,"content":251},[252],"Jobban működik, ha a rekordot kettéválasztod. A szövegindexbe termékmodellenként egy dokumentum kerül, a közös attribútumokból és a változattengelyek tömör összefoglalójából, például: hossz 20–120 mm, rozsdamentes A2 és A4. A változatattribútumok strukturált payloadként élnek, vagy ugyanazon a ponton a vektortárban, vagy külön táblában a modellkód szerint. A visszakeresés jelentés alapján megtalálja a modellt, a változatot pedig szűrő vagy kikeresés választja ki. A változat nélküli egyszerű termékek önmaguk modelljei.",{"type":254,"attrs":255,"inner":259,"caption":260},"diagram",{"viewBox":256,"role":257,"aria-labelledby":258},"0 0 720 170","img","pim1-t pim1-d","\u003Ctitle id=\"pim1-t\">PIM-rekord szétválasztása visszakereséshez\u003C\u002Ftitle>\u003Cdesc id=\"pim1-d\">A PIM-exportot termékmodellenként és nyelvenként szöveggé sorosítjuk a hibrid indexhez, a változatattribútumok mértékegységgel strukturált tárba kerülnek. Kérdéskor egy elemző kivonja a szűrőket, a szűrt hibrid keresés jelölteket talál, a válasz pedig élő árakkal hivatkozik a SKU-kra.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"pim1-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\">PIM-export\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">értékek, változatok\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#pim1-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\">Sorosító\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">címkék + egységek\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#pim1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Szövegindex\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">modellenként egy\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#pim1-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\">Payload\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">típusos változatok\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#pim1-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\">Válasz\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">SKU + élő ár\u003C\u002Ftext>",[261],"A szöveg arra felel, mi a termék; a szerkezet arra, melyik változat.",{"type":147,"level":148,"id":107,"text":108},{"type":129,"content":264},[265,266,269,270,273],"A sorosító a katalógus-RAG-folyamat leginkább alábecsült része. Az embedding-modellek és az LLM-ek címkéket olvasnak, nem kódokat: a ",{"tag":153,"children":267},[268],"stainless_a2"," és a ",{"tag":153,"children":271},[272],"MILLIMETER"," keveset mond, az Anyag: rozsdamentes acél A2 és a Hossz: 50 mm sokat. Néhány szabály, amit alkalmazok:",{"type":275,"items":276},"list",[277,283,288,293,298],[278,282],{"tag":279,"children":280},"strong",[281],"Minden kódot oldj fel a címkéjére"," a célnyelven: attribútumnevek, választható opciók, mértékegységek a szimbólumukon keresztül.",[284,287],{"tag":279,"children":285},[286],"Válassz egy csatornát."," A csatornafüggő értékek csatornánként eltérnek; a webshop-scope-ot indexeld, ne a nyomtatott katalógus szövegét.",[289,292],{"tag":279,"children":290},[291],"Nyelvenként egy szöveg,"," kifejezett tartalék-szabállyal, hogy egy német lekérdezés véletlenül se találjon félig angol rekordot.",[294,297],{"tag":279,"children":295},[296],"Hagyd ki az üres és a belső attribútumokat:"," beszerzési árak, munkafolyamat-jelzők, importidőbélyegek. Zajt okoznak, és néha kiszivárognak.",[299,302],{"tag":279,"children":300},[301],"Az azonosítók a szövegbe is kerüljenek:"," a SKU, az EAN és a beszállítói szám a BM25-mezőbe való, mert a felhasználók bemásolják őket.",{"type":153,"code":304},"def serialize(model, variants, locale, labels, channel=\"ecommerce\"):\n    def val(values, code):\n        for v in values.get(code, []):\n            if v[\"locale\"] in (locale, None) and v[\"scope\"] in (channel, None):\n                d = v[\"data\"]\n                if isinstance(d, dict) and \"amount\" in d:      # metric value\n                    return f'{d[\"amount\"]} {d[\"symbol\"]}'\n                return labels.option(code, d, locale) if isinstance(d, str) else d\n        return None\n\n    lines = [f'# {val(model[\"values\"], \"name\")}']\n    for code in labels.common_attributes(model[\"family\"]):\n        v = val(model[\"values\"], code)\n        if v not in (None, \"\", []):\n            lines.append(f'{labels.attribute(code, locale)}: {v}')\n    # summarise the variant axes instead of repeating every variant\n    for axis in labels.axes(model[\"family_variant\"]):\n        seen = sorted({str(val(x[\"values\"], axis)) for x in variants})\n        lines.append(f'{labels.attribute(axis, locale)} (variants): {\", \".join(seen)}')\n    lines.append(\"SKUs: \" + \" \".join(x[\"identifier\"] for x in variants))\n    return \"\\n\".join(lines)",{"type":129,"content":306},[307],"Hogy az attribútumokat kulcs–érték sorokként, Markdown-táblázatként vagy JSON-ként jeleníted meg, azt tesztelni kell, nem hinni. A Table Meets LLM tanulmány szerint az LLM-ek teljesítménye táblázatos feladatokon a bemeneti döntésektől, például a formátumtól és a tartalom sorrendjétől függően változott; a saját embedding-modelled és a saját lekérdezéseid döntik el, melyik formátum keresődik vissza a legjobban. Én címke: érték sorokkal kezdek, mert ezek a BM25-nek, az embeddingeknek és az LLM-nek egyaránt jók.",{"type":147,"level":148,"id":110,"text":111},{"type":129,"content":310},[311,312,315,316,319,320,323,324,327],"Egy sűrű embedding a szöveget egy irányba tömöríti, amely azt ragadja meg, miről szól. Nem arra készült, hogy megkülönböztesse a 48 mm-t az 50 mm-től, vagy tudja, hogy a legalább 50 kizárja a 48-at. A BM25 egyezik az 50-es tokennel, de a tartományokról és a mértékegységekről ő sem tud semmit. A feltételeket ezért ki kell vonni a kérdésből, és szűrőként típusos mezőkre kell alkalmazni. A vektoradatbázisok ezt közvetlenül támogatják; a Qdrantban egy ",{"tag":153,"children":313},[314],"must"," záradék ",{"tag":153,"children":317},[318],"range"," feltétellel és ",{"tag":153,"children":321},[322],"gte"," vagy ",{"tag":153,"children":325},[326],"lte"," határokkal megoldja, a dokumentáció pedig minden szűrt mezőre payload-indexet javasol.",{"type":153,"code":329},"{\n  \"query\": \"\u003Cembedding of: stainless hex screw for outdoor use>\",\n  \"filter\": {\n    \"must\": [\n      { \"key\": \"thread\",        \"match\": { \"value\": \"M8\" } },\n      { \"key\": \"material\",      \"match\": { \"any\": [\"stainless_a2\", \"stainless_a4\"] } },\n      { \"key\": \"length_mm\",     \"range\": { \"gte\": 50 } },\n      { \"key\": \"locale\",        \"match\": { \"value\": \"de_DE\" } }\n    ]\n  },\n  \"limit\": 20\n}",{"type":129,"content":331},[332,333,337],"A szűrők kivonása egy kis LLM-hívás strukturált kimenettel: add át a modellnek a szűrhető attribútumok listáját típussal, megengedett opciókkal és kanonikus mértékegységgel, és kérj vissza egy JSON-objektumot. Utána validáld kódban. Az ismeretlen attribútumkódok kiesnek, az opcióértékeknek létezniük kell, a mértékegységeket pedig összehasonlítás előtt normalizálod, így az 5 cm-ből 50 mm lesz. Ez ugyanaz a fegyelem, mint a ",{"tag":136,"to":334,"children":335},"\u002Fblog\u002Ftext-to-sql-llm-guardrails",[336],"Text-to-SQL korlátokkal"," cikkben: a modell javasol, a séma dönt. Ha egy feltételt nem lehet leképezni, maradjon a szöveges lekérdezésben ahelyett, hogy csendben eltűnne, és mondd meg a felhasználónak, mely szűrők futottak.",{"type":339,"variant":340,"title":341,"body":342},"callout","warn","Az üres attribútum nem nem",[343],[344],"A katalógusadatok hiányosak, a ritkán keresett cikkeknél gyakran nagyon. Ha az asszisztens korrózióállósági osztály nélküli rekordot kap, és megkérdezik, alkalmas-e a csavar sós vízhez, az őszinte válasz az, hogy az adatok ezt nem mondják meg. A hiányzó értékeket add át kifejezetten nincs megadva jelöléssel, utasítsd a modellt, hogy soha ne következtessen műszaki értékre a terméknévből vagy hasonló termékekből, és teszteld olyan kérdésekkel, amelyekről tudod, hogy üres attribútumot érintenek. Egy hibás teherbírási adat B2B-ben felelősségi kérdés, nem UX-hiba.",{"type":147,"level":148,"id":113,"text":114},{"type":129,"content":347},[348,349,353],"Az árak, a készlet és a szállítási határidők. B2B-webshopokban az ár gyakran ügyfélspecifikus, szerződéses árakkal, sávokkal és kedvezményekkel, a készlet pedig percről percre változik. Ezeknek az értékeknek az indexpillanatképe eleve hibás, és rosszabb esetben az egyik ügyfélnek a másik feltételeit mutatja. Ne kerüljenek se a szövegbe, se a payloadba. Ha a válaszhoz kellenek, az asszisztens a webshop ár- és elérhetőségi végpontját hívja a bejelentkezett ügyfél munkamenetével, ugyanúgy, ahogy a kirakat teszi. Ennek az eszközoldalát a ",{"tag":136,"to":350,"children":351},"\u002Fblog\u002Fai-assistant-b2b-shop-customer-support",[352],"MI-asszisztens B2B-webshop ügyfélszolgálathoz"," cikkben írtam le.",{"type":129,"content":355},[356],"A többinél a frissesség szinkronizálási kérdés. Sorosítsd és ágyazd be újra a termékmodellt, ha bármely közös attribútuma vagy címkéje változik, és csak a payloadot frissítsd, ha egy változatattribútum változik; ez olcsó, mert nincs benne embedding. Egy megváltozott opciócímke, például egy németül átnevezett anyag, minden modellt érint, amely használja, ezért a változásérzékelést a sorosított szöveg hash-ére alapozd, ne csak a PIM módosítási időbélyegére.",{"type":147,"level":148,"id":116,"text":117},{"type":129,"content":359},[360,361,365],"A katalógusadat gyakran jobban le van fordítva, mint bármelyik wiki, mert a PIM attribútumonként kikényszeríti a fordítást. Használd ki: nyelvenként egy sorosított szöveg, lekérdezéskor nyelv szerint szűrve, dokumentált tartalékkal hiányzó fordítás esetére. Az opciók és a mértékegységek a payloadban nyelvfüggetlenek, így a szűrők németül, angolul és magyarul ugyanúgy működnek, és csak a szövegindex nyelvspecifikus. A nyelveken átívelő visszakeresés általános kompromisszumait a ",{"tag":136,"to":362,"children":363},"\u002Fblog\u002Fmultilingual-rag-german-hungarian",[364],"többnyelvű RAG német és magyar nyelvre"," cikk tárgyalja.",{"type":129,"content":367},[368],"Az olyan osztályozások, mint az ETIM, egy második előnnyel is járnak. Mivel egy osztálynak egységes jellemzőlistája van, a szűrőkivonó prompt osztályonként építhető fel: ha a kérdés mondjuk egy csavarosztályhoz kötődik, csak annak jellemzői kerülnek szűrőként a modell elé. Így a prompt rövid marad, a kivont szűrők pedig érvényesek, még olyan beszállítóknál is, akiknek saját attribútumnevei eltérnek.",{"type":147,"level":148,"id":119,"text":120},{"type":129,"content":371},[372,373,365],"A katalógus-RAG-nek van egy előnye a dokumentum-RAG-gel szemben: az alapigazság egyértelmű. Minden tesztlekérdezéshez leírhatod a helyes SKU-kat vagy termékmodelleket, így a visszakeresés értékelése azonosítókon mért találati arány és recall@k lesz, nem szövegrészek megítélése. A készletet keresési naplókból és értékesítési kérdésekből építem fel, a fenti táblázat kérdéstípusai szerint csoportosítva, és az elvárt eredményeket ESCI-kategóriákkal címkézem, hogy egy helyettesítő ne számítson találatnak. Magukat a metrikákat a ",{"tag":136,"to":374,"children":375},"\u002Fblog\u002Frag-evaluation-metrics",[376],"RAG értékelése",{"type":275,"items":378},[379,384,389,394],[380,383],{"tag":279,"children":381},[382],"Azonosító-lekérdezések:"," 100% pontos találatot várj; ami ennél kevesebb, az tokenizáló- vagy mezőleképezési hiba, nem modellprobléma.",[385,388],{"tag":279,"children":386},[387],"Specifikációs lekérdezések:"," a kivont szűrőt vesd össze egy kézzel írt elvárt szűrővel, mielőtt az eredményeket nézed.",[390,393],{"tag":279,"children":391},[392],"Hiányzó adatra vonatkozó lekérdezések:"," a helyes válasz a nincs megadva; a kitalált értékek hibának számítanak.",[395,398],{"tag":279,"children":396},[397],"Kereskedelmi lekérdezések:"," ellenőrizd, hogy az ár az élő hívásból jön, két eltérő feltételű ügyféllel tesztelve.",{"type":147,"level":148,"id":122,"text":123},{"type":129,"content":401},[402,403,407],"A sorosítóval és az azonosítós útvonallal kezdj, mert olcsók, és a legkínosabb hibákat tüntetik el. Utána add hozzá a szűrőkivonást ahhoz az öt–tíz attribútumhoz, amely a valódi kérdésekben a leggyakrabban szerepel, nem mindhez. Csak ezután hangold a szövegindexet, a chunkméreteket és a rerankereket. Ha a katalógusod strukturált adatokkal is megjelenik, ugyanaz az attribútumleképezés mindkettőt táplálhatja, ahogy a ",{"tag":136,"to":404,"children":405},"\u002Fblog\u002Fschema-org-structured-data-b2b-shop",[406],"Schema.org strukturált adatok B2B-webshopokhoz"," cikkben leírtam. A mögöttes minta egyszerű: a PIM már elvégezte a termékismeret strukturálásának nehéz munkáját, egy jó katalógusasszisztens pedig ezt a szerkezetet egészen a válaszig megőrzi.",{"type":147,"level":148,"id":125,"text":126},{"type":275,"ordered":410,"items":411},true,[412,416,419,422,425,428,431,434,437],[413],{"tag":414,"href":39,"children":415},"a",[38],[417],{"tag":414,"href":42,"children":418},[41],[420],{"tag":414,"href":45,"children":421},[44],[423],{"tag":414,"href":35,"children":424},[47],[426],{"tag":414,"href":50,"children":427},[49],[429],{"tag":414,"href":53,"children":430},[52],[432],{"tag":414,"href":56,"children":433},[55],[435],{"tag":414,"href":59,"children":436},[58],[438],{"tag":414,"href":62,"children":439},[61],[441,516,573,631],{"slug":442,"published":5,"minutes":443,"category":7,"tags":444,"keywords":449,"about":462,"sources":472,"cover":509,"og":510,"expertise":511,"locales":512,"lang":69,"title":513,"description":514,"coverAlt":515},"embedding-model-selection-2026",9,[445,9,446,447,448],"Embeddings","MTEB","Vector search","Model selection",[450,451,452,453,454,455,456,457,458,459,460,461],"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",[463,466,469],{"name":464,"url":465},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":467,"url":468},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":470,"url":471},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[473,476,479,482,485,488,491,494,497,500,503,506],{"title":474,"url":475},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":477,"url":478},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":480,"url":481},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":483,"url":484},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":486,"url":487},"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":489,"url":490},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":492,"url":493},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":495,"url":496},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":498,"url":499},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":501,"url":502},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":504,"url":505},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":507,"url":508},"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","ai-engineer",[67,68,69],"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":517,"published":5,"minutes":6,"category":7,"tags":518,"keywords":522,"about":534,"sources":542,"cover":567,"og":568,"expertise":511,"locales":569,"lang":69,"title":570,"description":571,"coverAlt":572},"contextual-retrieval-late-chunking",[9,519,445,520,521],"Chunking","Contextual retrieval","Late chunking",[523,524,525,526,527,528,529,530,531,532,533],"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",[535,536,539],{"name":31,"url":32},{"name":537,"url":538},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":540,"url":541},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[543,546,549,552,555,558,561,564],{"title":544,"url":545},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":547,"url":548},"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":550,"url":551},"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":553,"url":554},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":556,"url":557},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":559,"url":560},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":562,"url":563},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":565,"url":566},"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",[67,68,69],"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":574,"published":5,"minutes":443,"category":7,"tags":575,"keywords":579,"about":592,"sources":600,"cover":625,"og":626,"expertise":511,"locales":627,"lang":69,"title":628,"description":629,"coverAlt":630},"rag-access-control-permissions",[9,576,577,578,447],"Access control","Security","Multi-tenancy",[580,581,582,583,584,585,586,587,588,589,590,591],"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",[593,596,599],{"name":594,"url":595},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":597,"url":598},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":31,"url":32},[601,604,607,610,613,616,619,622],{"title":602,"url":603},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":605,"url":606},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":608,"url":609},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":611,"url":612},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":614,"url":615},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":617,"url":618},"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":620,"url":621},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":623,"url":624},"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",[67,68,69],"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":632,"published":5,"minutes":633,"category":7,"tags":634,"keywords":639,"about":650,"sources":658,"cover":692,"og":693,"expertise":511,"locales":694,"lang":69,"title":695,"description":696,"coverAlt":697},"conversational-search-query-rewriting",12,[635,636,9,637,638],"Conversational search","Query rewriting","HyDE","E-commerce",[640,641,642,643,644,645,646,647,648,649],"conversational search query rewriting","coreference resolution search query","HyDE hypothetical document embeddings","multi-query expansion RAG","LLM filter extraction","B2B product search assistant","conversational product search","query rewriting latency","recall@k evaluation","standalone query generation",[651,654,657],{"name":652,"url":653},"Query expansion","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FQuery_expansion",{"name":655,"url":656},"Coreference","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCoreference",{"name":537,"url":538},[659,662,665,668,671,674,677,680,683,686,689],{"title":660,"url":661},"Gao et al.: Precise Zero-Shot Dense Retrieval without Relevance Labels, ACL 2023","https:\u002F\u002Faclanthology.org\u002F2023.acl-long.99\u002F",{"title":663,"url":664},"UTokyo-Hitotsubashi at TREC 2025 RAG Track: HyDE-Enhanced Sparse-Dense Retrieval Fusion with LLM Reranking","https:\u002F\u002Ftrec.nist.gov\u002Fpubs\u002Ftrec34\u002Fpapers\u002FUTokyo.rag.pdf",{"title":666,"url":667},"Hypothetical Documents or Knowledge Leakage? Rethinking LLM-based Query Expansion","https:\u002F\u002Faclanthology.org\u002F2025.findings-acl.980.pdf",{"title":669,"url":670},"ConvSearch-R1: Enhancing Query Reformulation for Conversational Search with Reasoning via Reinforcement Learning","https:\u002F\u002Faclanthology.org\u002F2025.emnlp-main.1349\u002F",{"title":672,"url":673},"CFDA and CLIP at TREC iKAT 2025: Query Reformulation and Rank Fusion","https:\u002F\u002Farxiv.org\u002Fabs\u002F2509.15588",{"title":675,"url":676},"MiniELM: A Lightweight and Adaptive Query Rewriting Framework for E-Commerce Search Optimization","https:\u002F\u002Faclanthology.org\u002F2025.findings-acl.363\u002F",{"title":678,"url":679},"Microsoft Learn: Rewrite queries with semantic ranker in Azure AI Search (preview)","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsemantic-how-to-query-rewrite",{"title":681,"url":682},"Microsoft Learn: Agentic retrieval overview in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fagentic-retrieval-overview",{"title":684,"url":685},"Microsoft Tech Community: Generative query rewriting and a new semantic ranker","https:\u002F\u002Ftechcommunity.microsoft.com\u002Fblog\u002Fazure-ai-services-blog\u002Fraising-the-bar-for-rag-excellence-query-rewriting-and-new-semantic-ranker\u002F4302729\u002F",{"title":687,"url":688},"Amazon Bedrock User Guide: Configure and customize queries and response generation","https:\u002F\u002Fdocs.aws.amazon.com\u002Fbedrock\u002Flatest\u002Fuserguide\u002Fkb-test-config.html",{"title":690,"url":691},"Ragas documentation: List of available metrics","https:\u002F\u002Fdocs.ragas.io\u002Fen\u002Fstable\u002Fconcepts\u002Fmetrics\u002Favailable_metrics\u002F","\u002Fimages\u002Fblog\u002Fconversational-search-query-rewriting\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fconversational-search-query-rewriting\u002Fog.jpg",[67,68,69],"Lekérdezés-újraírás beszélgetésalapú kereséshez: kontextus, HyDE és szűrők","Hogyan írjuk át a követő kérdéseket egy B2B webshop-asszisztensben: korreferencia, HyDE, több lekérdezés, szűrők, latencia és kiértékelés.","Beszédbuborék, átírt kártya, majd tölcsér az eredmények fölött, nyilakkal összekötve.",1792245343939]