RAG: Retrieval-Augmented Generation
Giv din LLM adgang til opdateret viden, virksomhedsdata og private dokumenter uden at fine-tune. RAG er fremtidens måde at bygge intelligente AI applikationer på.
Hvad er RAG?
RAG står for Retrieval-Augmented Generation - en teknik hvor du først finder (retriever) relevant information fra en vidensbase, og derefter bruger den som kontekst når LLM'en genererer sit svar.
I stedet for at stole på hvad modellen "husker" fra sin træning, giver du den præcis den information den har brug for til at besvare spørgsmålet.
Simpelt forklaret:
Det er som at have en assistent der først slår op i relevant dokumentation, og derefter bruger det de fandt til at give dig et godt svar - i stedet for at gætte baseret på hvad de husker.
Hvorfor Bruge RAG?
✅Opdateret Information
LLMs har en knowledge cutoff dato. Med RAG kan du give dem adgang til den nyeste information fra dine databaser eller internettet.
✅Private Data
Brug dine egne dokumenter, wikis, og databaser uden at skulle fine-tune eller uploade sensitiv data til træning.
✅Reducér Hallucinations
Når modellen har konkret information at referere til, er den mindre tilbøjelig til at opfinde facts.
✅Source Citations
Du kan vise brugere præcis hvilke dokumenter der blev brugt, så de kan verificere informationen.
✅Cost-Effective
Meget billigere end fine-tuning, og du kan opdatere din vidensbase når som helst uden at re-træne.
✅Dynamisk Viden
Tilføj, opdater eller fjern information i real-time uden at skulle re-deploye din model.
Sådan Fungerer RAG
Forbered Din Vidensbase
Opdel dine dokumenter i mindre "chunks" (typisk 200-500 tokens hver). Dette gør det lettere at finde præcis relevante dele.
Eksempel:
En 50-siders manual opdeles i ~200 små chunks, hver med et afsnit eller koncept.
Generér Embeddings
Konverter hver chunk til en "embedding" - en numerisk vektor der repræsenterer meningen af teksten. Lignende tekster får lignende vektorer.
Populære embedding modeller:
- • OpenAI: text-embedding-3-small/large
- • Cohere: embed-multilingual-v3.0
- • Open source: sentence-transformers
Gem i Vector Database
Gem alle embeddings i en vector database der kan søge effektivt efter semantisk lignende vektorer.
Pinecone
Managed cloud service
Weaviate
Open source & cloud
Chroma
Simple & embedded
Qdrant
High performance
Retrieval: Find Relevant Info
Når brugeren stiller et spørgsmål, generer du også en embedding af spørgsmålet og søger efter de mest lignende chunks i din database.
Spørgsmål: "Hvordan nulstiller jeg mit password?"
Finder: Top 3-5 chunks om password reset fra dokumentationen
Augmentation: Byg Prompt
Kombiner brugerens spørgsmål med den relevante information du fandt, og send det hele til LLM'en.
Her er relevant dokumentation: [Chunk 1: Password reset instruktioner...] [Chunk 2: Sikkerhedspolitik for passwords...] Brugerens spørgsmål: Hvordan nulstiller jeg mit password? Besvar spørgsmålet baseret på dokumentationen.
Generation: LLM Svarer
LLM'en bruger den givne kontekst til at generere et præcist, faktuel svar baseret på din virksomheds dokumentation.
Hvordan Implementerer Du RAG
Quick Start: Simpel Python Implementation
# 1. Installer dependencies
pip install openai chromadb
# 2. Forbered data og opret embeddings
import chromadb
from openai import OpenAI
client = OpenAI()
chroma_client = chromadb.Client()
collection = chroma_client.create_collection("docs")
# 3. Tilføj dokumenter
documents = [
"For at nulstille password, gå til indstillinger...",
"Vores sikkerhedspolitik kræver at passwords...",
]
for i, doc in enumerate(documents):
collection.add(
documents=[doc],
ids=[f"doc_{i}"]
)
# 4. Retrieval + Generation
def rag_query(question):
# Find relevante dokumenter
results = collection.query(
query_texts=[question],
n_results=3
)
# Byg context
context = "\n".join(results['documents'][0])
# Generer svar
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Besvar baseret på konteksten"},
{"role": "user", "content": f"Context: {context}\n\nQ: {question}"}
]
)
return response.choices[0].message.content
# 5. Brug det
answer = rag_query("Hvordan nulstiller jeg password?")
print(answer)Frameworks & Tools
LangChain
Mest populære framework til at bygge RAG pipelines. Mange integrationer.
Python & JavaScript
LlamaIndex
Specialiseret i data ingestion og intelligent retrieval.
Python & TypeScript
Haystack
Open source framework med fokus på production-ready RAG.
Python
Vercel AI SDK
Moderne TypeScript framework til AI apps med RAG support.
TypeScript
Best Practices
Chunk Size er Kritisk
For små chunks mangler kontekst. For store chunks har irrelevant info. Start med 300-500 tokens og eksperimenter.
Brug Metadata til Filtrering
Tilføj metadata som dato, forfatter, kategori. Så kan du filtrere søgningen til kun relevante dokumenttyper.
Hybrid Search
Kombiner semantic search (embeddings) med keyword search for bedre resultater, især med tekniske termer.
Rerank Results
Brug en reranking model til at sortere retrieved chunks mere præcist før du sender dem til LLM'en.
Citér Sources
Inkluder altid source citations så brugere kan verificere informationen. Øger tilliden markant.
Håndter "No Results"
Hvis retrieval ikke finder noget relevant, instruér LLM'en til at sige "Jeg har ikke information om det" i stedet for at gætte.
Populære RAG Use Cases
📚 Dokumentations-Chatbot
Hjælp brugere med at finde svar i produktdokumentation, wikis, eller manualer.
🎓 Intern Vidensbase
Gør virksomhedens policies, procedurer og viden søgbar og tilgængelig.
💼 Customer Support
Automatiser support ved at søge i tidligere tickets og support artikler.
📊 Research Assistant
Søg gennem research papers, rapporter og noter for at finde relevant information.
⚖️ Legal & Compliance
Find relevant love, regulativer og compliance krav i store dokumentsamlinger.
🛍️ E-commerce
Produktanbefalinger og Q&A baseret på produktkataloger og reviews.