AI-promptteknik · Lektion

Använda LLM för att utvärdera LLM-utdata

Varför LLM-domare fungerar och var de brister jämfört med mänsklig utvärdering.

Lektion 1 av 413 steg

Använda LLM för att utvärdera LLM-utdata är en gratis lektion i AI-promptteknik på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för AI-promptteknik, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI-promptteknik innehåller totalt 4 lektioner.

Varför använda en LLM som bedömare?

Traditionella utvärderingsmått – BLEU, ROUGE och exakt matchning – fungerar för strukturerade utdata men misslyckas med nyanserade egenskaper som hjälpsamhet, korrekthet, ton och kreativitet.

Mänsklig utvärdering fångar nyanser men är långsam och dyr. LLM som bedömare erbjuder en mellanväg: automatiserad utvärdering som förstår semantisk innebörd, kontext och subjektiv kvalitet – i stor skala och till låg kostnad.

Varför LLM-bedömare fungerar

LLM-bedömare fungerar eftersom de har samma språkförståelse som modellen som utvärderas. De kan bedöma:

  • Om ett svar är sakligt korrekt, inte bara lexikalt likt en referens
  • Om ett svar är hjälpsamt för det angivna ändamålet
  • Om tonen motsvarar kraven
  • Om en sammanfattning fångar huvudpunkterna

Detta är egenskaper som enkla strängmatchningsmått inte kan mäta.

En enkel LLM-bedömare

Den enklaste LLM-bedömaren: be modellen poängsätta ett svar på en numerisk skala med en kort motivering. Detta är grunden som alla mer avancerade bedömningsmönster bygger vidare på.

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}')

Varför LLM-bedömare misslyckas: positionsbias

Positionsbias: När två svar (A och B) presenteras föredrar LLM-bedömare det som visas först – oavsett kvalitet. Studier visar att detta påverkar 60–70 % av parvisa jämförelser när en naiv bedömningsprompt används.

Det innebär att ordningen som alternativen presenteras i påverkar bedömarens utslag.

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

Varför LLM-bedömare misslyckas: utförlighetsbias

Utförlighetsbias: LLM-bedömare tenderar att ge längre och mer detaljerade svar högre betyg – även när ett koncist svar objektivt sett är bättre. Ett svar som använder 400 ord för att säga det som 50 ord kunde ha sagt får ofta högre poäng än den koncisa versionen.

Motverka detta genom att uttryckligen instruera bedömaren att ge avdrag för onödig längd.

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)

Varför LLM-bedömare misslyckas: självpreferens

Självpreferensbias: När Claude bedömer två svar tenderar modellen att föredra svar som liknar Claude-svar. När GPT-4 bedömer svar föredrar modellen svar som liknar GPT-4-svar. Detta är en systematisk bias som påverkar alla LLM-bedömare.

Motåtgärd: använd flera olika modeller som bedömare och slå samman deras poäng. Oenighet signalerar ett gränsfall som kräver mänsklig granskning.

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

Poänginflation

Poänginflation: LLM-bedömare tenderar att ge höga poäng (4–5 av 5) till de flesta svar, vilket komprimerar fördelningen och gör det svårt att skilja bra från utmärkt. Svar som skulle få 3/5 får ofta 4–4,5/5.

Åtgärd: använd en bedömningsmatris som tvingar fram kalibrering, eller använd relativ poängsättning (parvis) i stället för absolut poängsättning.

# 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')

När LLM-bedömare fungerar bäst

LLM-bedömare är mest tillförlitliga när:

  • Kriterierna är tydliga och väldefinierade
  • Skillnaden i svarskvalitet är stor (uppenbart bra kontra uppenbart dåligt)
  • Området ligger inom bedömningsmodellens kunskap
  • Ni utvärderar subjektiva egenskaper (ton, hjälpsamhet) som mänskliga bedömare också är oense om

De är minst tillförlitliga vid utvärdering av ny kunskap, mycket tekniska områden eller subtila sakfel som kräver specialistkunskaper för att upptäckas.

När mänsklig utvärdering krävs

Låt människor ingå i granskningsprocessen för:

  • Utvärdering av svar inom specialiserade områden (medicin, juridik och säkerhet)
  • Fastställande av kalibrering mot facit för er LLM-bedömare
  • Beslut med höga insatser där fel från LLM-bedömaren får verkliga konsekvenser
  • Nya uppgifter där bedömningsmodellen har fått få träningssignaler
  • Upptäckt av subtila sakfel som kräver ämnesexpertis
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}')

Bygg en utvärderingspipeline

En praktisk pipeline för LLM som bedömare: generera svar → kör LLM-bedömaren → sortera gränsfall till mänskliga bedömare → slå samman poäng → rapportera kvalitetsmått. Logga allt för granskningsspår.

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')

Utvärdering utan referens kontra med referens

LLM-bedömare kan arbeta i två lägen:

  • Referensbaserad: Bedömaren jämför svaret med ett känt korrekt svar. Hög noggrannhet, men märkta data krävs.
  • Referensfri: Bedömaren utvärderar svaret utifrån dess egna kvaliteter (är det konsekvent? hjälpsamt? välskrivet?). Mer flexibelt, men mindre exakt när det gäller saklig korrekthet.

Använd referensbaserad utvärdering när ni har kvalitetssäkrade referenssvar. Använd referensfri utvärdering för öppna uppgifter som sammanfattning, tonutvärdering eller kvaliteten på kreativt skrivande.

Kunskapskontroll: Positionsbias

Vad är positionsbias vid utvärdering med en LLM som bedömare, och vad leder den till?

Sammanfattning: Utvärdering med LLM som bedömare

LLM-bedömare förstår nyanser, semantisk korrekthet och subjektiv kvalitet – sådant som traditionella mätvärden inte kan mäta. De misslyckas med: positionsbias (föredrar det första alternativet), utförlighetsbias (föredrar längre svar), självpreferensbias (föredrar sin egen stil) och poänginflation (samlas kring 4–5 av 5). Motverka detta genom att slumpa svarens ordning, använda uttryckliga instruktioner mot överdriven utförlighet, använda förankrade bedömningsmatriser som definierar varje poängnivå och använda flera olika modeller som bedömare. Skicka gränsfall och områden med hög risk till mänskliga utvärderare. Använd LLM-bedömare för skalbarhet och människor för kalibrering och beslut med stora konsekvenser.

Gratis att börja

Lär dig AI-promptteknik med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
53
Lektioner
199

Vanliga frågor

Är lektionen ”Använda LLM för att utvärdera LLM-utdata” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen AI-promptteknik, inklusive ”Använda LLM för att utvärdera LLM-utdata”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i AI-promptteknik innehåller totalt 4 lektioner.

Vad lär jag mig i ”Använda LLM för att utvärdera LLM-utdata”?

Varför LLM-domare fungerar och var de brister jämfört med mänsklig utvärdering. Ni övar på AI-promptteknik med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig AI-promptteknik?

Du behöver inga förkunskaper. Utbildningen i AI-promptteknik på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Använda LLM för att utvärdera LLM-utdata”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här AI-promptteknik-lektionen?

Ja. Varje AI-promptteknik-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Använda LLM för att utvärdera LLM-utdata
  2. Prompter för bedömning enligt kriterier
  3. Jämförande bedömning: A mot B
  4. Kalibrering och bias hos LLM-domare
← Tillbaka till AI-promptteknik