Hoppa till innehållet
AI-grafen
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

Intuition

Kodevals har ett facit som går att köra — men fyra fallgropar återkommer:

  1. Kontaminering. HumanEval och MBPP finns i varje träningskorpus. Höga siffror kan vara memorering. Använd egna uppgifter eller roterande benchmarks (LiveCodeBench).
  2. Läckage i uppgiften. Om lösningen syns i docstringen eller i ett importerat exempel mäter du ingenting.
  3. Svaga tester. En uppgift vars tester bara kollar ett normalfall godkänner trasig kod. Testerna ska täcka gränsfall.
  4. 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

Alla källor och licenser