Hoppa till innehållet
AI-grafen
F· AI engineeringevals-benchmarks· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20

Evals för språkmodeller och agenter

Kunna bygga en eval-harness med gyllene svar, LLM-som-domare och regressionstester, och köra den i CI.

Förkunskaper

Intuition

För kod har vi tester. För språkmodeller och agenter behöver vi evals — och de är svårare, för svaret är sällan exakt ett.

Tre typer, i stigande kostnad:

  1. Gyllene svar — exakt/normaliserad match, regex, numerisk tolerans. Billigt, deterministiskt; passar klassificering, extraktion, räkning.
  2. Regelbaserade kontroller — innehåller källhänvisning? under 200 ord? ger inte bort lösningen? Kod som granskar svaret.
  3. LLM-som-domare — en modell bedömer svaret mot en rubrik, gärna parvis (A vs B, slumpad ordning). Skalar, men domaren har egna fel: föredrar långa svar, sin egen stil, positionen. Kalibrera mot 100 mänskliga bedömningar; rapportera domarens överensstämmelse.

För agenter: mät uppgiftsnivå (löste den det?) i sandlåda med verifierbart sluttillstånd, plus kostnad och steg.

I CI: fast fallmängd, temperatur 0, tröskel + regressionslista, kostnadstak per körning. AI-grafens evals/tutor_eval.py är ett exempel: 12 fall som kontrollerar att handledaren inte ger bort svar, inte bekräftar gissningar och inte hittar på fakta.

Kod

import json, random

RUBRIK = """Bedöm SVARET på FRÅGAN med KONTEXTEN. Poäng 1–5 för: korrekt (stöds av kontexten), fullständigt, koncist.
Svara ENDAST med JSON: {"korrekt": n, "fullstandigt": n, "koncist": n, "motivering": "..."}"""

def domare(llm, fraga, kontext, svar):
    out = llm(f"{RUBRIK}\n\nFRÅGA: {fraga}\nKONTEXT: {kontext}\nSVAR: {svar}", temperature=0, json_mode=True)
    return json.loads(out)

def parvis(llm, fraga, a, b, rng=random.Random(0)):
    flip = rng.random() < 0.5
    x, y = (b, a) if flip else (a, b)
    out = llm(f"Vilket svar på '{fraga}' är bäst? Svara A eller B.\n\nA: {x}\n\nB: {y}", temperature=0).strip()
    vinnare = "B" if (out.startswith("A")) == flip else "A"     # avslumpa positionen
    return vinnare

def kalibrera(domarpoang, manskliga):
    import numpy as np
    return float(np.corrcoef(domarpoang, manskliga)[0, 1])      # rapportera; < 0,6 → rubriken behöver arbete

# regelbaserad: handledaren får inte ge bort lösningen
def ger_bort_losning(svar, facit):
    return str(facit).lower() in svar.lower()

Behärskning innebär

  • Bygger evals med gyllene svar, LLM-som-domare och regressionstester
  • Kalibrerar domaren mot mänskliga bedömningar
  • Kör evals i CI med tröskel och kostnadstak

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser