AI Engineer · Lecke 04

RAG mélyen: retrieval, chunkolás, embeddings, reranking

A visszakereséssel bővített generálás (retrieval-augmented generation, RAG) az a technika, amellyel a modellt a saját, naprakész adataiddal eteted meg anélkül, hogy újratanítanád. Ez a lecke a teljes csővezetéket járja végig, a dokumentumok darabolásától az embeddingeken és a vektoradatbázison át a top-k visszakeresésig és a rerankingig, majd megnézzük, hol szokott elromlani.

Vissza a tananyaghoz


Miért van szükség RAG-ra

A foundation modell tudása a tanítás idejére van befagyasztva, és nem ismeri sem a te belső dokumentumaidat, sem a tegnapi eseményeket. Ha ilyesmiről kérdezed, két rossz kimenet lehetséges, vagy bevallja, hogy nem tudja, vagy magabiztosan kitalál valamit. A RAG úgy oldja meg ezt, hogy nem a modellt változtatja meg, hanem a kérdés pillanatában betölti a válaszhoz szükséges releváns szövegrészeket a kontextusba. A modell így nem a memóriájából dolgozik, hanem az eléje tett friss anyagból. A RAG tehát nem varázslat, hanem egy jól megtervezett keresés, amelynek a találatait a modell elé helyezzük, és a modellt arra kérjük, ezekre támaszkodva válaszoljon.


FELTÖLTÉSI ÁG, egyszer előre dokumentum darabolás chunkok embedding vektor vektoradatbázis indexelve tárol LEKÉRDEZÉSI ÁG, minden kérdésnél kérdés embedding top-k keresés legközelebbi chunkok reranking újrarendezés modell + kontextus forrásra hivatkozó válasz A feltöltési ág egyszer fut le, a lekérdezési ág minden felhasználói kérdésnél újra. A közös pont az embedding, ez teszi összemérhetővé a kérdést és a dokumentumot.
A RAG két ágból áll. A feltöltési ág előre feldolgozza és eltárolja a tudást, a lekérdezési ág a kérdéshez keresi ki a legrelevánsabb részeket, majd a modell ezekre támaszkodva válaszol.

Darabolás, ahol a legtöbb hiba születik

A dokumentumokat nem egészben tároljuk, hanem kisebb részekre, chunkokra vágjuk. A darab mérete meglepően nagy hatással van a végeredményre. Ha túl nagy egy darab, akkor sok oda nem tartozó szöveg is beékelődik, felhígítja a relevanciát, és pazarolja a kontextusablakot. Ha túl kicsi, akkor egy gondolat kettétörik, és a darab önmagában értelmezhetetlen lesz. A gyakori megoldás a részleges átfedés a szomszédos darabok között, hogy a határon lévő mondatok ne vesszenek el. Érdemes a szöveg természetes szerkezetét követni, tehát bekezdés, szakasz vagy fejezet mentén darabolni, nem pedig vakon, adott karakterszámnál elvágni. A darabolás az a lépés, amelyet a RAG hibáinak visszakeresésekor elsőként érdemes megnézni.


Embeddingek, avagy a jelentés mint hely a térben

Az embedding egy olyan leképezés, amely a szöveget egy sok dimenziós vektorrá alakítja úgy, hogy a hasonló jelentésű szövegek vektorai közel kerüljenek egymáshoz, a különbözőké pedig távol. A jelentésbeli hasonlóság így geometriai közelséggé válik, amit már számolni tudunk. Ezt használja a RAG. A dokumentumdarabokat és a kérdést ugyanazzal az embedding modellel alakítjuk vektorrá, majd megkeressük, mely dokumentumvektorok esnek legközelebb a kérdés vektorához. Fontos, hogy a feltöltéskor és a lekérdezéskor ugyanazt az embedding modellt használd, különben a két vektor nem összemérhető. Az embedding modell megválasztása önálló mérnöki döntés, mert a minőség és a vektor mérete is befolyásolja a keresés pontosságát és a tárolás költségét.


Jelentéstér, minden pont egy szövegdarab vektora szabadság kiadás éves szabadnapok távollét kérése tűzriadó terv parkolási rend a szabadsághoz köthető darabok egy csomóban
Az embedding a jelentést hellyé alakítja. A közeli témájú szövegdarabok egymás mellé kerülnek a térben, a távoli témájúak messze. A visszakeresés ezt a közelséget használja.

Vektoradatbázis és a top-k visszakeresés

A dokumentumvektorokat egy vektoradatbázisban tároljuk, amely arra van kihegyezve, hogy nagy mennyiségű vektor közül gyorsan megtalálja egy adott kérdéshez legközelebb esőket. Mivel a pontos legközelebbi keresés sok vektornál lassú lenne, a gyakorlatban közelítő legközelebbi szomszéd keresést használnak, amely egy indexstruktúra segítségével gyorsan ad jó, bár nem tökéletes találatokat. A lekérdezéskor a legközelebbi néhány darabot kérjük vissza, ezt hívjuk top-k visszakeresésnek, ahol a k a visszaadott darabok száma. A k megválasztása kompromisszum. Kevés darab kockáztatja, hogy lemarad a lényeg, sok darab pedig zajt és felesleges tokent hoz be. Sok rendszerben a tisztán jelentésalapú keresést kombinálják a klasszikus kulcsszavas kereséssel, ezt nevezzük hibrid keresésnek, mert a kettő más típusú hibát ejt, és így kiegészítik egymást.


Reranking és a jellemző hibamódok

A top-k keresés gyors, de nem mindig teszi az igazán releváns darabot a lista elejére. A reranking egy második, alaposabb lépés, amelyben egy pontosabb, de drágább modell a kérdés és az egyes darabok viszonyát külön értékeli, és ez alapján rendezi újra a jelölteket. Így a keresés a gyors első körrel sok jelöltet szűr, a reranker pedig a legjobbakat emeli előre, mielőtt a modell elé kerülnek. Érdemes ismerni a RAG jellemző hibáit is. A visszakeresés elvétheti a releváns darabot, ilyenkor a modell hiába okos, nincs miből dolgoznia. A darabolás széttörhet egy összetartozó gondolatot. A kontextus túltömése zajt visz be. És ha semmi releváns nem kerül elő, a modell hajlamos kitalálni a választ, ezért a promptban explicit ki kell mondani, hogy csak a megadott forrásokból válaszoljon, és jelezze, ha a válasz nincs benne.


3

Három hely, ahol a RAG elromlik. A darabolásnál, ha rossz méretű a darab. A visszakeresésnél, ha nem a releváns rész jön elő. És a promptnál, ha nem kötöd ki, hogy csak a forrásból válaszoljon. Egy RAG hiba kivizsgálásakor ezt a három pontot nézd meg elsőként, ebben a sorrendben.


← Előző lecke Következő lecke →

Workshop

AI Transformation Day

Egésznapos, vezetőknek szóló program. Feltérképezzük, hol tart a szervezet, mi az első reális lépés, és milyen belső feltételek szükségesek a sikerhez. A nap végén konkrét, prioritizált cselekvési lista.

Érdekel a program →