Lektion 5 von 6·10 Min Lesezeit

Evaluation & Quality

"Die RAG-Pipeline funktioniert" ist keine ausreichende Aussage. Ohne systematische Evaluation wissen Sie nicht, ob Ihre Pipeline halluziniert, irrelevante Kontexte nutzt oder richtige Antworten liefert. RAG-Evaluation ist komplex — aber unverzichtbar.

RAG-Evaluation-Dimensionen

Die vier Kernmetriken

MetrikWas wird gemessen?Frage
FaithfulnessIst die Antwort treu zum Kontext?Erfindet die Antwort Informationen?
Answer RelevanceBeantwortet die Antwort die Frage?Ist die Antwort nützlich?
Context PrecisionSind die abgerufenen Kontexte relevant?Wird Rauschen minimiert?
Context RecallWurden alle nötigen Kontexte gefunden?Fehlen wichtige Informationen?

Evaluation-Framework

Frage ──▶ Retriever ──▶ Kontext ──▶ LLM ──▶ Antwort
  │                        │                    │
  │    Context Precision ◀─┘                    │
  │    Context Recall ◀────┘                    │
  │                                             │
  │    Answer Relevance ◀───────────────────────┘
  │    Faithfulness ◀────── Kontext + Antwort ──┘

RAGAS Framework

RAGAS (Retrieval Augmented Generation Assessment) ist das Standard-Framework für RAG-Evaluation:

from ragas import evaluate
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_precision,
    context_recall
)

# Test-Dataset
eval_dataset = {
    "question": ["Was ist DSGVO?", "Wie berechnet man ROI?"],
    "answer": [generated_answer_1, generated_answer_2],
    "contexts": [retrieved_contexts_1, retrieved_contexts_2],
    "ground_truth": ["Die DSGVO ist...", "ROI = ..."]
}

results = evaluate(
    dataset=eval_dataset,
    metrics=[faithfulness, answer_relevancy, context_precision, context_recall]
)
print(results)
# {'faithfulness': 0.87, 'answer_relevancy': 0.92, ...}

Automatisierte Tests

Golden Dataset erstellen

Ein Golden Dataset enthält Fragen mit erwarteten Antworten und relevanten Kontexten:

golden_dataset = [
    {
        "question": "Welche Kündigungsfrist gilt in der Probezeit?",
        "expected_answer": "2 Wochen",
        "expected_sources": ["hr/arbeitsvertrag.pdf#page=4"],
        "category": "hr"
    },
    # ... mindestens 50-100 Einträge
]

Automatisierte Pipeline-Tests

def test_rag_pipeline():
    results = []
    for item in golden_dataset:
        answer = rag_pipeline.invoke(item["question"])
        results.append({
            "question": item["question"],
            "expected": item["expected_answer"],
            "actual": answer,
            "faithfulness": evaluate_faithfulness(answer, retrieved_context),
            "relevance": evaluate_relevance(answer, item["question"])
        })

    avg_faithfulness = mean([r["faithfulness"] for r in results])
    avg_relevance = mean([r["relevance"] for r in results])

    assert avg_faithfulness > 0.85, f"Faithfulness zu niedrig: {avg_faithfulness}"
    assert avg_relevance > 0.80, f"Relevance zu niedrig: {avg_relevance}"

LLM-as-Judge

Ein LLM bewertet die Qualität der RAG-Antworten:

judge_prompt = """
Bewerte die folgende Antwort auf einer Skala von 1-5:

Frage: {question}
Kontext: {context}
Antwort: {answer}

Kriterien:
- Korrektheit (1-5): Stimmt die Antwort mit dem Kontext überein?
- Vollständigkeit (1-5): Werden alle relevanten Aspekte abgedeckt?
- Klarheit (1-5): Ist die Antwort verständlich formuliert?

Gib eine JSON-Bewertung zurück.
"""

Vorteile von LLM-as-Judge

  • Skalierbar: Hunderte Evaluationen ohne menschliche Reviewer
  • Konsistent: Gleichbleibende Bewertungskriterien
  • Schnell: Ergebnisse in Minuten statt Tagen

Grenzen

  • LLM-Bias: Das bewertende LLM hat eigene Verzerrungen
  • Halluzination: Der Judge kann selbst halluzinieren
  • Kalibrierung: Regelmäßig mit menschlichen Bewertungen vergleichen

Praxis-Tipp: Erstellen Sie ein Golden Dataset mit mindestens 50 Fragen aus Ihrem realen Use Case. Führen Sie Evaluationen nach jeder Änderung an der Pipeline durch (Prompts, Chunk-Size, Modell). Automatisierte Evaluation ist Ihr Sicherheitsnetz gegen Regressionen.