0Pricing
AI Prompt Engineering · Lektion

LLMs zur Bewertung von LLM-Ausgaben einsetzen

Warum LLM-Judges funktionieren und wo sie im Vergleich zur menschlichen Bewertung versagen.

LLMs zur Bewertung von LLM-Ausgaben einsetzen ist eine kostenlose AI Prompt Engineering-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 Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.

Warum ein LLM als Bewertungsinstanz verwenden?

Herkömmliche Bewertungsmetriken — BLEU, ROUGE und Exact Match — funktionieren für strukturierte Ausgaben, versagen aber bei nuancierten Eigenschaften wie Hilfsbereitschaft, Genauigkeit, Tonfall und Kreativität.

Eine Bewertung durch Menschen erfasst solche Nuancen, ist aber langsam und teuer. LLM-as-judge bietet einen Mittelweg: eine automatisierte Bewertung, die semantische Bedeutung, Kontext und subjektive Qualität versteht — in großem Maßstab und zu geringen Kosten.

Warum LLM-Bewertungsinstanzen funktionieren

LLM-Bewertungsinstanzen sind erfolgreich, weil sie dasselbe Sprachverständnis wie das bewertete Modell besitzen. Sie können beurteilen:

  • ob eine Antwort faktisch korrekt ist und nicht nur lexikalische Ähnlichkeit mit einer Referenz aufweist
  • ob eine Antwort für den angegebenen Zweck hilfreich ist
  • ob der Tonfall den Anforderungen entspricht
  • ob eine Zusammenfassung die wichtigsten Punkte erfasst

Das sind Eigenschaften, die einfache Metriken zum Zeichenkettenvergleich nicht messen können.

Eine einfache LLM-Bewertungsinstanz

Die einfachste Form einer LLM-Bewertungsinstanz: Bitten Sie das Modell, eine Antwort auf einer numerischen Skala zu bewerten und kurz zu begründen. Darauf bauen alle fortgeschritteneren Muster für Bewertungsinstanzen auf.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

def simple_llm_judge(question, response, criterion):
    judge_prompt = (
        f'Rate the following response on {criterion} from 1 to 5.\n\n'
        f'Question: {question}\n'
        f'Response: {response}\n\n'
        f'Return JSON: {{"score": <1-5>, "reason": "<one sentence>"}}'
    )
    r = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=100,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    try:
        result = json.loads(r.content[0].text)
        return result['score'], result['reason']
    except Exception:
        return None, r.content[0].text

score, reason = simple_llm_judge(
    question='What is recursion in programming?',
    response='Recursion is when a function calls itself.',
    criterion='clarity and completeness'
)
print(f'Score: {score}/5 — {reason}')

Wo LLM-Bewertungsinstanzen versagen: Positionsverzerrung

Positionsverzerrung: Wenn LLM-Bewertungsinstanzen zwei Antworten (A und B) erhalten, bevorzugen sie unabhängig von der Qualität häufig die zuerst angezeigte Antwort. Studien zeigen, dass dies bei Verwendung eines naiven Bewertungs-Prompts 60–70 % der Paarvergleiche betrifft.

Das bedeutet, dass die Reihenfolge, in der Sie Optionen präsentieren, das Urteil der Bewertungsinstanz verändert.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def demonstrate_position_bias(question, response_a, response_b):
    def ask_judge(first, second, order):
        prompt = (
            f'Question: {question}\n\n'
            f'Response 1: {first}\n\n'
            f'Response 2: {second}\n\n'
            f'Which response is better? Reply with 1 or 2.'
        )
        r = client.messages.create(
            model='claude-opus-4-5',
            max_tokens=10,
            messages=[{'role': 'user', 'content': prompt}]
        )
        choice = r.content[0].text.strip()
        # Map back to original labels
        if order == 'AB':
            return 'A' if choice == '1' else 'B'
        else:  # BA
            return 'B' if choice == '1' else 'A'

    result_ab = ask_judge(response_a, response_b, 'AB')
    result_ba = ask_judge(response_b, response_a, 'BA')

    print(f'Order A-B: Judge picked {result_ab}')
    print(f'Order B-A: Judge picked {result_ba}')
    if result_ab != result_ba:
        print('Position bias detected: different results!')

    return result_ab, result_ba

