[{"data":1,"prerenderedAt":747},["ShallowReactive",2],{"blog-visual-search-shop-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":34,"cover":71,"og":72,"expertise":73,"locales":74,"lang":77,"title":78,"description":79,"coverAlt":80,"metaTitle":81,"takeaways":82,"faq":88,"toc":101,"blocks":129,"others":475},"visual-search-shop","2026-10-05",11,"web",[9,10,11,12,13],"Visual search","Image embeddings","OCR","Part numbers","Hybrid search",[15,16,17,18,19,20,21,22,23,24],"visual search for B2B e-commerce","image search product catalog","CLIP SigLIP image embeddings","photo to part number","visual search shop implementation","multimodal embeddings shop","spare part identification AI","OCR part number from photo","image similarity search pgvector","visual add to cart",[26,28,31],{"name":9,"url":27},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVisual_search",{"name":29,"url":30},"Optical character recognition","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOptical_character_recognition",{"name":32,"url":33},"Contrastive learning","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContrastive_learning",[35,38,41,44,47,50,53,56,59,62,65,68],{"title":36,"url":37},"CLIP: Learning Transferable Visual Models From Natural Language Supervision (2021)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2103.00020",{"title":39,"url":40},"Hugging Face: SigLIP 2 release (2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Fsiglip2",{"title":42,"url":43},"MIEB: Massive Image Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.10471",{"title":45,"url":46},"jina-clip-v2 model card (CC-BY-NC-4.0)","https:\u002F\u002Fhuggingface.co\u002Fjinaai\u002Fjina-clip-v2",{"title":48,"url":49},"pgvector: README","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":51,"url":52},"Spryker docs: Search by Image","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fpbc\u002Fall\u002Fai-commerce\u002Flatest\u002Fsearch-by-image",{"title":54,"url":55},"Spryker docs: Visual Add to Cart","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fdg\u002Fdev\u002Fai\u002Fai-commerce\u002Fvisual-add-to-cart\u002Fvisual-add-to-cart",{"title":57,"url":58},"Google Cloud: Vision API pricing","https:\u002F\u002Fcloud.google.com\u002Fvision\u002Fpricing",{"title":60,"url":61},"Voyage AI: pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":63,"url":64},"python-stdnum: EAN, UPC and GTIN module","https:\u002F\u002Farthurdejong.org\u002Fpython-stdnum\u002Fdoc\u002F1.20\u002Fstdnum.ean.html",{"title":66,"url":67},"Elasticsearch: fuzzy query","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Freference\u002Fquery-languages\u002Fquery-dsl\u002Fquery-dsl-fuzzy-query",{"title":69,"url":70},"SymSpell (GitHub)","https:\u002F\u002Fgithub.com\u002Fwolfgarbe\u002FSymSpell","\u002Fimages\u002Fblog\u002Fvisual-search-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvisual-search-shop\u002Fog.jpg","b2b-ecommerce-developer",[75,76,77],"en","de","hu","Vizuális keresés B2B webshopokban: képbeágyazások, cikkszámok és őszinte korlátok","Vizuális keresés B2B webshopban: képbeágyazások, OCR a cikkszámokhoz, kép-szöveg keresés, szűrők, költségek és saját fotókon mért értékelés.","Kamera lefényképez egy alkatrészt, és megtalálja az egyező csempét.","Vizuális keresés B2B webshopokban · Balázs Csorba",[83,84,85,86,87],"Egy fotó három különböző feladatot takar: egy címke vagy cikkszám fotóját, egy olyan alkatrész fotóját, amelynek a neve ismeretlen, és egy kopott alkatrészt, amelyhez átnézett keresés kell.","A képbeágyazások jól rögzítik a megjelenést és a típust, a pontos karaktereket viszont rosszul, ezért a címkefotóhoz a cikkszótár által korlátozott OCR kell.","A kép-szöveg útvonal a webshop meglévő szövegkeresését használja, és gyakran a legolcsóbb első kiadás; a levezetett kifejezés maradjon látható és szerkeszthető.","A tulajdonságszűrők és a pontos kódokra épülő kulcsszavas egyezés többet javít a találatok minőségén, mint a beágyazási modell cseréje.","Az indulás előtt saját, címkézett fotókon mérje feladatonként a top-1, top-5, recall@10 értéket és a találat nélküli arányt, negatív halmazzal együtt.",[89,92,95,98],{"q":90,"a":91},"Azonosíthat-e a vizuális keresés B2B alkatrészt fotó alapján?","Néha. Egy olvasható címkét OCR-rel ki lehet olvasni, és a cikkszótárral egyeztetni, ez jól működik, ha a szótár teljes. Egy címke nélküli alkatrész fotója általában hasonló termékek csoportjára szűkíti a keresést, a pontos cikkszámot viszont továbbra is egy embernek kell megerősítenie.",{"q":93,"a":94},"Elegendőek a CLIP vagy SigLIP modellek a cikkszámokhoz?","Nem. A kontrasztív kép-szöveg modellek a megjelenést és a durva jelentést kódolják. A pontos karaktereket, darabszámokat vagy sorozatszámokat nem olvassák megbízhatóan, ezért a szöveghez OCR kell, a beágyazást pedig hasonlósági jelként kezelje.",{"q":96,"a":97},"Olcsóbb-e a kép-szöveg keresés, mint a képbeágyazás?","Ez a forgalomtól és a katalógus méretétől függ. A katalógus beágyazása egyszeri költség, plusz az újraszámítás modellcserénél, míg a vizuális nyelvi modell hívása minden vevői fotónál megtörténik. Az egy sikeres azonosításra jutó költséget hasonlítsa össze, ne az egy hívásra jutót.",{"q":99,"a":100},"Küldhetők-e vevői fotók harmadik féltől származó MI-szolgáltatásnak?","Mielőtt bármelyik kép elhagyja a rendszereit, ellenőrizze a szolgáltató adatfeldolgozási feltételeit, az adatvédelmi tájékoztatóját és az ügyfelekkel kötött szerződéseit. A fotókon személyek, dokumentumok vagy bizalmas berendezések szerepelhetnek, ezért távolítsa el a metaadatokat, és korlátozza a megőrzési időt.",[102,105,108,111,114,117,120,123,126],{"id":103,"title":104},"answer-what-visual-search-is-good-for","Mire jó a vizuális keresés egy B2B webshopban?",{"id":106,"title":107},"how-image-embeddings-work","Hogyan teszi kereshetővé a fotót a képbeágyazás?",{"id":109,"title":110},"the-vlm-shortcut-image-to-text-query","Egyszerűbb-e a kép-szöveg keresés, mint a beágyazás?",{"id":112,"title":113},"ocr-of-labels-and-part-numbers","Hogyan olvasható ki egy címke vagy cikkszám egy fotóról?",{"id":115,"title":116},"hybrid-retrieval-and-reranking","Hogyan kombinálhatók a képi találatok szöveggel és szűrőkkel?",{"id":118,"title":119},"cost-and-evaluation","Mennyibe kerül, és hogyan mérhető?",{"id":121,"title":122},"when-not-to-build-it","Mikor ne építsen vizuális keresést?",{"id":124,"title":125},"implementation-checklist","Hogyan néz ki egy megvalósítási ellenőrzőlista?",{"id":127,"title":128},"sources","Források",[130,139,158,161,164,167,224,225,237,244,247,261,262,268,271,277,283,286,287,294,305,306,309,313,320,323,325,328,329,336,348,351,352,363,366,369,370,373,421,428,436,437],{"type":131,"content":132},"paragraph",[133,134,138],"A ",{"tag":135,"children":136},"strong",[137],"vizuális keresés"," lehetővé teszi, hogy a vevő egy fotóval kezdjen gépelt lekérdezés helyett: egy adattábla képével, egy kopott alkatrész fotójával vagy egy bevásárlólista pillanatképével. B2B webshopban ez vonzó funkció, és túlzottan eladott is. Egy fotó nem egy probléma. A címke elsősorban katalógus-korlátos OCR-probléma, az ismeretlen alkatrész képi hasonlósági probléma, a kopott alkatrész pedig olyan keresés, amelyben a kép csak támpontot ad. Egyetlen modell sem kezeli jól mind a hármat, és ezek némelyikére a meglévő szövegkeresés a jobb eszköz.",{"type":131,"content":140},[141,142,147,148,152,153,157],"Ez a cikk a képi modalitást végigvezeti: mit igényel az egyes feladat, miben különbözik a képbeágyazás és a kép-szöveg keresés, hogyan olvashatók ki a cikkszámok egy fotóról, hogyan kombinálhatók a képi találatok szöveggel és szűrőkkel, mennyibe kerül, hogyan értékelhető, és mikor nem érdemes megépíteni. Ott folytatja, ahol a ",{"tag":143,"to":144,"children":145},"link","\u002Fblog\u002Fsemantic-product-search-b2b",[146],"szemantikus termékkeresés B2B-re"," cikk a szövegkeresésnél megáll, és feltételezi, hogy ismeri a ",{"tag":143,"to":149,"children":150},"\u002Fblog\u002Fembedding-model-selection-2026",[151],"beágyazási modell kiválasztását",". A vektortárolásról a ",{"tag":143,"to":154,"children":155},"\u002Fblog\u002Fpgvector",[156],"pgvector"," cikk szól. A platform- és árinformációk 2026 októberére vonatkoznak.",{"type":159,"level":160,"id":103,"text":104},"heading",2,{"type":131,"content":162},[163],"A vizuális keresés három feladatnál térül meg. A vevő lefényképez egy címkét vagy adattáblát, és a pontos cikkszámra van szüksége. A vevő lefényképez egy alkatrészt, amelynek nem ismeri a nevét, és hasonló termékeket keres. Egy helyszíni szerelő lefényképez egy kopott vagy törött alkatrészt, és azt a pótalkatrészt keresi, amelyhez tartozik. Mindegyik feladat más jelzésre épül: az elsőnél karakterekre, a másodiknál alakra és megjelenésre, a harmadiknál kontextusra és pótalkatrész-katalógusra.",{"type":131,"content":165},[166],"A rövid válasz az, hogy a vizuális keresés a címke- és az ismeretlen alkatrész feladatára éri meg, és csak akkor, ha a gépelt keresés már jól működik. Cikkszám helyettesítésére gyenge. Egy kopott csapágy fotóján ritkán látszanak azok a részletek, amelyek két szinte azonos méretet megkülönböztetnek, ezért a találati listánál egy embernek kell megerősítenie az egyezést, és ezt az oldalon az üzletnek ki kell mondania.",{"type":168,"head":169,"rows":178},"table",[170,172,174,176],[171],"Feladat",[173],"Fő módszer",[175],"Elég a szövegút?",[177],"Mérendő mutató",[179,188,197,206,215],[180,182,184,186],[181],"címke- vagy adattábla-fotó",[183],"OCR, majd illesztés a cikkszótárral",[185],"gyakran, ha a gépelt számok hibatűrő illesztést kapnak",[187],"pontos egyezési arány OCR után",[189,191,193,195],[190],"egész alkatrész, név ismeretlen",[192],"képbeágyazás és vektoros keresés",[194],"nem; itt ad a kép többletet",[196],"top-5 és recall@10",[198,200,202,204],[199],"kopott vagy sérült alkatrész",[201],"kép-szöveg támpont, majd átnézett keresés",[203],"nem; a kép csak támpont",[205],"megerősített találati arány",[207,209,211,213],[208],"bevásárlólista- vagy kosárfotó",[210],"látómodell kinyeri a sorokat, katalógusillesztés soronként",[212],"részben",[214],"helyesen kitöltött sorok",[216,218,220,222],[217],"vonalkódos csomagolás",[219],"vonalkód-dekódolás és GTIN-ellenőrzés",[221],"igen; a vonalkód-dekóder minden modellnél jobb",[223],"dekódolási sikerarány",{"type":159,"level":160,"id":106,"text":107},{"type":131,"content":226},[227,228,232,233,236],"A képbeágyazó modell egy képet vektorra, a szöveget pedig ugyanabban a térben lévő vektorokra képez le, így egy fotó koszinuszhasonlósággal összevethető a termékvektorokkal. A jelenlegi lehetőségek többsége kontrasztív előtanításból származik. A CLIP azt tanulta meg, hogy melyik képaláírás melyik képhez tartozik, az internetről gyűjtött 400 millió kép-szöveg párral. Zero-shot átvitelben az eredeti ResNet-50 szintjét érte el az ImageNeten úgy, hogy az ImageNet 1,28 millió tanítópéldájából egyet sem használt fel (",{"tag":229,"href":37,"children":230},"a",[231],"Radford és munkatársai","). A SigLIP 2 megtartja ezt a megközelítést, és szemantikai megértésre, lokalizációra és sűrű jellemzőkre vonatkozó célokat ad hozzá. Többnyelvű családként jelent meg, 86 millió és 1 milliárd paraméter között, dinamikus felbontású változattal (",{"tag":229,"href":40,"children":234},[235],"Hugging Face",").",{"type":131,"content":238},[239,240,243],"Egyetlen modell sem nyer mindenhol. A MIEB 38 nyelvet, nyolc kategóriába sorolt 130 feladatot és 50 modellt fed le, és azt állapítja meg, hogy egyetlen módszer sem dominál minden feladatkategóriában, bizonyos területeken pedig egyértelmű gyengeségei vannak (",{"tag":229,"href":43,"children":241},[242],"MIEB","). Saját termékein teszteljen, ne a ranglista győztesét válassza.",{"type":131,"content":245},[246],"A tér a durva megjelenést és a típust kódolja: az alakot, a színt, az anyagot, és azt, hogy valami csapágynak vagy tömlőcsatlakozónak látszik-e. A pontos karaktereket, darabszámokat vagy sorozatszámokat nem kódolja megbízhatóan. Egy csapágyról készült fotóra indított legközelebbi-szomszéd keresés vizuálisan hasonló, de más furatú csapágyat adhat vissza, és a távolság ezt nem árulja el. Ehhez a korláthoz kell tervezni, mert a finomhangolás nem szünteti meg.",{"type":131,"content":248},[249,250,254,255,258,259,236],"A folyamat rövid. Minden termékképet egyszer ágyazzon be, és a vektort tárolja együtt azzal a modellverzióval, amely előállította. Lekérdezéskor ágyazza be a vevői fotót, futtasson közelítő legközelebbi-szomszéd keresést, majd szűrjön. A PostgreSQL-ben a pgvector ",{"tag":251,"children":252},"code",[253],"vector"," és ",{"tag":251,"children":256},[257],"halfvec"," oszlopokat kínál HNSW és IVFFlat indexekkel. A README szerint a HNSW lekérdezési teljesítménye jobb az IVFFlat-énál, de lassabban épül fel és több memóriát használ (",{"tag":229,"href":49,"children":260},[156],{"type":159,"level":160,"id":109,"text":110},{"type":131,"content":263},[264,265,236],"Gyakran igen. A 2026-ban jól működő megoldás az, hogy a képből szöveget készít, és a webshop meglévő szövegkeresését használja. Egy vizuális nyelvi modell megnézi a fotót, és keresési kifejezést vagy terméknevet ad vissza, a többit a szokásos keresés intézi. A Spryker Search by Image is ezt a mintát követi. Elemzi a feltöltött fotót, keresési kifejezést von le, és alapértelmezésben a katalógus találati oldalára irányítja a vevőt, vagy az első illeszkedő termékoldalra. JPEG, PNG, WebP és GIF formátumot fogad el. A dokumentáció két esetet nevez meg: egy kopott vagy hibás alkatrész azonosítását gépeken a helyszínen, valamint termékek azonosítását, ha a címkék, vonalkódok vagy csomagolások hiányoznak vagy olvashatatlanok (",{"tag":229,"href":52,"children":266},[267],"Spryker",{"type":131,"content":269},[270],"A kompromisszum az, hogy a szöveges lépés örökli a szövegkeresés minden gyengeségét, és egy téves kifejezés a vevőnek nem ad látható jelzést. Mutassa meg a levezetett kifejezést, engedje a vevőnek szerkeszteni, és jelenítse meg a találatok mellett az illeszkedő kifejezést, hogy egy téves tipp egy kattintással javítható legyen.",{"type":131,"content":272},[273,274,276],"A Spryker Visual Add to Cart ugyanezt az elvet alkalmazza a gyorsrendelési oldalon lévő bevásárlólistára. A modell felismert termékeket és mennyiségeket ad vissza. Minden nevet konfigurálható szövegességi küszöbbel egyeztet a katalógussal, amelynek alapértéke 30% szóátfedés, az űrlap pedig SKU-kkal és mennyiségekkel töltődik ki. Az alapértékek JPEG vagy PNG, legfeljebb 10 MB és képenként 20 termék; a rendszerprompt a Back Office-ban szerkeszthető (",{"tag":229,"href":55,"children":275},[267],"). Először a küszöböt hangolja: túl alacsony esetben egy téves SKU kap mennyiséget, túl magas esetben a vevő találatlanok listáját látja.",{"type":278,"src":279,"alt":280,"wide":281,"caption":282},"image","\u002Fimages\u002Fblog\u002Fvisual-search-shop\u002Fdiagram-15.webp","Kép-szöveg lekérdezési útvonal Öt lépés balról jobbra: fotófeltöltés, ellenőrzés, egy látómodell, amely kifejezést vagy terméksorokat ad, a katalógusillesztés hasonlósági küszöbbel, majd a találatok vagy egy előre kitöltött gyorsrendelés.",true,"A kép-szöveg útvonal Spryker-dokumentáció szerint: a fotóból keresési kifejezés vagy terméksor lesz, a katalógusillesztés pedig eldönti a SKU-t.",{"type":131,"content":284},[285],"A vektorindexes változat a középső lépést beágyazási kereséssel helyettesíti. Mindkét változat ugyanabba a katalógusba és ugyanarra a találati oldalra fut, így a webshop többi része nem változik.",{"type":159,"level":160,"id":112,"text":113},{"type":131,"content":288},[289,290,293],"A karaktereket OCR-rel olvassa ki, de a nyers kimenetben ne bízzon vakon. A felhős OCR a leggyorsabb út a működő prototípushoz. A Google Cloud Vision képenként, funkciónként számláz: havi első 1000 egység ingyenes, utána 1,50 USD \u002F 1000 egység 5 millió egységig, e fölött 0,60 USD \u002F 1000, 2026 októberétől (",{"tag":229,"href":58,"children":291},[292],"Google Cloud","). Saját üzemeltetésű motor akkor érdemes, ha a fotók olyan adatot tartalmaznak, amelyet nem küldhet harmadik félnek, vagy ha a mennyiség miatt az egységárazás a rossz modell. A költség ilyenkor a fejlesztésbe és a GPU-időbe kerül át.",{"type":131,"content":295},[296,297,300,301,304],"A hibák kiszámíthatók. A betűtípusok összekeverik az O-t és a 0-t, az I-t és az 1-et, valamint a B-t és a 8-at. A domborított fémtáblák tükröződnek, a ferdén fotózott címkéről pedig a karakterlánc fele jön vissza. Két ellenőrzés segít. Ha a szám szabványos felépítésű, ellenőrizze: a GTIN ellenőrző számjegyet hordoz, a python-stdnum pedig az EAN, UPC és GTIN számítást valósítja meg (",{"tag":229,"href":64,"children":298},[299],"python-stdnum","). A gyártói cikkszámoknak általában nincs ellenőrző számjegyük, ezért a gyakorlati javítás a katalógussal való illesztés. A SymSpell rögzített szerkesztési távolságon belül végez szótári keresést, MIT licencű, így a saját alkatrészlistáján futtatható (",{"tag":229,"href":70,"children":302},[303],"SymSpell","). Adja vissza a legjobb jelölteket konfidenciaértékkel, és hagyja, hogy a vevő válasszon, ahelyett hogy az első tippet fogadná el.",{"type":159,"level":160,"id":115,"text":116},{"type":131,"content":307},[308],"A tisztán képi hasonlóság olyan dolgokat ad vissza, amelyek jól néznek ki, de nem vásárolhatók meg. A minőség fő eszköze a tulajdonságszűrő: kategória, menetszabvány, anyag, elérhetőség, jóváhagyott beszállító. A jelöltöket több jelzésből gyűjtse: a képvektorból, a begépelt szavakból képzett szövegvektorból és egy kulcsszavas indexből, a tulajdonságszűrőket pedig ugyanabban a lekérdezésben alkalmazza. A kulcsszavas egyezés azért fontos, mert egy pontos furatméret vagy szabványjel gyakran a döntő elem, amelyet a vektor elmos. Az alábbi két ág mutatja, hol találkozik a kép- és a szövegjelzés.",{"type":278,"src":310,"alt":311,"wide":281,"caption":312},"\u002Fimages\u002Fblog\u002Fvisual-search-shop\u002Fdiagram-22.webp","Két ág egy fotótól egy találati listáig A vevői fotó két ágon halad. Az OCR-ág kiolvassa a karaktereket, ellenőrzi őket, és a cikkszótárral egyezteti. A beágyazási ág kódolja a képet, átkeresi a vektorindexet, és szűrőket alkalmaz. Mindkét ág ugyanabba a találati listába táplál.","Két ág olvas egy fotót: az OCR-ág a karaktereket a cikkszótárral ellenőrzi, a beágyazási ág szűrőkkel keresi a vektorindexet, és mindkettő egy találati listába táplál.",{"type":131,"content":314},[315,316,319],"Ellenőrizze a modell licencét, mielőtt egy modell webshopba kerül. A jina-clip-v2 képes, többnyelvű modell, de CC-BY-NC-4.0 licenc alatt jelent meg, amely külön megállapodás nélkül nem engedi a kereskedelmi használatot (",{"tag":229,"href":46,"children":317},[318],"Jina AI","). Ugyanezen szállító multimodális újrarangsoroló modellje ugyanilyen licencet hordoz. Válasszon megengedő licencű modellt, vagy előbb kérjen írásos engedélyt.",{"type":131,"content":321},[322],"Multimodális újrarangsorolót a végére tegyen, ne az elejére. Az első szakasz legjobb 50 jelöltjét újra pontozza a fotóhoz képest, így költsége az 50-hez skálázódik, nem a katalógushoz. Mérje meg a címkézett halmazon, változtat-e a top-5-ön. Kis katalógusnál csak késleltetést adhat. Az alábbi lekérdezés az első szakaszt mutatja a szűrőkkel ugyanabban az utasításban.",{"type":251,"code":324},"-- Candidates by image vector and attribute filters; the reranker only sees the top 50\nSELECT p.sku, p.name, e.embedding \u003C=> $1::halfvec AS distance\nFROM product_image_embeddings AS e\nJOIN products AS p ON p.sku = e.sku\nWHERE e.model_version = $2\n  AND p.category_id = $3\n  AND p.is_orderable\n  AND p.thread_standard = $4          -- optional attribute filter\nORDER BY e.embedding \u003C=> $1::halfvec\nLIMIT 50;",{"type":131,"content":326},[327],"Teszteljen bekapcsolt szűrőkkel. Egy közelítő index szelektív szűrővel kombinálva kevesebb sort adhat vissza, mint amennyit a limit megenged, ezért a találatszámot és a recallt reális szűrőkombinációkon ellenőrizze, ne csak szűrés nélkül.",{"type":159,"level":160,"id":118,"text":119},{"type":131,"content":330},[331,332,335],"Egy fotó beágyazása olcsó, a nagyobb tétel a tárolás. A Voyage AI multimodális modelljei 2026 októberében millió szöveges tokenenként 0,12 USD, milliárd pixelenként 0,60 USD áron szerepelnek, az első 200 millió szöveges token és 150 milliárd pixel ingyenes. A 50 000 pixel alatti képeket 50 000 pixelként számlázzák, a 2 megapixel fölötti képeket pedig kicsinyítik (",{"tag":229,"href":61,"children":333},[334],"Voyage AI","). Egymillió, 1 megapixeles termékfotó nagyjából egymilliárd pixel, azaz körülbelül 0,60 USD a listaáron. Az egyszeri visszatöltés ezért kicsi a fejlesztési időhöz képest. A visszatérő költség a lekérdezési forgalom, valamint a modellcserénél szükséges újraszámítás.",{"type":131,"content":337},[338,339,341,342,344,345,347],"A tárolás számolás. A pgvector a ",{"tag":251,"children":340},[257]," értékeket 2 × dimenzió + 8 bájton, a ",{"tag":251,"children":343},[253]," értékeket 4 × dimenzió + 8 bájton tárolja (",{"tag":229,"href":49,"children":346},[156],"). Egymillió SKU 1152 dimenziós halfvec beágyazással az index előtt nagyjából 2,3 GB táblaadat. Ez számítás, nem mérés, ezért a saját indexméretét mérje meg. Modellverziónként tartson külön beágyazási táblát, hogy migráció közben két modellt futtathasson egymás mellett.",{"type":131,"content":349},[350],"Saját, címkézett fotókon értékeljen, ne nyilvános ranglistán. Nincs nyilvános benchmark ipari alkatrészkatalógusokra, és az adattáblák OCR-pontossága az adathalmazok között nagyon eltérő, ezért egy tanulmány száma nem vihető át a webshopjára. Gyűjtsön fotókészletet feladatonként, címkézze a helyes SKU-t, és külön jelentse feladatonként a top-1, top-5 és recall@10 értéket, a találat nélküli aránnyal együtt. Adjon hozzá negatív halmazt olyan termékek fotóiból, amelyek nincsenek a katalógusban. Az a keresés, amely mindig ad valamit, ezen a halmazon megbukik.",{"type":159,"level":160,"id":121,"text":122},{"type":131,"content":353},[354,355,358,359,362],"Először a szövegutat építse meg. A keresőmezőbe gépelt vagy beillesztett cikkszám hibatűrő illesztési probléma. Az Elasticsearch fuzzy lekérdezése már illeszt kifejezéseket Levenshtein-szerkesztési távolságon belül, a ",{"tag":251,"children":356},[357],"fuzziness: AUTO"," beállítással, valamint előtag- és bővítési korlátokkal (",{"tag":229,"href":67,"children":360},[361],"Elastic","). Adjon szinonimákat a régi és új cikkszámokhoz, rendes tulajdonságmodellt és keresési elemzést: a keresésből való kilépési arányt, a találat nélküli lekérdezéseket és az átfogalmazásokat. Ez a három jelentés megmutatja, hogy a képek egy valódi azonosítási hibát javítanának-e, vagy csak egy adathiányt.",{"type":131,"content":364},[365],"Hagyja ki a vizuális keresést, ha a találat nélküli lekérdezések többsége hiányzó termékekre vagy tulajdonságokra vonatkozik, mert egy modell sem talál olyan alkatrészt, amely nincs a katalógusban. Hagyja ki, ha a vevőknek ritkán van kéznél fotó, vagy ha a tipikus fotót gyenge fényben, olvasható címke nélkül készítenék telefonnal. Építse meg, ha a szövegút azonosításnál bizonyítottan elbukik, és a három feladat legalább egyike gyakori a forgalmában.",{"type":131,"content":367},[368],"A tanácsom, a Spryker- és Pimcore-katalógusokon szerzett munkám alapján, az, hogy cikkszám-toleranciával és szinonimákkal kezdjen, és a keresésből való kilépési arányt mérje, mielőtt bármilyen beágyazásba fektet. Egy gyenge katalógusra épülő képi funkció csak nehezebben láthatóvá teszi a gyengeséget.",{"type":159,"level":160,"id":124,"text":125},{"type":131,"content":371},[372],"Az alábbi listát tekintse egy első kiadás minimumának.",{"type":374,"ordered":281,"items":375},"list",[376,381,386,391,396,401,406,411,416],[377,380],{"tag":135,"children":378},[379],"Felvétel:"," képeket elfogadó fájlmező, feltöltés előtti előnézet és egyértelmű újrafotózási lehetőség.",[382,385],{"tag":135,"children":383},[384],"Szerveroldali ellenőrzés:"," a kiterjesztés helyett a valódi fájltípust nézze, korlátozza a méretet, és utasítsa el, amit a dekóder nem tud megnyitni.",[387,390],{"tag":135,"children":388},[389],"Metaadatok eltávolítása:"," távolítsa el az EXIF-adatokat, köztük a GPS-koordinátákat, mielőtt a fotó tárolásra vagy modellhez kerülne.",[392,395],{"tag":135,"children":393},[394],"Sor:"," a termékképeket háttérfeladatban indexelje, a vevői fotókat pedig ugyanezen a soron ágyazza be, ha a késleltetési keret engedi.",[397,400],{"tag":135,"children":398},[399],"Verziónált beágyazások:"," modellverziónként egy tábla, minden sorban a modell nevével, hogy a modellcsere visszatöltés legyen, ne átírás.",[402,405],{"tag":135,"children":403},[404],"Találat nélküli út:"," mutassa a levezetett kifejezést, kínáljon szövegmezőt, és egy kategóriaoldalra mutató linket üres rács helyett.",[407,410],{"tag":135,"children":408},[409],"Katalógus-korlátos OCR:"," az OCR-kimenetet konfidenciaértékekkel a cikkszótárral egyeztesse, és alacsony érték esetén soha ne tegye automatikusan a kosárba.",[412,415],{"tag":135,"children":413},[414],"Adatvédelmi átvilágítás:"," rögzítse, mit fotóznak a vevők, meddig őrzik a fotókat, és mely szolgáltatók kapják meg őket.",[417,420],{"tag":135,"children":418},[419],"Értékelési kapu:"," a címkézett halmaz a negatív esetekkel együtt minden modell- vagy küszöbváltoztatás előtt lefut.",{"type":422,"variant":423,"title":424,"body":425},"callout","warn","A vevői fotók ellenőrizetlen bemenetek",[426],[427],"A vevői fotó felhasználó által feltöltött tartalom, a képen pedig más személyek, dokumentumok vagy bizalmas berendezések is lehetnek. Kezelje úgy, mint bármely feltöltést, és ellenőrizze minden olyan szolgáltató feltételeit, amely megkapja, mielőtt az elhagyja az infrastruktúráját.",{"type":131,"content":429},[430,431,435],"A saját Nuxt-oldalamon, ahol LLM-funkciók futnak, a modellkimenetet ellenőrizetlen bemenetként kezelem: ellenőrzöm a formátumot, korlátozom a méretet, és mindig marad út a találat nélküli válaszhoz. Ugyanez a fegyelem vonatkozik a webshop kameragombjára. Ha B2B katalógus keresését tervezi, és azt szeretné, hogy a szövegút mérhető legyen, mielőtt képmodell kerül mellé, nézze meg a ",{"tag":143,"to":432,"children":433},"\u002Fexpertise\u002Fb2b-ecommerce-developer",[434],"B2B e-kereskedelmi munkámat",".",{"type":159,"level":160,"id":127,"text":128},{"type":374,"ordered":281,"items":438},[439,442,445,448,451,454,457,460,463,466,469,472],[440],{"tag":229,"href":37,"children":441},[36],[443],{"tag":229,"href":40,"children":444},[39],[446],{"tag":229,"href":43,"children":447},[42],[449],{"tag":229,"href":46,"children":450},[45],[452],{"tag":229,"href":49,"children":453},[48],[455],{"tag":229,"href":52,"children":456},[51],[458],{"tag":229,"href":55,"children":459},[54],[461],{"tag":229,"href":58,"children":462},[57],[464],{"tag":229,"href":61,"children":465},[60],[467],{"tag":229,"href":64,"children":468},[63],[470],{"tag":229,"href":67,"children":471},[66],[473],{"tag":229,"href":70,"children":474},[69],[476,550,606,679],{"slug":477,"published":478,"minutes":479,"category":7,"tags":480,"keywords":486,"about":498,"sources":507,"cover":544,"og":545,"expertise":73,"locales":546,"lang":77,"title":547,"description":548,"coverAlt":549},"schema-org-structured-data-b2b-shop","2026-10-17",10,[481,482,483,484,485],"Schema.org","Structured data","B2B e-commerce","Technical SEO","Nuxt",[487,488,489,490,491,492,493,494,495,496,497],"schema.org b2b shop","product structured data b2b","merchant listing structured data","product snippet vs merchant listing","unitpricespecification referencequantity","productgroup variants structured data","organization schema vatid","b2b prices behind login seo","json-ld nuxt schema org","merchant return policy structured data","mpn gtin structured data",[499,501,504],{"name":481,"url":500},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSchema.org",{"name":502,"url":503},"JSON-LD","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON-LD",{"name":505,"url":506},"Business-to-business","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBusiness-to-business",[508,511,514,517,520,523,526,529,532,535,538,541],{"title":509,"url":510},"Google Search Central: Introduction to Product structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct",{"title":512,"url":513},"Google Search Central: Merchant listing (Product, Offer) structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fmerchant-listing",{"title":515,"url":516},"Google Search Central: Product snippet structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-snippet",{"title":518,"url":519},"Google Search Central: Product variant structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-variants",{"title":521,"url":522},"Google Search Central: Organization structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Forganization",{"title":524,"url":525},"Google Search Central: Merchant return policy structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Freturn-policy",{"title":527,"url":528},"Google Search Central: General structured data guidelines","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fsd-policies",{"title":530,"url":531},"Google Search Central: Generate structured data with JavaScript","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fgenerate-structured-data-with-javascript",{"title":533,"url":534},"Schema.org: Offer","https:\u002F\u002Fschema.org\u002FOffer",{"title":536,"url":537},"Schema.org: UnitPriceSpecification","https:\u002F\u002Fschema.org\u002FUnitPriceSpecification",{"title":539,"url":540},"Unhead: Product schema (defineProduct)","https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fschema-org\u002Fapi\u002Fschema\u002Fproduct",{"title":542,"url":543},"Nuxt SEO: Schema.org identity setup","https:\u002F\u002Fnuxtseo.com\u002Fdocs\u002Fschema-org\u002Fguides\u002Fsetup-identity","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fog.jpg",[75,76,77],"Schema.org strukturált adatok B2B webshopokhoz: bejelentkezés mögötti árak, egységek és változatok","Termék-markup B2B shopokhoz: snippet vagy kereskedői lista, melyik ár, cikkszámok, egységárak, változatok, Organization és SSR Nuxtban.","Terméktéglalap vékony kerettel, alsó kis mezőjét alacsony fal takarja el.",{"slug":551,"published":478,"minutes":552,"category":7,"tags":553,"keywords":558,"about":570,"sources":578,"cover":600,"og":601,"expertise":73,"locales":602,"lang":77,"title":603,"description":604,"coverAlt":605},"ai-assistant-b2b-shop-customer-support",9,[483,554,555,556,557],"AI assistant","Customer support","LLM agents","EU AI Act",[559,560,561,562,563,564,565,566,567,568,569],"ai assistant b2b shop","ai customer support b2b ecommerce","llm chatbot order status","ai agent customer service tools","chatbot liability air canada","klarna ai assistant results","human handoff chatbot design","eu ai act chatbot disclosure","owasp excessive agency","ai support resolution rate","b2b customer portal chatbot",[571,574,577],{"name":572,"url":573},"Customer service","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCustomer_service",{"name":575,"url":576},"Chatbot","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FChatbot",{"name":505,"url":506},[579,582,585,588,591,594,597],{"title":580,"url":581},"Klarna: AI assistant handles two-thirds of customer service chats in its first month (press release, 2024)","https:\u002F\u002Fwww.klarna.com\u002Finternational\u002Fpress\u002Fklarna-ai-assistant-handles-two-thirds-of-customer-service-chats-in-its-first-month\u002F",{"title":583,"url":584},"Entrepreneur: Klarna is hiring customer service agents again, according to its CEO (May 2025)","https:\u002F\u002Fwww.entrepreneur.com\u002Fbusiness-news\u002Fklarna-ceo-reverses-course-by-hiring-more-humans-not-ai\u002F491396",{"title":586,"url":587},"ABA Business Law Today: BC tribunal confirms companies remain liable for information provided by AI chatbot","https:\u002F\u002Fwww.americanbar.org\u002Fgroups\u002Fbusiness_law\u002Fresources\u002Fbusiness-law-today\u002F2024-february\u002Fbc-tribunal-confirms-companies-remain-liable-information-provided-ai-chatbot\u002F",{"title":589,"url":590},"OWASP GenAI Security Project: LLM06:2025 Excessive Agency","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm062025-excessive-agency\u002F",{"title":592,"url":593},"OWASP GenAI Security Project: LLM05:2025 Improper Output Handling","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm052025-improper-output-handling\u002F",{"title":595,"url":596},"EU AI Act, Article 50: Transparency obligations","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F50\u002F",{"title":598,"url":599},"Intercom: Fin pricing and billable outcomes","https:\u002F\u002Ffin.ai\u002Fpricing","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fai-assistant-b2b-shop-customer-support\u002Fog.jpg",[75,76,77],"AI-asszisztens a B2B webshop ügyfélszolgálatához: eszközök, jogosultságok és átadás embernek","Hogyan építs AI ügyfélszolgálati asszisztenst B2B shophoz: mit automatizálj, eszközök ügyfélkontextusban, átadás embernek, AI Act és mérőszámok.","Magas fal keskeny réssel: nyíl halad át rajta a három négyzetből álló bekerített mezőbe, egy másik lefelé, egy tálca felé mutat.",{"slug":607,"published":478,"minutes":6,"category":7,"tags":608,"keywords":613,"about":625,"sources":635,"cover":672,"og":673,"expertise":674,"locales":675,"lang":77,"title":676,"description":677,"coverAlt":678},"vue-ai-chat-ui-streaming-accessibility",[609,485,610,611,612],"Vue","Accessibility","Streaming","AI chat",[614,615,616,617,618,619,620,621,622,623,624],"vue ai chat ui","nuxt llm streaming","sse vs fetch streaming","aria-live streaming text","accessible chat interface","abort fetch stream vue","dompurify markdown llm","role log chat","reduced motion chat ui","wcag 2.2 chat","screen reader streaming",[626,629,632],{"name":627,"url":628},"Web accessibility","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_accessibility",{"name":630,"url":631},"Server-sent events","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",{"name":633,"url":634},"Vue.js","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVue.js",[636,639,642,645,648,651,654,657,660,663,666,669],{"title":637,"url":638},"MDN: Using server-sent events","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FServer-sent_events\u002FUsing_server-sent_events",{"title":640,"url":641},"MDN: AbortController","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FAbortController",{"title":643,"url":644},"MDN: ReadableStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FReadableStream",{"title":646,"url":647},"MDN: TextDecoderStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FTextDecoderStream",{"title":649,"url":650},"MDN: ARIA log role","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAccessibility\u002FARIA\u002FReference\u002FRoles\u002Flog_role",{"title":652,"url":653},"W3C: Understanding SC 4.1.3 Status Messages","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Fstatus-messages.html",{"title":655,"url":656},"W3C WAI: What's new in WCAG 2.2","https:\u002F\u002Fwww.w3.org\u002FWAI\u002Fstandards-guidelines\u002Fwcag\u002Fnew-in-22\u002F",{"title":658,"url":659},"MDN: prefers-reduced-motion","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002F@media\u002Fprefers-reduced-motion",{"title":661,"url":662},"DOMPurify README","https:\u002F\u002Fgithub.com\u002Fcure53\u002FDOMPurify",{"title":664,"url":665},"markdown-it README","https:\u002F\u002Fgithub.com\u002Fmarkdown-it\u002Fmarkdown-it",{"title":667,"url":668},"AI SDK docs: useChat","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fchatbot",{"title":670,"url":671},"Vue docs: nextTick","https:\u002F\u002Fvuejs.org\u002Fapi\u002Fgeneral.html#nexttick","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fog.jpg","vue-nuxt-developer",[75,76,77],"AI-csevegő UI Vue-ban és Nuxtban: akadálymentes streaming","AI-csevegő Vue-ban vagy Nuxtban: fetch-stream, megszakítás és újrapróbálás, biztonságos markdown, aria-live bejelentések, billentyűzet és reduced motion.","Üzenetkártya villogó kurzorral, pontozott vonal hullámokká nyílik, mellette pipa.",{"slug":680,"published":478,"minutes":552,"category":7,"tags":681,"keywords":686,"about":698,"sources":708,"cover":741,"og":742,"expertise":674,"locales":743,"lang":77,"title":744,"description":745,"coverAlt":746},"llm-translation-pipeline-i18n",[682,683,684,609,685],"Translation","i18n","LLM","Localization",[687,688,689,690,691,692,693,694,695,696,697],"llm translation pipeline","icu messageformat placeholders","vue i18n llm translation","translation memory llm","glossary enforcement translation","german informal sie du","hungarian translation quality llm","structured output json translation","machine translation post-editing","locale file validation","cldr plural categories",[699,702,705],{"name":700,"url":701},"Internationalization and localization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInternationalization_and_localization",{"name":703,"url":704},"ICU MessageFormat","https:\u002F\u002Funicode-org.github.io\u002Ficu\u002Fuserguide\u002Fformat_parse\u002Fmessages\u002F",{"name":706,"url":707},"Vue I18n","https:\u002F\u002Fvue-i18n.intlify.dev\u002F",[709,711,714,717,720,723,726,729,732,735,738],{"title":710,"url":704},"Unicode ICU User Guide: Formatting Messages",{"title":712,"url":713},"Vue I18n: Message Format Syntax","https:\u002F\u002Fvue-i18n.intlify.dev\u002Fguide\u002Fessentials\u002Fsyntax",{"title":715,"url":716},"Nuxt i18n: Getting started","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fgetting-started",{"title":718,"url":719},"Unicode CLDR: Plural rules","https:\u002F\u002Fcldr.unicode.org\u002Findex\u002Fcldr-spec\u002Fplural-rules",{"title":721,"url":722},"OpenAI: Structured outputs","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fstructured-outputs",{"title":724,"url":725},"DeepL API: Glossaries","https:\u002F\u002Fdevelopers.deepl.com\u002Fdocs\u002Fapi-reference\u002Fglossaries",{"title":727,"url":728},"W3C: Localization vs. internationalization","https:\u002F\u002Fwww.w3.org\u002FInternational\u002Fquestions\u002Fqa-i18n",{"title":730,"url":731},"GNU gettext manual","https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fgettext\u002Fmanual\u002Fgettext.html",{"title":733,"url":734},"RFC 5646: Tags for Identifying Languages","https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc5646",{"title":736,"url":737},"Rat für deutsche Rechtschreibung","https:\u002F\u002Fwww.rechtschreibrat.com\u002F",{"title":739,"url":740},"Microsoft Writing Style Guide","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fstyle-guide\u002Fwelcome\u002F","\u002Fimages\u002Fblog\u002Fllm-translation-pipeline-i18n\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-translation-pipeline-i18n\u002Fog.jpg",[75,76,77],"LLM-fordítási pipeline i18n-hez: glosszárium, helyőrzők és review","Termék- és weboldalszövegek fordítása LLM-mel úgy, hogy a helyőrzők, a többes szám és a hangnem épen maradjon: glosszárium, ICU üzenetek, QA-ellenőrzések.","Három forráskártya, egy lefordított kártya glosszárium-szalaggal, majd ellenőrzött tábla.",1792337025655]