Skip to the content.

Blog Post 8: LLM-as-Judge Self-Hosted – Empirische Evaluation der Grenzen und Möglichkeiten

Lesezeit: ~20 Minuten Level: Intermediate
Serie: Self-Hosted LLMs für Datensouveränität Code: GitHub

Hinweis: Detaillierte Definitionen zu technischen Begriffen findest du im Glossar.

In Post 7.2 haben wir Llama-3.1-8B als Dataset-Generator evaluiert: 93.3% A-Quality, kein Halluzinationen, produktionsreif für Batch-Anwendungen. Die Quality-Bewertung erfolgte jedoch mit Claude – unsere Daten verließen die Infrastruktur. Die Data Sovereignty Pipeline hatte eine Lücke.

Jetzt schließen wir diese Lücke: Ein self-hosted Llama-3.1-8B Model als LLM-as-Judge evaluiert generierte QA-Pairs. Die entscheidende Frage: Wie gut funktioniert ein 8B Model im Vergleich zu Claude Sonnet 4.5?


TL;DR – Für eilige Leser

Setup: Llama-3.1-8B (self-hosted) vs. Claude Sonnet 4.5 (commercial), 171 identische Samples, gleicher Judge-Prompt

Ergebnisse:

Judge A-Ratings B-Ratings C-Ratings Agreement Kappa
Claude Sonnet 4.5 111 (64.9%) 50 (29.2%) 10 (5.8%) - -
Llama-3.1-8B 167 (97.7%) 3 (1.8%) 1 (0.6%) 65% 0.30

Kernerkenntnisse:

Kein Drop-in Replacement für Claude – aber wir wissen jetzt, wo die Grenzen liegen und für welche Use Cases ein 8B Judge trotzdem nützlich ist.

Empfehlung: 8B Judge für Development & Pre-Filtering. Commercial Judge oder größeres Model (70B+) für Final Quality Control.


Inhaltsverzeichnis


Intro: Data Sovereignty – Mission Accomplished

In den vorherigen Posts haben wir eine komplette self-hosted LLM-Pipeline aufgebaut:

Aber: In Post 7.2 haben wir Claude für Quality Evaluation verwendet. Das bedeutet unsere Daten verlassen trotzdem die eigene Infrastruktur – ein Bruch in der Data Sovereignty Chain.

Mit Post 8 schließen wir die Lücke: Ein self-hosted Llama-3.1-8B Model evaluiert die Qualität generierter QA-Pairs. Keine Daten verlassen mehr die eigene Infrastruktur.

Die entscheidende Frage: Wie gut funktioniert ein 8B Model als Judge im Vergleich zu Claude Sonnet 4.5? Wir beantworten diese Frage nicht spekulativ, sondern empirisch mit 171 evaluierten Samples und klaren Metriken.

Dieser Post:

Spoiler: Ein 8B Model ist kein Drop-in Replacement für Claude - aber die Erkenntnisse sind wertvoll für fundierte Architektur-Entscheidungen.


Warum LLM-as-Judge?

Das Problem mit manueller Evaluation

Ein manueller Quality Review skaliert nicht:

LLM-as-Judge als Lösung

Vorteile:

Trade-offs:

Warum selbst hosten?

Data Sovereignty:

Cost:

Kontrolle:


Experiment Setup

Der Judge-Prompt

Unser Judge bewertet QA-Pairs anhand von drei Texten:

Rating-Kriterien:

RATING A (Perfect):
- Faktisch korrekt und vollständig aus Chunk ableitbar
- Natürliche, hilfreiche Antwort
- Keine Spekulation oder Halluzination

RATING B (Minor Issues):
- Generell korrekt und nutzbar
- Minor Speculation: Logische Implications nicht explizit im Chunk
- Leicht awkward phrasing oder Unvollständigkeit

RATING C (Problematic):
- Faktisch falsch oder widersprüchlich
- HALLUCINATION: Erfundene Fakten (Daten, Zahlen, Namen)
- Nicht aus Chunk ableitbar

Wichtig: Der Prompt unterscheidet klar zwischen:

Vollständiger Prompt: [judge_prompt.txt im Repository]

Anmerkung: Man könnte und sollte den Scope der Evaluierung noch erweitern, z.B.: Passen die Fragen und der Questions Type (factual, comparison und conceptual) zu einander?