Wo LLM-Bewertungsinstanzen versagen: Verzerrung zugunsten ausführlicher Antworten

Verzerrung zugunsten ausführlicher Antworten: LLM-Bewertungsinstanzen bewerten längere und detailliertere Antworten tendenziell höher — selbst wenn eine prägnante Antwort objektiv besser ist. Eine Antwort, die mit 400 Wörtern ausdrückt, was auch mit 50 Wörtern gesagt werden könnte, erhält häufig eine höhere Bewertung als die prägnante Version.

Verringern Sie diesen Effekt, indem Sie die Bewertungsinstanz ausdrücklich anweisen, unnötige Länge abzuwerten.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def length_aware_judge(question, response):
    judge_prompt = (
        f'Evaluate this response for quality. Be aware of verbosity bias: '
        f'do NOT score longer responses higher just because they are longer.\n\n'
        f'Question: {question}\n'
        f'Response: {response}\n\n'
        f'Evaluate on:\n'
        f'1. Accuracy (does it correctly answer the question?)\n'
        f'2. Conciseness (does it avoid unnecessary filler?)\n'
        f'3. Helpfulness (does it serve the user well?)\n\n'
        f'Penalize responses that add filler, repetition, or irrelevant information.\n'
        f'Score each 1-5 and provide an overall score. Return JSON.'
    )
    r = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=200,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    print(r.content[0].text)

Wo LLM-Bewertungsinstanzen versagen: Selbstbevorzugung

Verzerrung durch Selbstbevorzugung: Wenn Claude zwei Antworten bewertet, bevorzugt es tendenziell Antworten, die Claude ähneln. Wenn GPT-4 die Bewertung vornimmt, bevorzugt es Antworten, die GPT-4 ähneln. Dies ist eine systematische Verzerrung, die alle LLM-Bewertungsinstanzen betrifft.

Gegenmaßnahme: Verwenden Sie mehrere unterschiedliche Modelle als Bewertungsinstanzen und aggregieren Sie deren Bewertungen. Uneinigkeit deutet auf einen Grenzfall hin, der eine Prüfung durch Menschen erfordert.

import anthropic
import openai

anthropic_client = anthropic.Anthropic(api_key='sk-ant-...')
openai_client = openai.OpenAI(api_key='sk-...')

