Scorery deterministyczne
pass@k w praktyce
Aktualizacja: 11 października 2026
Definicja: potencjał, nie pojedyncze wywołanie
pass@k odpowiada na pytanie: gdyby wolno było wygenerować próbek i wybrać najlepszą, jak często problem zostałby rozwiązany? To miara potencjału modelu z resamplingiem, spopularyzowana w ewaluacji generowania kodu (Chen i in., Codex).
Jeśli na zadanie wygenerowano próbek i z nich przechodzi testy, nieobciążony estymator to:
Dlaczego nie „ułamek poprawnych w k próbach"
Naiwne podejście „czy któraś z pierwszych próbek działa" zależy od kolejności i zaniża wynik, gdy . Wzór z symbolem Newtona liczy prawdopodobieństwo, że w losowym podzbiorze z próbek znajdzie się co najmniej jedna poprawna — stąd jego nieobciążoność.
Implementacja
from math import comb
def pass_at_k(n: int, c: int, k: int) -> float:
if n - c < k:
return 1.0 # każdy podzbiór k próbek zawiera trafienie
return 1.0 - comb(n - c, k) / comb(n, k)
print(pass_at_k(n=10, c=2, k=1)) # 0.2
print(pass_at_k(n=10, c=2, k=5)) # ok. 0.78Parametry, które zmieniają wynik
- Temperatura. pass@k zależy od dywersyfikacji próbek; przy temperaturze 0 wszystkie próbek są identyczne i pass@k = pass@1.
- i . Większe zawsze podnosi miarę (więcej szans), dlatego porównuj tylko te same pary .
- Testy. pass@k jest tak dobry, jak testy: słabe testy przepuszczają błędne rozwiązania.
- Raportowanie. Zawsze podawaj parę obok wyniku: „pass@k = 0.5" bez jest niejednoznaczne.
pass@1 i krewni
pass@1 to szczególny przypadek — ułamek poprawnych pierwszych prób, bliski zwykłej accuracy na kodzie. W benchmarkach agentowych bliskim krewnym jest Resolved rate: czy agent rozwiązał zadanie w całości, weryfikowane testami w środowisku.
pass@k stosuj tam, gdzie dopuszczasz retry lub ranking kandydatów: generowanie kodu, planowanie agentowe. Do systemów, które muszą działać za pierwszym razem, raportuj pass@1 — wysoki pass@5 przy niskim pass@1 oznacza, że model wymaga poprawek.
Zobacz też: pass@k, SWE-bench Verified.