Warum Llama-3.1-8B?

Pragmatische Wahl basierend auf Post 7.2:

Alternative: Mistral-7B (nur 90% A-Quality in Post 7.2) → nicht gewählt

Evaluation-Methodik

Ansatz:

Das Ziel ist ein fairer Vergleich zwischen self-hosted und commercial Judge:

Warum nur Llama vs Claude?

171 Samples Breakdown:

Metrics:

Hinweis: Wir hatten ursprünglich 20 Chunk Samples geplant. Die krumme Zahl von 19 ist entstanden, weil Llama und Mistral bei einigen Chunks ein fehlerhaftes JSON zurückgegeben haben. Für diese Chunks hatten wir damit keine QA-Paare.


Der entscheidende Test: Llama vs. Claude

Setup für fairen Vergleich

Kritische Erkenntnis während der Arbeit: Ein Vergleich ist nur fair wenn beide Judges:

Unser Approach:

Dieser faire A/B-Test zeigt die wahre Performance-Differenz zwischen 8B self-hosted und state-of-the-art commercial Model.

Ergebnisse: Der Reality-Check

Overall Rating Distribution:

Judge A-Ratings B-Ratings C-Ratings Hallucinations
Claude Sonnet 4.5 111 (64.9%) 50 (29.2%) 10 (5.8%) 6 detected
Llama-3.1-8B 167 (97.7%) 3 (1.8%) 1 (0.6%) 0 detected

Auf den ersten Blick:

Bedeutet das Llama ist besser? Nein! Llama ist zu optimistisch.

Agreement Analyse

Overall Statistics:

Was bedeutet Kappa 0.30?

Warum nicht höher?

Konkrete Beispiele: Wo liegt Llama falsch?

Beispiel 1: Subtiler faktischer Fehler (Claude B, Llama A)

Chunk: "The free plan will be available for 6 months after account 
        creation. All Free Tier credits must be used within 12 months."

Question: "What benefits does a new AWS customer receive?"

Answer: "Credits are available for 6 months after account creation,
         and any remaining balance automatically applies to AWS bills."

Claude: B ✅
  "The chunk states the FREE PLAN is available for 6 months, 
   but CREDITS must be used within 12 months. The answer 
   incorrectly states credits are available for 6 months."

Llama: A ❌
  "The answer is strictly based on the chunk content, 
   providing accurate information about the Free Tier program."

Llama übersieht den Fehler: Antwort vermischt “6 months” (free plan) mit “12 months” (credits) - subtil aber falsch!

Beispiel 2: Irreführende Antwort (Claude C, Llama B)

Chunk: "You can choose between a free plan and a paid plan. 
        If you upgrade to a paid plan, any remaining Free Tier 
        credit balance will automatically apply to your AWS bills."

Question: "What is the difference between free and paid plan?"

Answer: "The free plan is available for 6 months, while the 
         paid plan allows you to use remaining Free Tier credits."

Claude: C ✅
  "The answer is severely incomplete and misleading. It implies 
   only paid plans can use credits, which contradicts the chunk."

Llama: B ❌
  "Generally correct but slightly awkwardly phrased."

Llama bewertet als “minor issue” was eigentlich eine irreführende Darstellung ist!

Beispiel 3: Claude zu pedantisch (Llama A, Claude C)

Chunk: "Prices are the same across all regions."

Question: "In which AWS regions are prices identical?"

Answer: "Prices are identical across all AWS regions."

Claude: C ❌
  "Adds 'AWS regions' which is not mentioned in the chunk. 
   This is a hallucination of specific context."

Llama: A ✅
  "Strictly based on chunk content and factually correct."

Hier hat Llama recht! Die Frage enthält “AWS regions” - die Answer übernimmt diese Terminologie. Das ist kein Hallucination, sondern sinnvolle Clarification im Kontext.

→ Claude ist gelegentlich zu pedantisch (False Positive), aber Llama übersieht deutlich mehr echte Probleme (False Negatives).

Beispiel 4: Nicht beantwortbare Fragen (Claude A, Llama B)

Chunk: "Prices are the same across all regions."

Question: "WHY is there price uniformity across different AWS regions?"

Answer: "The text states prices are the same across all regions,
         but does not provide information on the reason."

