
Miért kevés az egyező szöveges tárolás?
Kezdetben kézenfekvő megoldásnak tűnik, hogy pontos szövegegyezést (exact match) keresünk a kérdések között: ugyanaz a lekérdezés, ugyanaz a válasz, ugyanaz a cache-kulcs. Ez a klasszikus módszer azonban a logok elemzése szerint csupán a redundáns hívások 18%-át fogja meg, mert az emberek szinte soha nem használják szó szerint ugyanazt a megfogalmazást. Ugyanakkor a lekérdezések 47%-a szemantikailag nagyon hasonló, csak máshogyan van megfogalmazva, míg a fennmaradó 35% teljesen új kérdés. A szövegalapú cache tehát rengeteg hasznos megtakarítástól foszt meg bennünket.
Szemantikus cache: az igazi megtakarítás kulcsa
A szemantikus cache nem a kérdések pontos szövegét, hanem azok jelentését (embedding-vektorát) figyeli. Itt a kérdéseket beágyazzuk (embedding), majd egy vektortérben összehasonlítva mérjük, mennyire hasonlítanak egymáshoz. Ha a hasonlóság valamely küszöbérték (például 0,92) fölött van, máris visszaadható egy korábban kiszámolt válasz.
A gyakorlatban ez három komponenst jelent: egy embedding-modellt, egy vektorbázist (pl. FAISS, Pinecone), és egy válasz-tárolót (pl. Redis, DynamoDB). A lekérdezést először beágyazzuk, majd megkeressük, van-e elég hasonló korábbi kérés; ha találunk ilyet, azonnal visszaadhatjuk a cache-elt választ.
A hasonlósági küszöb problémája
A legnagyobb kihívást a megfelelő hasonlósági küszöb beállítása jelenti. Ha a küszöbérték túl alacsony, félrevezető, helytelen válaszokat is visszakaphatunk. Például 0,85-ös küszöbnél könnyen előfordulhat, hogy a „Hogyan mondhatom le az előfizetésemet?” kérdésre egy „Hogyan mondhatom le a rendelésemet?” típusú választ kapunk, pedig a két válasz nagyon eltérhet.
A legjobb eredményt kategóriánként állított küszöbértékek hozzák:
– GYIK/FAQ típusnál magas, 0,94 (a bizalom miatt kell pontos válasz)
– Termékkeresésnél alacsonyabb, 0,88 (több hasonlóság megengedett)
– Ügyfélszolgálati kérdéseknél 0,92
– Tranzakciós (pl. fizetés) kérdéseknél extra magas, 0,97 (nulla hibátűrés)
A konkrét küszöböket érdemes adatvezérelt módon beállítani, különféle lekérdezéspárok kézi vizsgálata alapján. Ehhez érdemes különböző hasonlósági szinteken kérdéspárokat mintavételezni, majd 3 megbízható annotátorral besoroltatni: azonos-e a jelentés vagy sem. Így kialakítható egy precízió–visszahívás (precision–recall) görbe minden lekérdezéstípushoz; ennek maximuma lesz az ideális küszöb.
Futási idő, késleltetés
A szemantikus cache némi extra késleltetéssel jár, hiszen minden lekérdezést be kell ágyazni és keresni kell. Mérési adatok szerint ez átlagosan 20 ms-t (p50) ad hozzá, nagyon ritkán akár 47 ms-ot (p99). Ez eltörpül az LLM-hívások 850–2400 ms-os válaszideje mellett. Megéri: ha a cache-hit arány 67%, az összesített átlagos késleltetés 850 ms-ról 300 ms-ra esik vissza, azaz 65%-kal javul.
Az érvénytelenítés buktatói
Cache-elt válaszok idővel elavulhatnak: változnak termékinformációk, irányelvek. Három fő stratégiával kell frissíteni:
– Időalapú (TTL): például árak 4 óráig, irányelvek 7 napig, termékinformációk 1 napig érvényesek.
– Eseményalapú: ha a forrásadat (pl. ár vagy szabályzat) frissül, a kapcsolódó cache-elt válaszok azonnali törlése.
– Elavulásérzékelés: rendszeres ellenőrzés, a tárolt válaszok naponta kis mintáját újra lekérdezve, majd a beágyazások összehasonlítása (ha jelentősen eltér, törlés).
Valós eredmények: költség, pontosság, elégedettség
Három hónapos éles használat után:
– A cache-hit arány 18%-ról 67%-ra ugrott (+272%)
– Az LLM API-költségek 17,4 millió forintról 4,7 millió forintra csökkentek (-73%)
– Az átlagos válaszidő 850 ms-ról 300 ms-ra javult (-65%)
– A téves, hibás szolgáltatás aránya 0,8% alatt maradt, a felhasználói reklamáció mindössze 0,3%-kal emelkedett.
A hibák főként a küszöb határán jelentkeztek, ahol a hasonlóság még nagyon magas, de a szándék kicsit eltér.
Tipikus hibák, amiket el kell kerülni
Nem szabad univerzális küszöbértéket használni – kérdéstípusonként külön kell beállítani őket. Az embedding-lépéseket cache-hit esetén sem lehet kihagyni, hiszen azzal sérül a cache-kulcsgenerálás minősége. Mindig kell érvénytelenítési stratégia: enélkül gyorsan elavulnak a válaszok, ez pedig rontja a felhasználói bizalmat. Nem érdemes mindent cache-elni: személyre szabott, tranzakciós vagy pillanatnyi információkat sosem szabad elraktározni.
A fentiek tükrében
A szemantikus cache egy kézzelfogható, nagy hasznot hozó megoldás az LLM-költségcsökkentéshez, amely az egyező szöveges cache-nél többet fog meg. A siker kulcsa a precíz küszöbhangolás (adatvezérelt módon, típusonként), valamint egy jól felépített érvénytelenítési rendszer. 73%-os költségcsökkenéssel és 65%-os gyorsulással a szemantikus cache az egyik leghatékonyabb LLM-optimalizáció, amely kellő figyelemmel bevezetve jelentősen javíthatja mind a felhasználói élményt, mind az üzemeltetési költségeket.
