Spýtajte sa ChatGPT na výpovedné lehoty vo vašej firme alebo záručné podmienky vášho produktu a odpovie sebavedomo — a nesprávne. Jazykový model vie to, čo videl počas trénovania, a vaše interné dokumenty tam neboli. Napriek tomu existujú AI asistenti, ktorí presne odpovedajú z firemných zmlúv, manuálov a wiki — a fungujú dobre. Mechanizmus za takmer všetkými sa volá RAG a je jednoduchší, než znie.
Problém: model vaše dáta nikdy nevidel
Ponúkajú sa dve riešenia a obe sú zvyčajne nesprávne. Pretrénovanie (fine-tuning) modelu na vašich dokumentoch je drahé, pomalé pri aktualizáciách — každá zmena dokumentu znamená ďalšie kolo trénovania — a slabé v presných faktoch. Vložiť všetky dokumenty do promptu tiež zlyhá: modely majú obmedzené kontextové okno a aj tie veľké sú pomalšie, drahšie a menej presné, keď ich zaplavíte tisíckami strán prevažne irelevantného textu.
Praktické riešenie: model vaše dokumenty neučte. Podajte mu tie správne tri odseky vo chvíli, keď ich potrebuje. Všetko ďalšie je o tom, ako tie tri odseky nájsť.
Embeddingy: význam ako súradnice
Embedding model vezme kus textu a premení ho na dlhý zoznam čísel — vektor, typicky so stovkami až tisíckami dimenzií. Predstavte si ho ako súradnice na mape významu: texty o podobných veciach pristanú blízko seba, nesúvisiace texty ďaleko od seba. „Ako ukončím zmluvu?“ a „výpovedná lehota“ nemajú takmer žiadne spoločné slová, ale ich vektory ležia blízko, lebo znamenajú takmer to isté.
Presne táto vlastnosť drží celý systém: podobnosť významu sa stáva vzdialenosťou, ktorá sa dá merať — čo klasické vyhľadávanie podľa kľúčových slov z princípu nedokáže.
Vektorové vyhľadávanie: najbližší význam
Príprava firemných znalostí vyzerá takto: každý dokument sa rozdelí na časti (chunky) — úseky s niekoľkými odsekmi — pre každý sa vypočíta embedding a dvojice sa uložia do vektorovej databázy (pgvector v PostgreSQL, Qdrant, Pinecone a podobné). Keď používateľ položí otázku, otázka sa embedne tým istým modelom a databáza vráti chunky, ktorých vektory ležia najbližšie.
Výsledok: z desaťtisíc strán dostanete hŕstku pasáží, ktoré skutočne hovoria o tom, na čo sa používateľ pýtal — v milisekundách a bez ohľadu na to, či použil rovnaké slová ako dokument.
RAG: poskladané dokopy
RAG znamená retrieval-augmented generation — generovanie obohatené o vyhľadávanie — a názov je zároveň celý recept. Pri každej otázke asistent vykoná tri kroky:
- Retrieve — otázka sa embedne a z vektorovej databázy sa vytiahnu najrelevantnejšie chunky.
- Augment — zostaví sa prompt s otázkou a týmito chunkami, s inštrukciou odpovedať výhradne z dodaných podkladov.
- Generate — jazykový model napíše odpoveď a odcituje dokumenty, z ktorých chunky pochádzajú.
Model sa nikdy nepretrénúva. Zmeňte dokument, prepočítajte embeddingy jeho chunkov a asistent o pár minút odpovedá z novej verzie. A keďže odpoveď stojí na nájdenom texte, asistent vie citovať zdroje — a povedať „neviem“, keď vyhľadávanie nič nevráti, namiesto vymýšľania niečoho pravdepodobne znejúceho.
Čo pridáva skutočné nasadenie
Slučka vyššie sa zmestí do víkendového prototypu. Produkčné systémy sa líšia v tých nenápadných častiach:
- Stratégia chunkovania — rozdeliť zmluvu uprostred klauzuly zničí odpovede; dobré systémy delia podľa štruktúry dokumentu.
- Hybridné vyhľadávanie — kombinácia vektorovej podobnosti s klasickým vyhľadávaním slov, lebo presné výrazy (čísla faktúr, kódy produktov) si zaslúžia presné zhody.
- Oprávnenia — asistent nesmie vytiahnuť dokumenty, ktoré pýtajúci sa používateľ nemá vidieť; riadenie prístupu patrí do vyhľadávacej vrstvy, nie do promptu.
- Vyhodnocovanie — testovacia sada skutočných otázok so známymi správnymi odpoveďami, spúšťaná pri každej zmene, aby sa kvalita merala, nie odhadovala.
Presne túto architektúru — asistent navrchu, vyhľadávanie a oprávnenia pod ním — staviame v rámci AI aplikácií na mieru a napájame na existujúce systémy cez AI integrácie. Ako vyzerá v praxi, ukazujú naše možnosti použitia v analýze dát.
Zhrnutie
RAG nie je mágia ani buzzword: embeddingy premenia význam na geometriu, vektorové vyhľadávanie nájde najbližšie pasáže a model napíše odpoveď, ktorá na nich stojí. O kvalite výsledku rozhoduje menej model a viac inžinierstvo okolo vyhľadávania — a to je dobrá správa, lebo inžinierstvo sa dá špecifikovať, testovať a zlepšovať.