Claude: A ✅
  "Excellent answer - explicitly acknowledges that the reason 
   is not provided. Perfect example of staying strictly within 
   the bounds of the given information."

Llama: B ❌
  "Incomplete, does not provide the reason for price uniformity."

Kritischer Fehler: Llama versteht nicht dass die Frage unanswerable ist aus dem Chunk! Die Answer sagt ehrlich “no reason provided” - das ist perfekt, nicht “incomplete”.

Disagreement Patterns

Hauptmuster (60 Disagreements):

Pattern Count Bedeutung
Claude B → Llama A ~45 Llama übersieht Speculation
Claude C → Llama A/B ~8 Llama übersieht Hallucinations
Claude A → Llama B ~2 Llama zu streng (selten!)
Claude C → Llama A ~5 Claude zu pedantisch

Dominantes Problem: Llama ist systematisch zu optimistisch.

Was bedeuten die Zahlen wirklich?

Claude’s 65% A-Rating:

Llama’s 98% A-Rating:

Detection Rates im Detail:

Von den 60 problematischen Samples die Claude fand:

Das ist signifikant! Ein 8B Model findet nur einen Bruchteil der Probleme die Claude findet.

Ground Truth liegt vielleicht bei ~70-75% A-Quality (Claude minus einige False Positives).

Model-Größe spielt eine Rolle

Warum ist Llama schwächer?

Claude Sonnet 4.5:

Llama-3.1-8B:

Das ist nicht überraschend - es ist physikalisch erwartbar:

Die Frage ist nicht “Warum ist Llama schlechter?” Sondern: “Ist ein 8B Model gut genug für praktische Use Cases?”


Use-Case Analyse: Wofür reicht ein 8B Judge?

Komplexität der Aufgabe

LLM-as-Judge ist nicht trivial:

Llama-3.1-8B erreicht Kappa 0.30 (Fair Agreement) - das zeigt die Grenzen eines 8B Models bei dieser komplexen Task.

Use Case Matrix

Use Case Anforderung Claude Baseline Llama-3.1-8B Detection Rate Empfehlung
C-Filtering Halluzinations aussortieren 10 C gefunden ~1 C gefunden 10% ⚠️ Sehr begrenzt
B-Detection Speculation erkennen 50 B gefunden ~3 B gefunden 6% ❌ Nicht geeignet
A-Acceptance Perfekte Samples durchlassen 111 A ~167 A 50 False Positives ❌ Zu optimistisch
Pre-Filtering Offensichtliche Fehler filtern Baseline Funktioniert teilweise ~20-30% ⚠️ Mit Vorbehalt

Use Case 1: Pre-Filtering großer Datasets

Empfehlung: ⚠️ Mit Vorbehalt geeignet

Ein 8B Judge kann als erste Filterung bei sehr großen Datasets (>10k samples) dienen, findet aber nur ~10-20% der problematischen Samples. MUSS gefolgt werden von zweiter Review-Stufe (Commercial Judge oder Manual Review). Nicht als einziger Quality Gate verwenden.

Vorteil: Kostenlos, schnell, skaliert gut
Nachteil: Übersieht 80-90% der subtilen Fehler

Use Case 2: Final Quality Control

Empfehlung:Nicht geeignet

Zu viele Probleme werden übersehen (90% der B-Ratings, 90% der C-Ratings). Keine verlässliche Quality-Gating möglich. Für Training-Daten unbrauchbar, für Production inakzeptabel.

Use Case 3: Development & Iteration

Empfehlung:Gut geeignet

Für Prompt-Entwicklung und schnelle Iteration während Development ist ein 8B Judge nützlich: Schnelles Feedback zu offensichtlichsten Problemen, kostenlos, gut genug für iterative Verbesserung. Final Validation vor Production sollte mit Claude/GPT-4o erfolgen.

Wann ein 8B Judge NICHT geeignet ist

Ein 8B Model ist nicht geeignet für:

Besser Commercial Judge oder größeres Model verwenden wenn:

Note: Diese Limitationen gelten für 8B Models. Größere self-hosted Models (70B+) könnten signifikant bessere Performance zeigen - siehe Post 8.1 Ausblick.


Self-Evaluation Bias

Testet Llama seine eigenen Outputs nachsichtig?

