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
- EModellutvärderingkrävs
- ERAG — retrieval-augmented generationunderlättar
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:
- Gyllene svar — exakt/normaliserad match, regex, numerisk tolerans. Billigt, deterministiskt; passar klassificering, extraktion, räkning.
- Regelbaserade kontroller — innehåller källhänvisning? under 200 ord? ger inte bort lösningen? Kod som granskar svaret.
- 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
- arXiv — Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena — arXiv (öppen åtkomst; licens per artikel)
- OpenAI Evals (MIT) — MIT