AI serija pitanja za intervju 11: Kako optimizirati RAG?
Optimizacija RAG-a nije prilagođavanje jedne komponente, već proces optimizacije cijelog lanca. U nastavku dajem sustavne strategije optimizacije iz četiri dimenzije: strana indeksiranja podataka, strana pretraživanja, strana generiranja i strana evaluacije, uz praktična iskustva koja možete spomenuti na intervjuu.
1. Optimizacija na strani indeksiranja podataka (poboljšanje kvalitete "baze znanja")
Ovo je najčešće zanemareno, ali najbrže djelotvorno područje.
| Točka optimizacije | Problem | Konkretan pristup | Mjera učinka |
|---|---|---|---|
| Parsiranje dokumenata | Tablice, dijagrami toka u PDF-u su ignorirani, ili tekst je gibberish, redoslijed je poremećen. | Koristite bolju biblioteku za parsiranje (npr. unstructured, način očuvanja izgleda pypdf); za tablice koristite pandas za ekstrakciju i pretvorite u Markdown. |
Odziv +5-15% |
| Veličina fragmenta teksta | Chunk premalen gubi kontekst (npr. "on je ove godine povećao prihod" gdje se "on" izgubi); chunk prevelik dovodi do puno šuma u pretraživanju. | Eksperimentirajte s različitim veličinama chunkova (256/512/768 tokena), preklapanje postavite na 10-20%; za duge dokumente režite prema semantičkim granicama (odlomci/naslovi) umjesto fiksne duljine. | Stopa pogađanja / vjernost |
| Dodavanje metapodataka | Pronađen je relevantni odlomak, ali se ne može pratiti izvor ili vrijeme, ili je potrebno filtriranje po domeni. | Dodajte metapodatke svakom chunku: source (naziv datoteke/URL), timestamp, page_num, doc_type. Prilikom pretraživanja koristite filtere (npr. doc_type == 'legal'). |
Preciznost filtriranja |
| Odabir modela ugrađivanja | Opći embedding modeli slabo rade u vertikalnim domenama (medicina, kod, pravo). | Koristite domenski fino podešene modele (BGE-large-zh, GTE-Qwen2-7B-instruct); ili fino podesite vlastiti embedding model (koristeći triplet loss). | MRR@10 pretraživanja +10-20% |
2. Optimizacija na strani pretraživanja (neka 'listanje' bude preciznije)
Pretraživanje određuje kvalitetu "referentnih materijala" koje dajemo LLM-u.
| Točka optimizacije | Problem | Konkretan pristup | Učinak |
|---|---|---|---|
| Hibridno pretraživanje | Vektorsko pretraživanje ne može točno spojiti termine (npr. model proizvoda ABC-123), pretraživanje ključnih riječi ne razumije sinonime. |
Istovremeno koristite vektorsko pretraživanje (semantičko) i BM25 (ključne riječi), kombinirajte s ponderima (npr. 0.7vektor + 0.3BM25) ili rerank. | Odziv +10-25% |
| Ponovno rangiranje (Rerank) | Prvih nekoliko rezultata vektorskog pretraživanja nisu nužno najrelevantniji, deseti je možda najbolji. | Koristite cross-encoder model (npr. BGE-reranker-v2, Cohere Rerank) za ponovno ocjenjivanje kandidata (npr. prvih 20) i uzmite top-K. |
Značajno poboljšanje stope pogađanja (posebno top-1) |
| Prepisivanje upita | Korisničko pitanje je nejasno ili se u višestrukom dijalogu gube reference ("A kolika je njegova cijena?"). | Koristite LLM da prepiše originalno pitanje u oblik prikladniji za pretraživanje (npr. "Kolika je cijena iPhone 15?"); ili dopunite poviješću dijaloga. | Odziv +5-15% |
| HyDE | Korisničko pitanje je prekratko ili apstraktno (npr. "Objasni fotosintezu"), izravno pretraživanje je loše. | Prvo neka LLM generira hipotetički odgovor, a zatim taj odgovor koristite za pretraživanje dokumenata. | Prikladno za otvorene domene, ali ne za činjenična precizna pitanja |
| Prilagođavanje Top-K | Premali K može propustiti ključne informacije; preveliki K povećava potrošnju tokena i šum. | Eksperimentirajte s K=3/5/10, promatrajte balans između odziva i vjernosti odgovora. | Trade-off između učinkovitosti i efekta |
3. Optimizacija na strani generiranja (neka LLM dobro iskoristi referentne materijale)
Bez obzira koliko je pretraživanje točno, ako su promptni inženjering ili model loši, neće pomoći.
| Točka optimizacije | Problem | Konkretan pristup | Učinak |
|---|---|---|---|
| Promptni inženjering | LLM ignorira sadržaj pretraživanja ili izmišlja. | Jasna instrukcija: "Odgovori na pitanje samo na temelju sljedećih referentnih materijala. Ako materijali nisu dovoljni ili nisu relevantni, odgovori 'Nema dovoljno informacija'." Dodajte few-shot primjere koji pokazuju kako citirati izvor. | Vjernost +20-40% |
| Kompresija konteksta | Pronađeni sadržaj je predug (prekoračuje kontekstni prozor modela) ili je većinom šum. | Koristite LLMLingua ili selektivni kontekst za kompresiju, zadržite najrelevantnije rečenice prije nego ih pošaljete LLM-u. |
Smanjenje rizika gubitka informacija |
| Nadogradnja LLM modela | Mali model (7B) ne može izvršiti složeno zaključivanje ili ne pamti dugačak kontekst. | Zamijenite jačim modelom (GPT-4o, Claude 3.5 Sonnet, Qwen2.5-72B). | Točnost zaključivanja značajno povećana |
| Strujanje i citiranje | Korisnik ne može provjeriti vjerodostojnost odgovora. | Neka LLM tijekom generiranja ispisuje [citation:1], koji odgovara broju pronađenog dokumenta. Backend prilaže originalnu poveznicu. |
Povjerenje korisnika + mogućnost debugiranja |
| Kalibracija odbijanja odgovora | Model izmišlja kada ne bi trebao, ili kaže "ne znam" kada bi trebao odgovoriti. | Postavite prag sličnosti: ako je kosinusna sličnost top-1 chunka s pitanjem manja od 0.7, upozorite LLM "materijali nisu relevantni". | Smanjenje stope halucinacija |
4. Strana evaluacije i iteracije (znati kamo usmjeriti optimizaciju)
Bez mjerenja nema optimizacije.
| Točka optimizacije | Pristup | Metrika |
|---|---|---|
| Izrada evaluacijskog skupa | Pripremite 100-300 stvarnih korisničkih pitanja + standardnih odgovora + točnih ID-ova pronađenih dokumenata. | Pokrijte različite težine i namjere. |
| Automatska evaluacija | Koristite RAGAS (Faithfulness, Answer Relevance, Context Recall) ili TruLens. | Tri ključne metrike: vjernost, relevantnost odgovora, kontekstni odziv. |
| Ručna evaluacija | Tjedno testirajte 20 loših slučajeva, analizirajte tip greške (neuspjeh pretraživanja / greška generiranja / nedostatak baze znanja). | Prioriteti za poboljšanje. |
| A/B testiranje | U produkciji testirajte različite strategije pretraživanja (npr. BM25 vs hibridno pretraživanje) u bucketima. | Online metrike: zadovoljstvo korisnika, stopa bez odgovora. |
5. Praktična iskustva koja možete spomenuti na intervjuu (bonus bodovi)
"U RAG projektu kojeg sam vodio, početna stopa pogađanja je bila samo 67%. Napravio sam tri stvari:
1. Promijenio sam fiksnu podjelu na 1024 u dinamičku semantičku podjelu (prema naslovima i odlomcima), stopa pogađanja je porasla na 74%;
2. Dodao sam hibridno pretraživanje (vektor + BM25) i mali rerank model, stopa pogađanja je porasla na 83%;
3. Optimizirao sam prompt i obvezao zahtjev za[Nisu pronađene relevantne informacije], stopa halucinacija je pala s 22% na manje od 5%.Osim toga, uspostavili smo kontinuirani evaluacijski pipeline, prije svake promjene pokrenuli smo RAGAS ocjenu na 200 pitanja kako bismo osigurali da nema degradacije."
Završni sažetak: kompletna mapa puta za optimizaciju RAG-a
Sloj podataka → Čišćenje dokumenata, optimizacija podjele, pojačanje metapodataka, domenski embedding
Sloj pretraživanja → Hibridno pretraživanje, rerank, prepisivanje upita, HyDE, prilagođavanje Top-K
Sloj generiranja → Pojačanje prompta, instrukcije, kompresija, citiranje, prag odbijanja
Sloj evaluacije → Evaluacijski skup, RAGAS, ručna analiza, A/B eksperiment
评论
暂无已展示的评论。
发表评论(匿名)