Die Frage: Ist Llama “zu nett” zu Samples die es selbst generiert hat?

Die kurze Antwort: Wahrscheinlich nicht signifikant.

Warum nicht:

1. Judge-Prompt ist objektiv:

2. Llama sieht keine Generator-Info:

3. Llama ist generell zu optimistisch:

Scope Note

Dieser Post fokussiert auf answerable questions mit vorhandenem Ground Truth (Chunk).

Nicht systematisch getestet:

Future Work: Robustness-Testing gegen solche Cases.


Code & Resources

GitHub Repository: self-hosted-llms-tutorial

Scripts für diesen Post:

Repository Structure

08-llm-as-judge/
├── judge_prompt.txt              # System prompt for judge
├── llm_as_judge_comparison.py   # Multi-judge comparison
├── compare_judges.py             # Agreement analysis
├── extract_post8_samples.py     # Sample extraction from Post 7.2
├── test_samples.jsonl            # 8 curated test samples
└── all_samples_60x3.jsonl        # 171 QA-Pairs for evaluation (60 chunks × 3 models)

Judge Prompt

Vollständiger Prompt: judge_prompt.txt

Key Sections:

Running the Judge

Single Judge (Llama):

python llm_as_judge.py \
  --samples qa_pairs.jsonl \
  --output ratings.jsonl \
  --vllm-url http://localhost:8000/v1 \
  --model hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4

Multi-Judge Comparison:

python llm_as_judge_comparison.py \
  --samples all_samples_60x3.jsonl \ 
  --output comparison.jsonl \
  --llama-url http://localhost:8000/v1 \
  --gpt4o --gpt4o-key $OPENAI_API_KEY \
  --claude --claude-key $ANTHROPIC_API_KEY

Agreement Analysis:

python compare_judges.py \
  --llama llama_ratings.jsonl \
  --claude claude_ratings.jsonl

Required Input Format

{
  "chunk_id": "amazon-faq-6",
  "chunk": "With Amazon MQ, you pay only for what you use...",
  "question": "What are the charges for Amazon MQ?",
  "answer": "You are charged for broker instance usage, storage usage, and data transfer fees.",
  "model": "mistral-7b"
}

Kritisch: chunk Feld MUSS gefüllt sein, sonst kann Judge nicht bewerten!

Output Format

{
  "chunk_id": "amazon-faq-6",
  "model": "mistral-7b",
  "chunk": "...",
  "question": "...",
  "answer": "...",
  "llama_rating": "A",
  "llama_hallucination": false,
  "llama_reasoning": "The answer is strictly based on the chunk content, providing a clear explanation of Amazon MQ charges."
}

Fazit

Ein 8B Model als self-hosted Judge erreicht Fair Agreement (Kappa 0.30, 65% Übereinstimmung) mit Claude Sonnet 4.5 - ehrlich, aber limitiert.

Was funktioniert:

*Wenn GPU vorhanden oder mit scale-to-zero

Die klaren Grenzen:

Was wir gelernt haben:

  1. Model-Größe spielt eine Rolle - 8B vs 100B+ ist physikalisch erwartbar unterschiedlich
  2. Komplexe Tasks brauchen Kapazität - 3-Text-Reasoning mit Nuancen überfordert 8B
  3. Use-Case fit ist entscheidend - Nicht “gut/schlecht” sondern “wofür gut genug?”
  4. Empirisch validieren - 171 Samples zeigen wahre Performance, nicht 8 Test-Samples

Der nächste Schritt:

Die Frage bleibt: Wie viel besser ist Llama-3.1-70B (8.75× größer)? Das Framework steht, Scripts sind ready.

Post 8.1: Llama-70B Judge Evaluation - kann ein größeres self-hosted Model mit Claude mithalten?


Wichtigste Erkenntnis:

“8B Models haben klare Grenzen bei nuancierten Tasks. Aber wir wissen jetzt, wo diese Grenzen liegen - das ist ein Fortschritt, kein Scheitern.”

Data Sovereignty ist machbar - mit bewussten Trade-offs und dem richtigen Model für den Use Case.



← Post 7.2: Vergleich mit Llama-3.1-8B | Serienübersicht | Post 8.1: Llama-3.1-70b Judge (Mac) →