0Pricing
AI Engineering Academy · Lektion

Warum Evaluation bei RAG wichtig ist

Sie verstehen die zwei unabhängigen Fehlermodi in RAG-Systemen: Fehler beim Retrieval und Fehler bei der Generierung, und lernen, warum Sie zur Diagnose getrennte Metriken benötigen.

Warum Evaluation bei RAG wichtig ist ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Was Sie nicht messen, können Sie nicht verbessern

Ein RAG-System kann den Eindruck erwecken, zu funktionieren, weil es flüssige und plausibel klingende Antworten zurückgibt. Ohne Messungen wissen Sie jedoch nicht, ob es wirklich die richtigen Chunks abruft oder verlässliche Antworten erzeugt. Teams, die auf Evaluierung verzichten, verbringen oft Monate damit, Chunking-Strategien und Prompt-Formate nach Gefühl anzupassen, nur um festzustellen, dass sie die Ergebnisse verschlechtert haben. Eine rigorose Evaluierung macht aus der Entwicklung von RAG kein Raten, sondern Engineering.

Zwei unabhängige Fehlerarten

RAG umfasst zwei voneinander unabhängige Phasen, in denen Fehler auftreten können: Retrieval und Generierung. Beim Retrieval tritt ein Fehler auf, wenn die relevanten Chunks nicht in den Top-K-Ergebnissen auftauchen – das LLM kann keine gute Antwort generieren, wenn die richtigen Informationen gar nicht abgerufen wurden. Bei der Generierung tritt ein Fehler auf, wenn die richtigen Chunks abgerufen wurden, das LLM sie jedoch ignoriert, falsch interpretiert oder halluzinierte Informationen hinzufügt. Sie benötigen separate Metriken für jede Phase, um genau zu bestimmen, welche Komponente das Problem verursacht.

Die Gefahr einer ausschließlichen End-to-End-Evaluierung

Wenn Sie nur die Qualität der endgültigen Antwort messen, bleibt verborgen, woher die Fehler stammen. Angenommen, Ihr System liefert in 30 % der Fälle falsche Antworten. Liegt das daran, dass beim Retrieval die richtigen Chunks fehlen, oder daran, dass das LLM gute Chunks ignoriert? Wenn Sie nur die endgültige Fehlerrate kennen, können Sie nicht feststellen, welche Komponente Sie korrigieren müssen. Instrumentieren Sie beide Phasen getrennt: Messen Sie die Retrieval-Qualität anhand von Golden Datasets und die Generierungsqualität anhand von Faithfulness-Werten.

# Diagnosis example: which stage is failing?

# Test 1: Is retrieval finding the right chunks?
retrieval_hit_rate = evaluate_retrieval(questions, ground_truth_chunks)
print(f'Retrieval hit rate@5: {retrieval_hit_rate:.1%}')
# If this is low (< 80%), fix chunking and embedding first

# Test 2: Given perfect context, does LLM generate correct answers?
generation_faithfulness = evaluate_generation(questions, perfect_context)
print(f'Generation faithfulness: {generation_faithfulness:.1%}')
# If retrieval is fine but this is low, fix your prompts

Ein Golden Dataset erstellen

Für die Evaluierung benötigen Sie ein Golden Dataset: eine Menge von Frage-Antwort-Paaren, bei denen Sie die richtige Antwort kennen und idealerweise auch wissen, aus welchem Dokument und Chunk die Antwort stammt. Für einen minimalen, aber funktionsfähigen Evaluierungssatz sammeln Sie 50–100 Fragen, die typische echte Benutzeranfragen repräsentieren. Beantworten Sie sie manuell oder indem Sie die Quelldokumente lesen. Berücksichtigen Sie verschiedene Fragetypen: das Nachschlagen von Fakten, Vergleiche, Multi-Hop-Schlussfolgerungen und Fragen außerhalb des Fachgebiets, die das System ablehnen sollte.

# Golden dataset format
golden_dataset = [
    {
        'question': 'How many vacation days do employees receive in their first year?',
        'answer': '15 days',
        'relevant_chunks': ['employee_handbook_p24', 'benefits_summary_p3'],
        'source_doc': 'employee_handbook_2025.pdf'
    },
    {
        'question': 'What is the parental leave duration for primary caregivers?',
        'answer': '16 weeks fully paid',
        'relevant_chunks': ['parental_leave_policy_p1'],
        'source_doc': 'parental_leave_policy.pdf'
    }
]

Golden Datasets mit LLMs generieren

