Någonsin sökt efter "deployment guide" och fått ingenting, även om det finns en artikel om "publicering till produktion"? RAG (Retrieval-Augmented Generation) löser detta genom att förstå mening, inte bara nyckelord. Denna serie visar dig hur RAG kom till, hur det fungerar under huven, och hur man bygger produktionssystem. Från semantisk sökning till AI-drivna Q&A med citeringar – alla med fungerande C# kod exempel.
på serienavigering: Detta är del 1 av RAG-serien (Retrieval-Augmented Generation):
RAG (Retrieval-Augmented Generation) utvecklades för att göra AI smartare – ge LLMs tillgång till information de inte utbildades på. Men här är vad som är intressant: tekniken öppnar möjligheter långt bortom AI chatbots. Det driver semantisk sökning på webbplatser, innehållsrekommendation, skrivhjälp och kunskapshantering.
Den dubbla karaktären: RAG kan hjälpa kunder (bättre sökning, korrekta svar med citeringar) eller utnyttja dem (manipulativa rekommendationer, begrava negativa recensioner, dyka upp upsell innehåll). Skillnaden är inte tekniken-det är intention. En semantisk sökning som hjälper användare att hitta vad de faktiskt behöver? Bra. En som prioriterar vad som gör dig mest pengar medan visas hjälp? Det är mörkt mönster territorium, och det är därför förståelse hur detta fungerar spelar roll.
Här är sanningen om RAG: Det låter skrämmande. Vector inbäddar? Transformer modeller? KV caches? Men som allt annat i programvara, det handlar bara om att förstå hur det fungerar. Du behöver inte veta matematiken bakom transformatorarkitekturer mer än du behöver för att förstå montering för att skriva C#.
RAG i tre steg:
Resten är genomförandedetaljer.
Denna serie visar hur man bygger RAG-system med fungerande C#-kod. Ingen handvaxning. Inga antaganden. Bara bitar och hur de passar ihop.
Vad du kommer att lära dig i den här serien:
Senare ska jag också visa dig hur du bygger kompletta RAG-system inklusive:
Retrieval-Augmented Generation: Hitta relevant information och använd den sedan.
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 gissningar från minnet → kan hallucinate
För RAG: Användaren frågar → Hitta relevanta dokument → LLM svar med hjälp av dessa dokument → jordade 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
Nyckelinsikt: Separat kunskapslagring (sök) från resonemang (LLM). Uppdatera dina dokument, sök förblir aktuell. Ingen omskolning behövs.
RAG bygger på årtionden av sökning och NLP-forskning. Att förstå denna historia hjälper dig att förstå varför RAG är utformat som det är – och vilka problem det löser.
Nyckelordsbaserad sökning:
Problemet: Dessa matchade tecken, inte betydelseSök "container orkestrering" och du kommer inte att hitta "Docker Swarm" om inte dessa exakta ord visas. De kan hantera stavfel men inte semantik.
Watson (IBM, 2011):
Läsförståelsemodeller:
Transformatorer (2017): "Uppmärksamhet är allt du behöver"
BERT (2018):
GPT-2/3 (2019/2020):
Täta vektorrepresentationer:
BART (Facebook AI, oktober 2019):
M2M-100 (Facebook AI, oktober 2020):
Verkligt exempel: Mitt neural maskin översättningsverktyg använder BART som en reservöversättningsmodell när primära tjänster inte finns tillgängliga, vilket visar hur dessa transformatorbaserade modeller blev praktiska byggstenar för produktionssystem.
Seminariepapperet "Retrieval-Augmented Generation for Knowledge-Intensive NLP uppgifter" av Patrick Lewis et al. (Facebook AI Research) formellt introducerade RAG, bygger direkt på BART:
Vad de kombinerade:
Resultaten: RAG-system överträffade mycket större modeller på kunskapsintensiva uppgifter samtidigt som de var effektivare och modernare. Du kunde uppdatera kunskapsbasen utan att omskola modellen.
ChatgPT, GPT-4 och Claude gjorde RAG nödvändigt:
Idag (2024–2025): RAG är den faktiska standarden för produktion AI-system som behöver noggrannhet och auditability. Varje större AI-företag erbjuder RAG verktyg.
Innan du dyker djupt in i de tekniska detaljerna (som vi täcker i del 2), låt oss förstå högnivåarbetsflödet.
RAG-system fungerar i tre olika faser:
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:
Nyckelbegrepp: Liknande betydelser producerar liknande vektorer, så "Docker container" och "containerization plattform" hamnar nära varandra i vektorutrymme.
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:
Varför det fungerar: "Hur distribuerar jag containrar?" (query) är semantiskt lik bitar om Docker distribution, även om de exakta orden skiljer sig åt.
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:
Den magiska: LLM kan inte hallucinera fakta som inte finns i sammanhanget. Det kan bara syntetisera och förklara vad som tillhandahålls.
Låt oss spåra en fråga genom systemet:
Användaren frågar: "Hur använder jag Docker Compose?"
Steg 1 - Återhämtning:
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 – Generation:
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: Exakt svar med implicita citeringar från din dokumentation.
För att förstå när man ska använda RAG (och när man inte ska) krävs det att man jämför det med alternativ.
SYFTE OCH VERKSTÄLLIGHETER |--------|-----|-------------| | Kunskapsuppdateringar Omskolning krävs omedelbart (bara uppdatera kunskapsbasen). | Kostnad på låg (lagring + inbäddning) på hög (GPU-träningstid) | Noggrannhet på grund av källor kan hallucinera | Anpassning Obegränsad till hämtning på djup modellanpassning | Förklarande faktorer på hög (kan citera källor) på låg (svart låda) | Bästa för "Kunskapsintensiva uppgifter" Stil-/formatanpassning
När du ska använda Fine-Tuning:
När du ska använda RAG:
Kan du kombinera båda? Fint läge för stil, RAG för fakta.
Moderna LLMs skryter med enorma sammanhangsfönster (GPT-4: 128K polletter, Claude: 200K polletter). Varför inte bara dumpa alla dina dokument i sammanhanget?
Problem med långa sammanhang:
När ett långt sammanhang är vettigt:
När RAG är vettigt:
Bästa praxis: Använd RAG för att välja det mest relevanta innehållet, sedan använda långa sammanhang för den delmängd.
Få-shot frammanande (ger exempel i prompten) är en enkel baslinje.
Exempel på 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:
Förbättring av RAG:
Du kan tänka på RAG som "automatiserad några-shot frammana i skala."
Du kan kombinera RAG med traditionell fulltextsökning med hjälp av Reciprocal Rank Fusion (RRF).
Varför hybrid?
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;
}
Nu när du förstår vad RAG är, var det kom ifrån, och hur det jämförs med alternativ, här är varför det spelar roll:
1. Demokratisering av AI
2. Praktisk noggrannhet
3. Alltid up-to-dat
4. Sekretess och kontroll
5. Kostnadseffektivitet
6. Mångsidiga tillämpningar
Vi har spårat RAG:s utveckling:
Viktiga insikter från del 1:
Den trestegs mentala modellen:
Allt annat är optimering.
Du förstår nu vad RAG är, varför det är viktigt, och där Men hur fungerar det under huven?
Till Del 2: RAG:s arkitektur och interner, vi dyker djupt in i de tekniska detaljerna:
Fullständig RAG-ledning:
Inhemska LLM-enheter:
Tekniska djupdyk:
Fortsätt till del 2: Arkitektur och interner →
Efter del 2, kommer du att vara redo för del 3, där vi bygger riktiga system, löser gemensamma utmaningar, och utforska avancerade tekniker som HyDE, multi-query RAG, och kontextuell kompression.
Grunddokument:
Läs vidare:
Nästa i denna serie:
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.