def multi_model_judge(question, response):
    judge_prompt = (
        f'Rate this response 1-10 for overall quality.\n'
        f'Q: {question}\nA: {response}\n'
        f'Reply with only a number.'
    )

    # Judge 1: Claude
    r_claude = anthropic_client.messages.create(
        model='claude-opus-4-5',
        max_tokens=10,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    score_claude = float(r_claude.content[0].text.strip())

    # Judge 2: GPT-4o
    r_gpt = openai_client.chat.completions.create(
        model='gpt-4o',
        max_tokens=10,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    score_gpt = float(r_gpt.choices[0].message.content.strip())

    avg = (score_claude + score_gpt) / 2
    print(f'Claude judge: {score_claude}, GPT judge: {score_gpt}, Average: {avg}')
    if abs(score_claude - score_gpt) > 2:
        print('WARNING: High disagreement — consider human review')
    return avg

Aufgeblähte Bewertungen

Aufgeblähte Bewertungen: LLM-Bewertungsinstanzen vergeben für die meisten Antworten tendenziell hohe Bewertungen (4–5 von 5). Dadurch wird die Verteilung komprimiert und es wird schwierig, gute von hervorragenden Antworten zu unterscheiden. Antworten, die eigentlich mit 3/5 bewertet würden, erhalten häufig 4–4,5/5.

Beheben Sie dieses Problem mit einer Bewertungsmatrix, die eine Kalibrierung erzwingt, oder verwenden Sie relative (paarweise) statt absolute Bewertungen.

# Anti-inflation judge prompt with explicit score anchors
CALIBRATED_JUDGE_PROMPT = (
    'Rate this response 1-5 using these STRICT score definitions:\n'
    '1 = Completely wrong, harmful, or completely off-topic\n'
    '2 = Partially relevant but contains significant errors or omissions\n'
    '3 = Correct and addresses the question but lacks depth or precision\n'
    '4 = Correct, reasonably complete, and clearly expressed\n'
    '5 = Exceptional: correct, complete, insightful, and concise\n\n'
    'Only give 5 if the response is genuinely outstanding.\n'
    'Give 3 for any adequate-but-not-impressive response.\n\n'
    'Question: {question}\n'
    'Response: {response}\n\n'
    'Score (1-5) and one-sentence reason:'
)

# Compare to non-anchored prompt which tends to cluster at 4-5
print('Anchored rubrics force the judge to use the full scale')

Wann LLM-Bewertungsinstanzen am besten funktionieren

LLM-Bewertungsinstanzen sind am zuverlässigsten, wenn:

  • die Kriterien klar und eindeutig definiert sind
  • der Qualitätsunterschied zwischen den Antworten groß ist (offensichtlich gut im Vergleich zu offensichtlich schlecht)
  • die Domäne zum Wissensstand des Bewertungsmodells gehört
  • Sie subjektive Eigenschaften bewerten (Tonfall, Hilfsbereitschaft), bei denen sich auch menschliche Bewerter nicht immer einig sind

Am unzuverlässigsten sind sie bei der Bewertung von aktuellem Wissen, hoch spezialisierten technischen Domänen oder subtilen faktischen Fehlern, deren Erkennung Fachwissen erfordert.

Wann eine Bewertung durch Menschen erforderlich ist

Beziehen Sie Menschen in den Bewertungsprozess ein für:

  • die Bewertung von Antworten in spezialisierten Domänen (Medizin, Recht und Sicherheit)
  • die Erstellung einer Kalibrierung anhand von Referenzwerten für Ihre LLM-Bewertungsinstanz
  • Entscheidungen mit hohem Risiko, bei denen Fehler der LLM-Bewertungsinstanz reale Folgen haben
  • neuartige Aufgaben, für die das Bewertungsmodell nur wenige Trainingssignale besitzt
  • die Erkennung subtiler faktischer Fehler, die Domänenexpertise erfordern
def triage_for_human_review(question, response, llm_score, confidence_threshold=0.7):
    """
    Route low-confidence or high-stakes evaluations to human review.
    """
    # Route to human if judge is uncertain
    if llm_score is None:
        return 'human_review', 'LLM judge failed to produce a score'

    # Route to human for borderline scores (near decision boundaries)
    if 2.5 <= llm_score <= 3.5:
        return 'human_review', f'Borderline score {llm_score} — needs human judgment'

    # Route to human for domain-specific high-risk content
    HIGH_RISK_KEYWORDS = ['medication', 'legal advice', 'financial advice', 'security']
    if any(kw in question.lower() for kw in HIGH_RISK_KEYWORDS):
        return 'human_review', 'High-risk domain — human verification required'

    # Else: LLM score is sufficient
    return 'auto_accept', f'Score {llm_score} — LLM judgment sufficient'

routing, reason = triage_for_human_review('What medication should I take?', 'Take aspirin.', 4.5)
print(f'{routing}: {reason}')

Eine Bewertungspipeline erstellen

Eine praktische Pipeline mit LLM-as-judge: Antworten generieren → LLM-Bewertungsinstanz ausführen → Grenzfälle zur Prüfung an Menschen weiterleiten → Bewertungen aggregieren → Qualitätsmetriken melden. Protokollieren Sie alles für Prüfpfade.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

def evaluate_batch(examples, product_under_test, criteria):
    results = []
    for ex in examples:
        response = product_under_test(ex['question'])
        score, reason = simple_llm_judge(ex['question'], response, criteria)

        results.append({
            'question': ex['question'],
            'response': response,
            'score': score,
            'reason': reason,
            'needs_review': score is None or 2.5 <= (score or 0) <= 3.5
        })

    # Summarize
    valid_scores = [r['score'] for r in results if r['score'] is not None]
    avg_score = sum(valid_scores) / len(valid_scores) if valid_scores else 0
    review_count = sum(1 for r in results if r['needs_review'])

    print(f'Average score: {avg_score:.2f}/5')
    print(f'Cases needing review: {review_count}/{len(results)}')
    return results, avg_score

# results, avg = evaluate_batch(test_cases, my_product, 'helpfulness')

Referenzbasierte und referenzfreie Bewertung

LLM-Bewertungsinstanzen können in zwei Modi arbeiten:

  • Referenzbasiert: Die Bewertungsinstanz vergleicht die Antwort mit einer bekannten korrekten Antwort. Hohe Genauigkeit, aber beschriftete Daten sind erforderlich.
  • Referenzfrei: Die Bewertungsinstanz bewertet die Antwort nach ihren eigenen Eigenschaften (ist sie konsistent, hilfreich und gut formuliert?). Flexibler, aber bei der faktischen Genauigkeit weniger präzise.

Verwenden Sie eine referenzbasierte Bewertung, wenn Ihnen Antworten nach einem Goldstandard vorliegen. Verwenden Sie eine referenzfreie Bewertung für offene Aufgaben wie Zusammenfassungen, Tonfallbewertungen oder die Bewertung der Qualität kreativer Texte.

Wissenscheck: Positionsbias

Was ist Positionsbias bei der Evaluation mit einem LLM als Judge, und was verursacht er?

Zusammenfassung: Evaluation mit einem LLM als Judge

LLM-Judges verstehen Nuancen, semantische Genauigkeit und subjektive Qualität – Dinge, die herkömmliche Metriken nicht messen können. Sie scheitern bei: Positionsbias (sie bevorzugen die erste Option), Ausführlichkeitsbias (sie bevorzugen längere Antworten), Selbstpräferenz (sie bevorzugen ihren eigenen Stil) und Bewertungsinflation (die Bewertungen konzentrieren sich bei 4–5 von 5). Mögliche Gegenmaßnahmen sind: die Reihenfolge der Antworten zufällig zu variieren, ausdrücklich anzuweisen, Ausführlichkeit nicht zu bevorzugen, verankerte Bewertungsrubriken zu verwenden, die jede Bewertungsstufe definieren, und mehrere unterschiedliche Modelle als Judges einzusetzen. Leiten Sie Grenzfälle und Anwendungsbereiche mit hohem Risiko an menschliche Bewertende weiter. Verwenden Sie LLM-Judges für Skalierbarkeit und Menschen für die Kalibrierung sowie für Entscheidungen mit hohen Konsequenzen.

Häufig gestellte Fragen

Ist die Lektion „LLMs zur Bewertung von LLM-Ausgaben einsetzen“ kostenlos?

Ja — der vollständige Text von „LLMs zur Bewertung von LLM-Ausgaben einsetzen“ 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 Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „LLMs zur Bewertung von LLM-Ausgaben einsetzen“?

Warum LLM-Judges funktionieren und wo sie im Vergleich zur menschlichen Bewertung versagen. Du übst AI Prompt Engineering 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 Prompt Engineering zu starten?

Keine Vorkenntnisse erforderlich. AI Prompt Engineering 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 „LLMs zur Bewertung von LLM-Ausgaben einsetzen“?

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 Prompt Engineering-Lektion Code schreiben und ausführen?

Ja. Jede AI Prompt Engineering-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. LLMs zur Bewertung von LLM-Ausgaben einsetzen
  2. Bewertungs-Prompts mit Rubriken
  3. Vergleichende Bewertung: A vs. B
  4. Kalibrierung und Bias bei LLM-Judges
← Zurück zu AI Prompt Engineering