KI-Apps entwickeln — APIs richtig nutzen
Kapitel 3 · Theorie

RAG — Retrieval Augmented Generation

Problem: LLMs kennen deine Dokumente nicht. Lösung: Vor jeder Anfrage relevante Dokumentteile suchen und mitschicken.

Pipeline in 5 Schritten

  1. Indexieren: Dokumente in Chunks teilen (~500 Token), Embeddings berechnen, in Vector-DB speichern.
  2. Abfrage: Nutzerfrage in Embedding umwandeln.
  3. Retrieval: Top-k ähnlichste Chunks finden (Cosine Similarity).
  4. Augmentation: Chunks an den Prompt anhängen.
  5. Generation: LLM antwortet basierend auf den abgerufenen Inhalten.

Beispiel — minimal RAG mit Python

from openai import OpenAI
import chromadb

client = OpenAI()
chroma = chromadb.Client()
collection = chroma.create_collection("docs")

# Indexieren
def index(text, id):
    emb = client.embeddings.create(model="text-embedding-3-small", input=text)
    collection.add(documents=[text], embeddings=[emb.data[0].embedding], ids=[id])

# Abfragen
def ask(question):
    q_emb = client.embeddings.create(model="text-embedding-3-small", input=question)
    results = collection.query(query_embeddings=[q_emb.data[0].embedding], n_results=3)
    context = "\n".join(results['documents'][0])
    prompt = f"Kontext:\n{context}\n\nFrage: {question}"
    return client.chat.completions.create(
        model="gpt-4o", messages=[{"role": "user", "content": prompt}]
    ).choices[0].message.content

Vector-Datenbanken

DBStärkenSetup
ChromaLokal, simpel, Python-freundlich1 Zeile
PineconeManaged, sehr skalierbarAPI-Key
QdrantOpen-Source, Self-Hosted, schnellDocker
WeaviateGraphQL, Multi-ModalDocker/Cloud
pgvectorPostgreSQL-ErweiterungSQL-Befehl
🎯
Chunking-TippZu klein = Kontext verloren. Zu groß = irrelevant. Sweet spot: 500-1000 Tokens mit 100 Token Overlap zwischen Chunks. Bei strukturierten Dokumenten: nach Sections splitten, nicht nach fester Länge.
Zurück zu Künstliche Intelligenz