RAG förklarade ":", ursprung och grundlagen
Har du någonsin sökt efter "implementeringsführern" och fått ingentingM SK2 trots att det finns en artikel om "utpublicering till produktionMska5 RAG mska6RettvinningMske7Augmented GenerationMska8 löser detta genom att förstå meningen,~ inte bara nyckelord~.~ Den här serien visar dig hur RAG kom till sigMske11 hur den fungerar under kapselnM Ska12 och hur man bygger produktionssystem?Mska13~ Från semanticisk sök till AI?-~ kraftfulla Q?M Ska15? A med citat?—? allt med hjälp av fungerande C!
Inleiding
Navigation Det här är en del av RAG: s 1
- Del 1: RAG ursprung och grundlagen (den här artikeln) - Vad är inbäddar?
- Del 2: RAG arkitektur och inre - ,-tokenisering
- Del 3: RAG i praktiken - Att bygga kompletta RAG-system
- Del 4a: ONNX & Garantiimplementering - CPU-vänligt semantisk sökgrund
- Del 4b: Semantisk sökande i aktivitet - Typahead, ,, hybridsökning, , och gränssnittkomponenter
- Del 5: Hybridsökning & Auto-Indexering - Produktionsintegreringsmönster
- Del 6: GraphRAG - kunskapsgrafer för korpusen
RAG (Retrieval-Augmented GenerationM SK2 utvecklades för att göra AI smartare — som ger LLMs tillgång till information de inte var utbildade på . Men här är vad, ' det intressanta, ' den teknologin öppnar upp möjligheter långt bortom AI chatboter M SK9 Den ger makt till semantisk sökningar på webbsidorna Mska10 innehållsbeveelning, Mska11 hjälp när man skriver, M Ska12 och kunskapsmanagement, Mkka13
Den dubbla naturen: RAG kan hjälpa kunder | ( | bättre sökningar | , | korrekta svar med citationer | МSK2 | eller utnyttja dem |( | manipulativa förslag ♫ , | begravande negativa recensioner ♪ , | uppsellerande uppsellning av innehåll ♪
Här är sanningen om RAG Det låter skrämmande, men precis som allt annat i mjukvaran, så handlar det bara om att förstå hur den fungerar.
RAG i tre steg:
- Omvandla text till siffror (inbäddar)
- Hitta liknande tal (vectorssuche)
- Använd vad du funnit (display results or feed to LLM
Det "'" är det "." resten är implementeringsdetails
Den här serien visar er hur man bygger RAG-system med fungerande C# kode . Inget handdragning M SK2 Inga antaganden . Bara bitar och hur de passar ihop
Vad du kommer lära dig i den här serien
- Del 1 (den här artikelnM SK2: Hur RAG skapades och varför det spelar roll
- Del 2: Komplett teknisk arkitektur och LLM-interner
- Del 3: Att bygga riktiga system med kodexempler
Senare kommer jag också visa er hur man bygger kompletta RAG-system inklusive
- CPU-vänliga semantiska sökningar med ONNX inbäddar (Teil 4)
- Self-drivna vektordatabaser med Qdrant (Teil 4)
- Hybridsökning och automatisk indexering (Teil 5)
Vad är RAG?
Uppfinning-Augmented Generation: hitta den relevanta informationen, och använda den
flowchart LR
A[User Question] --> B[Retrieve Relevant Info]
B --> C[Retrieved Documents/Context]
C --> D[Generate Response]
A --> D
D --> E[Grounded, Accurate Answer]
style B stroke:#f9f,stroke-width:2px
style D stroke:#bbf,stroke-width:2px
Utan RAG: Användaren frågar → LLM gissar från minnet → kan hallucinera
Med RAG: Användaren frågar → Hitta relevanta dokument → LLM svara med hjälp av dessa dokument | → grundade i verkligheten
// Without RAG: Hope the LLM knows
var answer = await llm.GenerateAsync("How do I deploy Docker?");
// Risk: Might make up outdated or wrong steps
// With RAG: Give it the docs
var relevantDocs = await vectorSearch.FindSimilar("How do I deploy Docker?");
var context = string.Join("\n", relevantDocs.Select(d => d.Text));
var answer = await llm.GenerateAsync($"Context: {context}\n\nQuestion: How do I deploy Docker?");
// Result: Answer based on YOUR actual Docker deployment docs
Nyckelinsikten: Separerade kunskapsskivor (sökningar ) från resonemang | ( | LLM | МSK3 | Datera upp dina dokument |, | sökandet stannar aktuellt
Var kom RAG ifrån?
RAG bygger på årtionden av sökande och NLP-forskning
Traditionella sökningar (pre-2010sM SK2
Keyword-baserade sökningar:
- TF-IDF: Lauftidsfrekvens × omvänd dokumentfrequens - vanliga ord betyder mindre
- BM25: Probabilistisk ranking - är fortfarande grundlinjen för sökord
- Fuzzy matchning:
- Soundex: Telefonisk algoritm ("Smith
- Avstånd:: Redigera avstånd ( hur många inkorporationer
- N-Gramer: tecken / ordsekvenser för partiellt matchning
Problemet: De här matchade tecken, inte mening. sök "containerorchesterning" och du kommer att vinnaM SK3 hittar du inte ♫ "Dockerswarm ♫ МSK5 ♫ om de exakta orden inte dyker upp
Svar på tidiga frågor (2010s)
Watson (IBM
- Kombinerad sökning med regeln-baserade resonemang
- Won Jeopardy ! men krävde massiv hand- skapad kunskapsingenjörskonst
- Fortfarande litade vi mycket på Keyword matching
Läsande förståelsemodeller:
- Could extract answers from provided passages
- Men du var tvungen att ge dem rätt väg först.
- Ingen semantisk sökning för att hitta passagen
Den djupinlärningsrevolutionen (2017+)
Transformator (2017): "Attityd är allt du behöver"
- Neuronätverk som kunde förstå sammanhanget
- Fundament för allt som följde
BERT (2018):
- Kontextuellt förståelse av språk
- "Banken, " betyder olika saker i ", flodbank, ", jämfört med ", sparande bank, "
- Could generate embeddings that captured meaning
GPT-2/3 M SK1
- Stora språkmodeller som kunde generera konsekvent text
- Men begränsat till deras utbildningsdata
- Hallucinationsproblem uppstod
Dense vektorrepresentationer:
- Text → meningsfulla siffror i hög dimension
- liknande betydelser → nära vektorer
- Detta gjorde det möjligt att göra semantiska sökningar
BART (Facebook AI
- Bidirektional och Auto-Regressiv förvandlare av Mike Lewis et al.
- Kombinerad BERT-liknande enkoder med GPT-liknasande dekoder
- Denoising av en självbyggare tränad av korrumperande text som sedan rekonstrueras
- Utmärkt för textskapande och förståelseuppgifter
- blev grunden för RAG
M2
- Först många-till-manliga flerspråkiga översättningsmodeller
- Direkt översättning mellan 100 språk utan engelska pivot
- 2,200 språkriktning (10x mer än tidigare modeller
- De visade förvandlararna kunde hantera massiva översättningar av språk
Verklig-world example: Min neural machine translation tool använder BART som en fallback-översättningsmodell när primära tjänster inte är tillgängliga.
Den moderna RAGs födelse ( Maj 2020)
Det avgörande papperet "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks" av Patrick Lewis et al
Vad de kombinerade
- Dense Passage Retrieval (DPR
- BART-generatör - den seq2seq-modellen från 2019
- Slutar -till - slutar différerabla arkitekturer - hämtar och genererar tillsammans
Resultaten: RAG-system presterade bättre än mycket större modeller på kunskap.
Varför exploderade RAG?
ChatGPT, GPT -4, och Claude gjorde RAG nödvändigt
- Hallucinationsproblem - LLMs hittar på fakta utan tvekan . RAG baserar på svar i riktiga dokument
- Knyvets-utbrott - LLMs som tränats med data från 2021 vet inte om | | ' | händelser | МSK4 | RAG använder nuvarande dokument
- Privatdata - LLMs kan ' inte få tillgång till ditt företag
- kostnaderna - Fint-LLMs tunning är dyrt ($10KM SK3K~+). RAG är billigt | | 5 | lagring | 6 | inbäddar | 7
- Förklaring - RAG kan citera källor , så att den är kontrollbar och tillförlitlig
Idag (2024-2025): RAG är de facto standarden för produktions-AI-system som behöver exakthet och kontrollerability
Hur RAG fungerar: Den stora bilden
Innan vi dyker djupt in i de tekniska detaljerna ( som vi ' kommer att omfatta i del | 2), | låter ' | förstå den höga ♫ - ♫ nivån av arbetsflödet
De tre faserna
RAG-system fungerar i tre olika stadier:
Fasen 1: Indisering (En | - | Timing Settings
flowchart LR
A[Your Documents] --> B[Split into Chunks]
B --> C[Generate Embeddings]
C --> D[Store in Vector DB]
style C stroke:#f9f,stroke-width:2px
style D stroke:#bbf,stroke-width:2px
Vad händer?
- Ta din kunskapsbas (docs, bloggar
- Splittra in i skötbara chunks (paragrafer , sektioner)
- Omvandla varje stycke till en vektor som inbäddar (sorter av siffror)
- Speichera vektorer i en databas optimerad för likhetsökning
Key concept: Samma betydelser skapar liknande vektorer , så "Dockercontainern " och "containeriseringsplattformen M SK4 hamnar nära varandra i vektorn
Fas 2: Tillförsel (Varenda fråga)
flowchart LR
A[User Question] --> B[Generate Query Embedding]
B --> C[Search Vector DB]
C --> D[Top K Most Similar Chunks]
style B stroke:#f9f,stroke-width:2px
style C stroke:#bbf,stroke-width:2px
Vad händer?
- Användaren ställer en fråga
- Konvertera frågan till en vektor ( Samma modell som används för indexeringM SK1
- Hitta de mest liknande vektorerna i databasen
- Ge uppe K de mest relevanta skivorna ( vanligtvis 3-10)
Varför det fungerar: " Hur ska jag utsätta behållare? ?" | | ( | fråga | ) | är semantiskt lika med fragment om Dockers utplacering
Fas 3: Generering | ( | Varje fråga |)
flowchart TB
A[User Question] --> B[Build Prompt]
C[Retrieved Context] --> B
B --> D[LLM]
D --> E[Generated Answer with Citations]
style B stroke:#f9f,stroke-width:2px
style D stroke:#bbf,stroke-width:2px
Vad händer?
- Ta user's fråga
- Ta de hämtade kontextklossarna
- Konstruera en prompt : "Given this context
- skicka till LLM för att generera
- LLM ger ett svar baserat på den förmedlade kontexten
Magien: LLM kan hallucinera fakta som inte finns i sammanhanget. Det kan bara syntetisera och förklara vad
Ett enkelt exempel
Låt oss spåra en fråga genom systemet
Användaren frågar: " Hur använder jag Docker Compose?"
steg 1 - Lösning
Query embedding: [0.234, -0.891, 0.567, ...]
Search vector DB for similar embeddings...
Retrieved chunks:
1. "Docker Compose is a tool for defining multi-container applications..." (similarity: 0.92)
2. "To use Docker Compose, create a docker-compose.yml file..." (similarity: 0.87)
3. "The docker-compose up command starts all services..." (similarity: 0.83)
steg 2 - Generering
Prompt to LLM:
"Context:
[1] Docker Compose is a tool for defining multi-container applications...
[2] To use Docker Compose, create a docker-compose.yml file...
[3] The docker-compose up command starts all services...
Question: How do I use Docker Compose?
Answer (use the context above):"
LLM Response:
"To use Docker Compose [1], start by creating a docker-compose.yml file [2] that
defines your services. Then run 'docker-compose up' to start all services [3]..."
Resultat: Ett korrekt svar med implika citationer från din dokumentation.
RAG vs. Andra angreppssätt
För att förstå när man ska använda RAG ( och när man inte ska använda ) måste man jämföra det med alternativ
RAG vs. Bra-Tuning
| Aspect | RAG | Fin - Anpassning | ||||||
|---|---|---|---|---|---|---|---|---|
| Nutida kunskaper | Omedelbart | bara uppdatera kunskapsbasen | МSK2 | kräver omutbildning | ||||
| kostnaderna | lågt | ( | lagring ♫ + | inbäddar ♫ ) | högt ♫ МSK5 | GPU utbildningstid ♫ | ||
| Precision | Begrundat i källor | Kan hallucinera | ||||||
| Customisering | Begränsat med att få fram data | djup modellanpassning | ||||||
| Förklaring | Högt ( kan citera källor) | lågt ♫ ( ♫ svarta lådan ♫ | ||||||
| Den bästa för | kunskapen-intensiva uppgifter |
När ska man använda Fine-Tuning:
- Du behöver modellen för att lära dig en specifik styl eller format
- Du har en stor, ren datauppsättning
- Man behöver modellen för att internalisera mönster, inte fakta
- exempel: Att få GPT att skriva som Shakespeare
När använda RAG:
- Du behöver faktiska precision med citat
- Din kunskapsbas förändras ofta
- Du har privata data
- kostnad och enkelhet
- exempel: Kundensupport chatbot (my companyM SK2docs ändras varje vecka
Kan du kombinera båda? Ja! BraM SK1 tur för stilen , RAG för fakta
RAG vs. Langa Kontext Windows
Moderna LLMs skryter om enorma kontextfenster (GPT-4: 128K tokensM SK3 ClaudeMST4 | | MST5 | K token | SST6 | Varför inte bara kappa alla dina dokument i kontexten
Problemet med lång kontext:
- kostnaderna: Pricing skalar med tokens | | - | $10-100 | per fråga ökar snabbt
- Tillfällighet: Processering 100K-token tar tid
- Förlust i mitten: LLMs kämpar för att använda information mitt i långa sammanhang
- Dilution: relevant information göms i oväsen
- Praktiska gränser: Du kan ' inte få plats med hela ditt företag
När lång kontext är logiskt:
- Ett enda stort dokument (e.gM SK2 för att analysera ett kontrakt
- Allt är relevant (utan behöva filtrera
- "Kosten är inte orolig"
- låg efterfrågans volym
När RAG är logiskt:
- Den stora kunskapsbasen (miljoner dokument
- Det behövs att hitta relevanta undergrupper
- Hög efterfrågans volym (kostnader
- Real-time-updater till kunskap
Vad man gör bäst: Använd RAG för att välja den mest relevanta innehållet
RAG vs. Prompting med exempel
Väldigt få "-", Shot prompting , "(", som ger exempel i Prompt , och МSK2 , är en enkel basnivå.
exempel prompt:
Examples:
Q: What is Docker?
A: Docker is a containerization platform...
Q: How does Kubernetes work?
A: Kubernetes orchestrates containers...
Q: What is my new question?
A: [LLM generates answer]
Begränsningar:
- Begränsat till vad som passar i ett kontextfenster
- Handutskrifter av exempel
- Skalar inte till stora kunskapsbaser
- Inget semantiskt sök - så kan du manualt välja exempel
RAG förbättring:
- Automatiskt hittar de bästa exemplen (med hjälp av likhetssökningar)
- Skalar till oändliga exempel ( endast uppe K skickat till LLM)
- Adapterar till query (different queries retrieve different examples)
Man kan föreställa sig RAG som "automatiserad få -flygproppar på skalan ."
Hybridsökning: RAG + Traditionellsökning
Du kan kombinera RAG med traditionell full search -text genom Reciprocal Rank Fusion (RRF).
Varför hybrida?
- Semantiska sökningar: Bra för konceptuella matchar (" felbekämpning
- Keywords-sökning: Bra för exakta villkor ("Docker Compose
- Hybrid: Den bästa av båda världarna
public async Task<List<SearchResult>> HybridSearchAsync(string query)
{
// Run both searches in parallel
var semanticTask = SemanticSearchAsync(query, limit: 20);
var keywordTask = KeywordSearchAsync(query, limit: 20);
await Task.WhenAll(semanticTask, keywordTask);
var semanticResults = await semanticTask;
var keywordResults = await keywordTask;
// Combine using Reciprocal Rank Fusion
return ApplyRRF(semanticResults, keywordResults);
}
private List<SearchResult> ApplyRRF(
List<SearchResult> list1,
List<SearchResult> list2,
int k = 60)
{
var scores = new Dictionary<string, double>();
// Score from first list
for (int i = 0; i < list1.Count; i++)
{
var id = list1[i].Id;
scores[id] = scores.GetValueOrDefault(id, 0) + 1.0 / (k + i + 1);
}
// Score from second list
for (int i = 0; i < list2.Count; i++)
{
var id = list2[i].Id;
scores[id] = scores.GetValueOrDefault(id, 0) + 1.0 / (k + i + 1);
}
// Merge and sort by combined score
var allResults = list1.Concat(list2)
.GroupBy(r => r.Id)
.Select(g => g.First())
.OrderByDescending(r => scores[r.Id])
.ToList();
return allResults;
}
Varför RAG spelar roll
Nu när ni förstår vad RAG är, varifrån kommer det, och hur det jämförs med alternativa, så är det viktigt
1. Demokratisering av AI
- Du behöver inte en beskattning
- Du behöver inte ett team av ML-ingenjörer
- Alla utvecklare kan bygga RAG-system med existerande verktyg
2. Praktisk noggrannhet
- Hallucinationer är det #1 problemet med LLMs i produktion
- RAG löser det genom att basera på svar i riktiga dokument
- Citationer gör det kontrollbart och tillförlitligt
3. alltid uppåt
- Traditionell AI: Train once , kunskap är frusen
- RAG: Datera upp dina dokument, kunskapsaktualiseringar omedelbart
- Kritiskt för snabba domains
4. Privatliv och kontroll
- Din data stannar i din infrastruktur
- Kan köra fullständigt lokalt (lokala embeddings + lokal LLM ♫ ♫ + ♫ Lokala vektor DB ♫
- Ingen data skickad till OpenAI eller andra cloud-provider
5. kostnad - Effektiv
- Storage är billigt (pennies per GB)
- Embedding är billigt (fraktioner av en cent per 1000 dokument
- Mycket billigare än fin-passning eller långa kontextfenster
6. varierande tillämpningar
- Semantiska sökningar ( inget LLM behövs!)
- Q&A system med citat
- innehållsrecommendation
- Redare
- kunskapsmanagement
- Dokumentationsassistenter
- Forskningsassistenter
slutsats : Från historien till implementation
Vi har spårat RAGs utveckling
- Pre-2010s: Keyword search
- 2010s: Förståelsen för läsning ( krävde rätt passage
- 2017-2020: Omvandlare och inbäddar (medvetande → vektorer)
- 2020: Modern RAG (avlägsna ♫ ♫ + ♫ generera ♫
- 2023-Present: produktionsstandard
Nyckelinsikter från del 1:
- RAG separerar kunskapslager (vector DB) från resonemang (LLM)
- Det löser hallucinationsproblemet genom att basera reaktioner på riktiga dokument
- Det är billigare och mer flexibelt än det fina
- Det fungerar bättre än en lång kontext för stora kunskapsbaser
- Det är i grund och botten
Den treste mentala modellen
- Omvandla text till siffror (inbäddar)
- Hitta liknande tal (vectorssuche)
- Använd vad du har funnit (display eller mata till LLM
Allt annat är optimering.
Continue to Part 2: Architecture and Internals
Ni förstår nu vad RAG är, varför det spelar roll var den kom från ".". Men hur funkar den egentligen under kapseln?
I Del 2: RAG arkitektur och inre, dyker vi djupt in i tekniska detaljer
Komplett RAG-torn
- Fasen 1: Indexering ( textextraktion | , | blockeringsstrategier |, | embedding generation |
- Fas 2: Tillförsel ( sökintegreringar , likhetsmätriker
- Fasen 3: Generering ( snabbt konstruerad konstruktion, LLM-parameternM SK3 efterprocessingMSC4 bearbetande
LLM insidan:
- Vad är tokens och varför de är viktiga för RAG
- KV cache: Hur LLMs minns kontexten
- Kontextfenster och tokenshanteringsstrategier
- Optimering av RAG för tokeneffektivitet och kostnad
Teknikliga djupdykar:
- Vektordatabaser och liknande sökalgoritmer
- Embedding av modeller och normalisering
- Maskerande strategier som bevarar kontext
- Praktiska exempel på koder i C#
Continue to Part 2: Architecture and Internals →
Efter del 2, kommer du | ' | vara redo för del ♪ 3, | där vi bygger riktiga system | , | lösa vanliga problem |, | och utforska avancerade tekniker som HyDE | МSK5 | multi | - | sök RAG | , | samt kontextuell kompression |.
resurser
Grunddokument:
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks - Den ursprungliga RAG pappret
- Dense Passage Retrieval for Open-Domain Question Answering - DPR
- Attityd är allt du behöver - Transformatorer ( inbyggd grund )
Weiterlesen:
- Hur Neurola maskinöversättning fungerar - Understanding the AI models behind embeddings
Nästa i denna serie:
- Del 2: RAG arkitektur och inre - Teknikligt djupdykning
- Del 3: RAG i praktiken - Att bygga riktiga system