100 Fragen manuell zu erstellen, ist mühsam. Beschleunigen Sie diesen Prozess mit einem LLM zur Datengenerierung: Übergeben Sie jeden Dokument-Chunk an GPT-4o und bitten Sie es, 3–5 vielfältige Fragen zu generieren, deren Antworten in diesem Chunk zu finden sind, sowie den erwarteten Antworttext. Prüfen Sie manuell eine Stichprobe, um Qualitätsprobleme zu erkennen. Dieser Ansatz lässt sich schnell auf Tausende von Fragen skalieren, übersieht jedoch möglicherweise Sonderfälle, die nur echte Benutzer stellen würden.

def generate_qa_pairs_for_chunk(chunk_text, llm_client):
    prompt = (
        'Given the following document excerpt, generate 3 diverse questions '
        'that can be answered using ONLY this text. '
        'For each question, provide the exact answer from the text.\n\n'
        f'Text:\n{chunk_text}\n\n'
        'Format each as JSON: {"question": ..., "answer": ...}'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Retrieval-Evaluierung: Trefferquote

Hit Rate@K ist der Anteil der Fragen, bei denen mindestens ein relevanter Chunk in den Top-K-Retrieval-Ergebnissen erscheint. Dies ist die einfachste und intuitivste Retrieval-Metrik. Eine Hit Rate@5 von 85 % bedeutet, dass sich bei 85 von 100 Fragen der relevante Chunk unter den fünf besten Ergebnissen befand. Erfassen Sie die Hit Rate getrennt für verschiedene Dokumenttypen, Abfragelängen und Themenkategorien, um herauszufinden, wo Ihr Retriever die größten Schwierigkeiten hat.

def compute_hit_rate(golden_dataset, retriever, top_k=5):
    hits = 0
    for item in golden_dataset:
        results = retriever.retrieve(item['question'], top_k=top_k)
        retrieved_ids = {r['id'] for r in results}
        relevant_ids = set(item['relevant_chunks'])
        if retrieved_ids & relevant_ids:  # intersection not empty
            hits += 1
    hit_rate = hits / len(golden_dataset)
    print(f'Hit rate@{top_k}: {hit_rate:.1%} ({hits}/{len(golden_dataset)})')
    return hit_rate

Generierungs-Evaluierung: Faithfulness

Faithfulness misst, ob die generierte Antwort ausschließlich Informationen enthält, die sich anhand des abgerufenen Kontexts überprüfen lassen. Eine nicht faithful Antwort fügt Fakten hinzu, die vom Kontext nicht gestützt werden – das ist eine Halluzination. Bewerten Sie Faithfulness, indem ein LLM als Prüfinstanz (oder ein menschlicher Evaluator) jeden Satz der Antwort mit dem Kontext abgleicht und alle Aussagen kennzeichnet, die nicht durch die abgerufenen Chunks gestützt werden. Für produktive Systeme ist ein Faithfulness-Wert von mindestens 95 % das Ziel.

def evaluate_faithfulness(answer, context, llm_client):
    prompt = (
        'Given this context and answer, evaluate faithfulness.\n\n'
        f'Context: {context}\n\n'
        f'Answer: {answer}\n\n'
        'For each sentence in the answer, determine if it is '
        'supported by the context (FAITHFUL) or not (HALLUCINATED). '
        'Return a JSON: {"score": 0.0-1.0, "issues": ["sentence..."]}.'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Generierungs-Evaluierung: Antwortrelevanz

Antwortrelevanz misst, ob die generierte Antwort tatsächlich auf die Frage des Benutzers eingeht. Eine sehr faithful Antwort kann dennoch am Kern vorbeigehen, indem sie eine verwandte, aber andere Frage beantwortet. Messen Sie die Relevanz getrennt von Faithfulness. Lassen Sie ein LLM als Prüfinstanz auf einer Skala von 1 bis 5 bewerten, ob die Antwort direkt auf die gestellte Frage eingeht. Eine geringe Antwortrelevanz weist häufig auf ein Problem in der Prompt-Struktur hin oder darauf, dass der abgerufene Kontext die Antwort gar nicht enthält.

def evaluate_answer_relevance(question, answer, llm_client):
    prompt = (
        f'Question: {question}\n\n'
        f'Answer: {answer}\n\n'
        'Rate how well this answer addresses the question on a 1-5 scale:\n'
        '5 = fully answers the question\n'
        '3 = partially answers but misses key aspects\n'
        '1 = does not address the question at all\n\n'
        'Return JSON: {"score": 1-5, "reason": "brief explanation"}'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Metriken im Zeitverlauf erfassen

Eine Evaluierung ist besonders wertvoll, wenn Sie Metriken im Zeitverlauf und bei Ihren Änderungen erfassen. Speichern Sie die Evaluierungsergebnisse mit Zeitstempeln und Versionsbezeichnungen in einer Datenbank oder Tabelle (z. B. chunk_size=500, embed=3-small, k=5). Wenn Sie eine neue Chunking-Strategie oder ein neues Embedding-Modell ausprobieren, führen Sie dieselbe Evaluierung durch und vergleichen Sie die Ergebnisse. So verhindern Sie Regressionen – möglicherweise verbessern Sie Faithfulness, senken aber versehentlich die Hit Rate. Führen Sie immer die vollständige Evaluierung durch, bevor Sie Änderungen in die Produktion übernehmen.

import json
from datetime import datetime

def save_evaluation_results(metrics, config, output_file='eval_history.jsonl'):
    record = {
        'timestamp': datetime.utcnow().isoformat(),
        'config': config,
        'metrics': metrics
    }
    with open(output_file, 'a') as f:
        f.write(json.dumps(record) + '\n')
    print(f'Saved eval result: hit_rate={metrics["hit_rate"]:.1%}, '
          f'faithfulness={metrics["faithfulness"]:.1%}')

Die richtige Einstellung zur Evaluierung

Über konkrete Metriken hinaus erfordert die Evaluierung einen Perspektivwechsel: Betrachten Sie RAG als Machine-Learning-System mit messbarer Leistung und nicht als Chatbot, den Sie durch Gespräche subjektiv bewerten. Legen Sie Erfolgskriterien im Voraus fest (z. B. Hit Rate@5 > 85 %, Faithfulness > 95 %). Richten Sie einen Testsatz ein, der unverändert bleibt und niemals für Entwicklungsentscheidungen verwendet wird. Reservieren Sie einen separaten Dev-Satz für Iterationen. Diese Disziplin unterscheidet Teams, die zuverlässige RAG-Systeme ausliefern, von Teams, die beeindruckende Demos veröffentlichen, die in der Produktion scheitern.

Testsatz und Entwicklungssatz

Eine wichtige Disziplin im Machine Learning, die auch für die RAG-Evaluierung gilt, ist die Aufteilung in Train-, Dev- und Testsatz. Ihr Testsatz sollte vollständig unverändert bleiben – verwenden Sie ihn niemals für Entwicklungsentscheidungen. Nutzen Sie einen separaten Dev-Satz, um mit Chunking-Strategien, Prompt-Änderungen und Embedding-Modellen zu experimentieren. Führen Sie den Testsatz erst aus, wenn Sie überzeugt sind, dass eine Änderung produktionsreif ist. Diese Trennung verhindert, dass Sie Ihre RAG-Pipeline an den Testsatz überanpassen, und stellt sicher, dass Ihre abschließend gemeldeten Metriken eine echte Generalisierung widerspiegeln.

import json
from sklearn.model_selection import train_test_split

def split_golden_dataset(all_questions, test_ratio=0.3, seed=42):
    dev_set, test_set = train_test_split(
        all_questions,
        test_size=test_ratio,
        random_state=seed
    )
    print(f'Dev set: {len(dev_set)} questions')
    print(f'Test set: {len(test_set)} questions (FROZEN)')
    with open('eval/dev_set.json', 'w') as f:
        json.dump(dev_set, f, indent=2)
    with open('eval/test_set.json', 'w') as f:
        json.dump(test_set, f, indent=2)
    return dev_set, test_set

Schnelltest

Testen Sie Ihr Verständnis der Konzepte des AI Engineering aus dieser Lektion.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: die zwei unabhängigen Fehlerarten von Retrieval und Generierung, die separate Metriken erfordern, wie Sie ein Golden Dataset aus Frage-Antwort-Chunk-Tripeln für eine objektive Evaluierung erstellen, die Hit Rate als zentrale Retrieval-Metrik sowie Faithfulness und Antwortrelevanz als zentrale Generierungsmetriken und wie wichtig es ist, Metriken im Zeitverlauf zu erfassen, um Regressionen zu verhindern. Als Nächstes implementieren wir konkrete Retrieval-Metriken wie MRR und NDCG.

Häufig gestellte Fragen

Ist die Lektion „Warum Evaluation bei RAG wichtig ist“ kostenlos?

Ja — der vollständige Text von „Warum Evaluation bei RAG wichtig ist“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Warum Evaluation bei RAG wichtig ist“?

Sie verstehen die zwei unabhängigen Fehlermodi in RAG-Systemen: Fehler beim Retrieval und Fehler bei der Generierung, und lernen, warum Sie zur Diagnose getrennte Metriken benötigen. Du übst AI Engineering Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Engineering Academy zu starten?

Keine Vorkenntnisse erforderlich. AI Engineering Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Warum Evaluation bei RAG wichtig ist“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Engineering Academy-Lektion Code schreiben und ausführen?

Ja. Jede AI Engineering Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum Evaluation bei RAG wichtig ist
  2. Retrieval-Metriken: Hit Rate, MRR und NDCG
  3. Generierungsmetriken: Faithfulness und Antwortrelevanz
  4. Eine automatisierte Evaluationsumgebung erstellen
← Zurück zu AI Engineering Academy