F· AI engineeringevals-benchmarks· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20
Evals för kodgenerering
Kunna bygga pass@k-evals med sandlådekörning.
Förkunskaper
- EBygg en eval-harnesskrävs
- ESpråkmodeller för kodkrävs
Intuition
Kodevals har ett facit som går att köra — men fyra fallgropar återkommer:
- Kontaminering. HumanEval och MBPP finns i varje träningskorpus. Höga siffror kan vara memorering. Använd egna uppgifter eller roterande benchmarks (LiveCodeBench).
- Läckage i uppgiften. Om lösningen syns i docstringen eller i ett importerat exempel mäter du ingenting.
- Svaga tester. En uppgift vars tester bara kollar ett normalfall godkänner trasig kod. Testerna ska täcka gränsfall.
- Bara korrekthet. Kod kan vara rätt och ändå osäker, långsam eller oläslig.
Kör alltid i sandlåda. Genererad kod ska betraktas som opålitlig indata — --network none, tidsgräns, resurstak.
Kod
import numpy as np
def pass_at_k(n, c, k):
if n - c < k:
return 1.0
return 1.0 - float(np.prod(1.0 - k / np.arange(n - c + 1, n + 1)))
def kor_kodeval(modell, uppgifter, sandlada, n=10, k_list=(1, 5)):
rader = []
for u in uppgifter:
losningar = [modell(u["prompt"], temperature=0.8) for _ in range(n)]
c = 0
for kod in losningar:
res = sandlada.kor(filer={**u["filer"], u["mal"]: kod, **u["tester"]},
timeout_s=30, network=None, memory_mb=512)
c += int(res["status"] == "passed")
rader.append({"id": u["id"], "n": n, "c": c,
**{f"pass@{k}": round(pass_at_k(n, c, k), 3) for k in k_list}})
sammanlagt = {f"pass@{k}": round(float(np.mean([r[f"pass@{k}"] for r in rader])), 3) for k in k_list}
return sammanlagt, rader
# Komplettera med:
# - säkerhetsscanner (SAST) på genererad kod
# - kontroll att alla importerade paket finns i en tillåten lista
# - körtid och minne per lösning (fungerande men ohanterligt långsam kod)
Bygg egna uppgifter ur er kodbas: ta verkliga issues eller funktioner, skriv tester först, ta bort implementationen. Det ger uppgifter som är omöjliga att ha memorerat och som mäter något ni faktiskt bryr er om.
Behärskning innebär
- Bygger pass@k-evals med sandlådekörning
- Undviker kontaminering och testläckage
- Mäter mer än funktionell korrekthet
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Evaluating Large Language Models Trained on Code (HumanEval, pass@k) — arXiv (öppen åtkomst; licens per artikel)
- arXiv — LiveCodeBench: Holistic and Contamination Free Evaluation of Large Language Models for Code — arXiv (öppen åtkomst; licens per artikel)