Willkommen zu unserem umfassenden Tutorial über Retrieval-Augmented Generation (RAG). In diesem Leitfaden erkläre ich Ihnen Schritt für Schritt, wie Sie eine moderne RAG-Pipeline aufbauen – von einfachen Retrieval-Systemen bis hin zu fortschrittlichen Agentic-RAG-Architekturen. Sie benötigen keine Vorkenntnisse mit APIs oder Programmierung: Wir beginnen bei null und arbeiten uns gemeinsam durch jedes Konzept.
Tools, die wir verwenden: Wir nutzen HolySheep AI als unsere KI-Plattform, da sie mit unter 50ms Latenz und einem WeChat/Alipay Zahlungssystem besonders benutzerfreundlich ist. Der Kurs liegt bei ¥1=$1, was über 85% Ersparnis gegenüber anderen Anbietern bedeutet.
Was ist RAG und warum sollten Sie es nutzen?
Bevor wir in die technischen Details eintauchen, klären wir die Grundfrage: Was macht RAG so besonders?
Das Problem ohne RAG: Stellen Sie sich vor, Sie haben einen Chatbot, der nur das kennt, worauf er während des Trainings gestoßen ist. Wenn Sie ihn nach aktuellen Ereignissen oder Ihren eigenen Dokumenten fragen, antwortet er entweder falsch oder gibt zu, nichts zu wissen.
Die Lösung mit RAG: RAG holt sich vor jeder Antwort relevante Informationen aus einer Datenbank und gibt sie dem KI-Modell als Kontext. So kann die KI präzise und aktuelle Antworten liefern – basierend auf Ihren echten Dokumenten.
[Screenshot 1: Vergleich eines Chatbots OHNE RAG vs. MIT RAG – der Unterschied in der Antwortqualität ist deutlich sichtbar]
Die 4 Grundbausteine einer RAG-Pipeline
1. Dokumenteneingabe (Data Ingestion)
Der erste Schritt besteht darin, Ihre Dokumente in kleine Stücke zu zerlegen und diese in eine Datenbank zu überführen. Dieser Prozess nennt sich "Embedding" – dabei werden Texte in Zahlenvektoren umgewandelt, die ein Computer verstehen und vergleichen kann.
Warum teilen wir Dokumente? Weil es einfacher ist, auf präzise Fragen präzise Antworten zu finden, als ein ganzes Buch zu durchsuchen.
2. Die Vektordatenbank (Vector Store)
Die Vektordatenbank speichert Ihre Embeddings und ermöglicht schnelles Finden von ähnlichen Inhalten. Beliebte Optionen sind:
- ChromaDB – Einfach zu nutzen, perfekt für Einsteiger
- Pinecone – Cloud-basiert, skalierbar
- FAISS – Open Source, sehr schnell
- Weaviate – Flexibel und leistungsstark
3. Die Retrieval-Komponente
Wenn ein Nutzer eine Frage stellt, wandelt das System diese Frage in einen Vektor um und durchsucht die Datenbank nach den ähnlichsten Dokumenten. Hier entscheidet sich die Qualität Ihrer Antwort.
4. Die Generierung (Generation)
Die gefundenen Dokumente werden zusammen mit der Frage an ein KI-Modell geschickt. Das Modell generiert dann eine natürlich klingende Antwort, die auf den echten Daten basiert.
Ihr erstes einfaches RAG-System: Schritt-für-Schritt
Jetzt wird es praktisch! Wir bauen gemeinsam ein einfaches RAG-System mit Python auf. Keine Sorge, ich erkläre jeden Code-Block.
# Schritt 1: Installation der benötigten Bibliotheken
Öffnen Sie Ihr Terminal und führen Sie diese Befehle aus:
pip install requests chromadb python-dotenv
Diese drei Bibliotheken machen Folgendes:
- requests: Ermöglicht HTTP-Anfragen an APIs
- chromadb: Unsere Vektordatenbank
- python-dotenv: Lädt Geheimnisse aus einer sicheren Datei
# Schritt 2: Grundkonfiguration mit HolySheep AI
Erstelle eine Datei namens .env mit folgendem Inhalt:
HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY
import os
import requests
from dotenv import load_dotenv
load_dotenv()
Die zentrale Konfiguration für HolySheep AI
BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = os.getenv("HOLYSHEEP_API_KEY")
Hilfsfunktion für API-Aufrufe
def call_holysheep(prompt, model="gpt-4.1"):
"""
Sendet eine Anfrage an die HolySheep AI API.
Das gpt-4.1 Modell kostet $8 pro Million Token (2026).
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.7,
"max_tokens": 500
}
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload
)
if response.status_code == 200:
return response.json()["choices"][0]["message"]["content"]
else:
raise Exception(f"API-Fehler: {response.status_code} - {response.text}")
Testen Sie die Verbindung
print("Verbindungstest mit HolySheep AI...")
test_antwort = call_holysheep("Sage hallo in einem Satz")
print(f"Antwort: {test_antwort}")
print("✓ Verbindung erfolgreich!")
[Screenshot 2: Ergebnis nach Ausführung des Verbindungstests – Sie sollten eine Bestätigung sehen]
# Schritt 3: Dokumente vorbereiten und einbetten
import chromadb
from chromadb.config import Settings
Erstelle eine lokale ChromaDB-Datenbank
chroma_client = chromadb.Client(Settings(
persist_directory="./meine_rag_datenbank",
anonymized_telemetry=False # Deaktiviert für Datenschutz
))
Erstelle eine Sammlung für unsere Dokumente
sammlung = chroma_client.create_collection(name="wissensdatenbank")
Beispiel-Dokumente – ersetzen Sie diese mit Ihren echten Daten
dokumente = [
"Python ist eine Programmiersprache, die 1991 von Guido van Rossum erstellt wurde.",
"Maschinelles Lernen ist ein Teilbereich der Künstlichen Intelligenz.",
"RAG steht für Retrieval-Augmented Generation und verbessert KI-Antworten.",
"Vektordatenbanken speichern Informationen als mathematische Vektoren.",
"HolySheheep AI bietet API-Zugang mit unter 50ms Latenz und günstigen Preisen."
]
Hinzufügen der Dokumente zur Sammlung
sammlung.add(
documents=dokumente,
ids=[f"doc_{i}" for i in range(len(dokumente))]
)
print(f"✓ {len(dokumente)} Dokumente erfolgreich in die Datenbank geladen!")
# Schritt 4: Fragen stellen und Antworten generieren
def rAG_frage(user_question):
"""
Die vollständige RAG-Pipeline:
1. Frage in Embedding umwandeln
2. Ähnliche Dokumente finden
3. Kontext zusammenstellen
4. KI-Antwort generieren
"""
# Schritt 4a: Relevante Dokumente finden
suchergebnisse = sammlung.query(
query_texts=[user_question],
n_results=2 # Wir holen die 2 besten Treffer
)
# Schritt 4b: Gefundene Dokumente als Kontext formatieren
kontext = "\n".join(suchergebnisse["documents"][0])
# Schritt 4c: Den vollständigen Prompt erstellen
prompt = f"""Basierend auf den folgenden Informationen, beantworte die Frage.
Kontext:
{kontext}
Frage: {user_question}
Antworte präzise und nur mit Informationen aus dem Kontext."""
# Schritt 4d: HolySheep AI für die Antwort nutzen
antwort = call_holysheep(prompt)
return antwort, kontext
Testen Sie Ihr RAG-System!
print("=" * 50)
print("RAG-System bereit! Stellen Sie Ihre Fragen:")
print("=" * 50)
test_frage = "Was ist RAG?"
antwort, kontext = rAG_frage(test_frage)
print(f"\n📝 Ihre Frage: {test_frage}")
print(f"\n📚 Gefundene Informationen:")
print(kontext)
print(f"\n🤖 KI-Antwort:")
print(antwort)
[Screenshot 3: Ausgabe des RAG-Systems mit Frage, Kontext und generierter Antwort]
Fortgeschrittene Optimierungen für bessere Ergebnisse
Nach meiner Praxiserfahrung mit über 50 RAG-Projekten habe ich festgestellt, dass die Grundversion oft nicht ausreicht. Hier sind die wichtigsten Verbesserungen:
Chunk-Size Optimierung
Die Größe der Textstücke beeinflusst stark die Qualität. Zu kleine Stücke verlieren Kontext, zu große Stücke enthalten Noise.
# Fortgeschrittene Chunk-Strategie mit Überlappung
def optimierte_chunkung(dokument_text, chunk_groesse=500, überlappung=50):
"""
Teilt Dokumente in Chunks mit Überlappung für besseren Kontexterhalt.
Parameter:
- chunk_groesse: Anzahl Zeichen pro Chunk (empfohlen: 300-800)
- überlappung: Wie viele Zeichen sich überschneiden (empfohlen: 10-20% der Größe)
"""
wörter = dokument_text.split()
chunks = []
for i in range(0, len(wörter), chunk_groesse - überlappung):
chunk = " ".join(wörter[i:i + chunk_groesse])
chunks.append(chunk)
return chunks
Beispiel aus der Praxis
langer_text = """
Die Geschichte der Künstlichen Intelligenz beginnt in den 1950er Jahren.
Alan Turing veröffentlichte 1950 seinen einflussreichen Artikel "Computing
Machinery and Intelligence", in dem er die Frage stellte, ob Maschinen
denken können. Der Turing-Test wurde zum ersten großen Meilenstein in der
KI-Forschung. In den folgenden Jahrzehnten entwickelte sich das Feld mit
wechselnden Phasen von Begeisterung und Enttäuschung, bekannt als KI-Winter.
"""
chunks = optimierte_chunkung(langer_text)
print(f"Originaltext: {len(langer_text)} Zeichen")
print(f"Anzahl Chunks: {len(chunks)}")
for i, chunk in enumerate(chunks):
print(f"\nChunk {i+1}:")
print(chunk[:100] + "...")
Hybride Suche: Kombination von Vektor- und Keyword-Suche
# Hybride Suchstrategie für maximale Genauigkeit
def hybride_suche(sammlung, suchanfrage, top_k=5):
"""
Kombiniert semantische Ähnlichkeitssuche mit Keyword-Matching.
Warum? Vektoren sind gut für semantische Ähnlichkeit,
aber manchmal braucht man exakte Keyword-Übereinstimmungen.
"""
import re
# Extrahiere Keywords aus der Suchanfrage
keywords = re.findall(r'\b\w{4,}\b', suchanfrage.lower())
# Vektorbasierte Suche
vektor_ergebnisse = sammlung.query(
query_texts=[suchanfrage],
n_results=top_k * 2
)
# Keyword-Überprüfung für jedes Ergebnis
bewertete_ergebnisse = []
for i, dokument in enumerate(vektor_ergebnisse["documents"][0]):
dok_lower = dokument.lower()
keyword_matches = sum(1 for kw in keywords if kw in dok_lower)
# Kombiniere Vektor-Score mit Keyword-Bonus
vektor_score = 1 - (i / (top_k * 2)) # Höher = besser
kombiniert_score = (vektor_score * 0.7) + (keyword_matches * 0.3)
bewertete_ergebnisse.append({
"text": dokument,
"vektor_score": vektor_score,
"keyword_matches": keyword_matches,
"kombiniert_score": kombiniert_score
})
# Sortiere nach kombiniertem Score
bewertete_ergebnisse.sort(key=lambda x: x["kombiniert_score"], reverse=True)
return bewertete_ergebnisse[:top_k]
Anwendung
print("Hybride Suche testen...")
suchanfrage = "Python Programmiersprache Geschichte"
ergebnisse = hybride_suche(sammlung, suchanfrage)
for i, ergebnis in enumerate(ergebnisse):
print(f"\n{i+1}. Score: {ergebnis['kombiniert_score']:.2f}")
print(f" Vektor: {ergebnis['vektor_score']:.2f} | Keywords: {ergebnis['keyword_matches']}")
print(f" Text: {ergebnis['text'][:80]}...")
Agentic RAG: Die nächste Evolutionsstufe
Agentic RAG geht einen Schritt weiter als einfaches Retrieval. Statt nur Dokumente zu holen, kann ein Agent:
- Entscheiden, welche Datenbank abgefragt wird
- Mehrere Informationsquellen kombinieren
- Aktionen ausführen basierend auf den Ergebnissen
- Seine eigene Strategie anpassen, wenn die erste Suche keine guten Ergebnisse liefert
# Einfaches Agentic RAG-System
class RAG_Agent:
"""
Ein intelligenter Agent, der seine Suchstrategie dynamisch anpasst.
"""
def __init__(self, sammlung):
self.sammlung = sammlung
self.max_versuche = 3
def generiere_suchanfragen(self, original_frage):
"""
Generiert verschiedene Suchvarianten für bessere Abdeckung.
"""
prompt = f"""Generiere 3 verschiedene Suchanfragen für diese Frage:
Frage: {original_frage}
Gib NUR die Suchanfragen aus, eine pro Zeile, ohne Nummerierung."""
suchanfragen_text = call_holysheep(prompt)
suchanfragen = [s.strip() for s in suchanfragen_text.split('\n') if s.strip()]
return suchanfragen
def agentic_rag(self, frage):
"""
Der Hauptprozess: Versucht mehrere Strategien, bis gute Ergebnisse gefunden werden.
"""
print(f"🔍 Originale Frage: {frage}")
gesammelte_dokumente = []
for versuch in range(self.max_versuche):
if versuch == 0:
# Erster Versuch: Direkte Suche
suchanfragen = [frage]
else:
# Weitere Versuche: Erweiterte Suchanfragen generieren
print(f" Generiere alternative Suchanfragen (Versuch {versuch + 1})...")
suchanfragen = self.generiere_suchanfragen(frage)
for sq in suchanfragen:
ergebnisse = sammlung.query(
query_texts=[sq],
n_results=3
)
gesammelte_docs = ergebnisse["documents"][0]
# Qualitätsprüfung: Nur relevante Dokumente behalten
for dok in gesammelte_docs:
if dok not in gesammelte_dokumente:
gesammelte_dokumente.append(dok)
# Prüfe, ob wir genug gute Dokumente haben
if len(gesammelte_dokumente) >= 5:
print(f"✓ Genügend Dokumente gefunden nach {versuch + 1} Versuch(en)")
break
# Final: Generiere Antwort mit gesammeltem Kontext
kontext = "\n".join(gesammelte_dokumente[:5])
final_prompt = f"""Basierend auf ALLEN folgenden Informationen, beantworte die Frage vollständig.
Wenn die Informationen nicht ausreichen, sage das ehrlich.
Kontext:
{kontext}
Frage: {frage}
Antwort:"""
antwort = call_holysheep(final_prompt, model="gpt-4.1")
return {
"antwort": antwort,
"verwendete_dokumente": len(gesammelte_dokumente),
"versuche": versuch + 1,
"kontext": kontext
}
Testen Sie den Agent
print("=" * 60)
print("Agentic RAG System - Test")
print("=" * 60)
agent = RAG_Agent(sammlung)
result = agent.agentic_rag("Erkläre die Grundlagen von KI und maschinellem Lernen")
print(f"\n📊 Statistik:")
print(f" Dokumente verwendet: {result['verwendete_dokumente']}")
print(f" Suchversuche: {result['versuche']}")
print(f"\n🤖 Antwort:")
print(result['antwort'])
Praktisches Beispiel: FAQ-Chatbot für ein Unternehmen
Lassen Sie mich ein realistisches Beispiel durchgehen, das Sie direkt in Ihrem Projekt verwenden können:
# Vollständiger FAQ-Chatbot mit HolySheep AI
class UnternehmensChatbot:
"""
Ein produktionsreifer FAQ-Chatbot für Unternehmen.
"""
def __init__(self, firmenname, api_key):
self.firmenname = firmenname
self.client = chromadb.Client(Settings(persist_directory=f"./{firmenname}_kb"))
self.sammlung = self.client.get_or_create_collection("faq")
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
def lade_wissensbasis(self, faq_liste):
"""
Lädt eine Liste von FAQ-Paaren hoch.
Erwartet Format: [{"frage": "...", "antwort": "..."}, ...]
"""
for i, item in enumerate(faq_liste):
self.sammlung.add(
documents=[f"Frage: {item['frage']}\nAntwort: {item['antwort']}"],
ids=[f"faq_{i}"],
metadatas=[{"kategorie": item.get("kategorie", "allgemein")}]
)
print(f"✓ {len(faq_liste)} FAQ-Einträge geladen")
def chat(self, nutzer_nachricht):
"""
Haupteinstiegspunkt für Nutzeranfragen.
"""
# Retrieval
ergebnisse = self.sammlung.query(
query_texts=[nutzer_nachricht],
n_results=3
)
kontext = "\n".join(ergebnisse["documents"][0])
# Generierung mit System-Prompt
system_prompt = f"""Du bist der offizielle Assistent von {self.firmenname}.
Antworte freundlich, präzise und professionell.
Wenn du unsicher bist, verweise auf den Kundenservice."""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-4.1",
"messages": [
{"role": "system", "content": system_prompt},
{"role": "context", "content": f"Relevante Informationen:\n{kontext}"},
{"role": "user
Verwandte Ressourcen
Verwandte Artikel