首页/AI/提示词工程速查/代码评估 pass@k
评估与迭代50 条

代码评估 pass@k

代码任务用 pass@k 度量:同一题生成 k 个候选,只要有一个通过测试即算通过;k 越大越宽松,报告必须带 k。

提示词工程速查AI更新于 2026-10-13

代码评估 pass@k 是什么

代码任务常用 pass@k 度量:同一道题生成 k 个候选,只要其中有一个通过测试就算通过。k 等于 1 时是首次作答的通过率,最接近单次使用的真实体验;k 较大时反映的是「多试几次能不能用」的概率。它是一个偏宽松的指标,报告时必须带 k、每题采样数 n 与采样设置,否则数字既无法复现,也无法与别的实验比较。

基本信息

口径pass@1 是首答通过率;k 大于 1 反映多试可用概率
输入每题采样 n 个候选,其中 c 个通过测试
判定由单元测试决定,测试覆盖度决定指标含金量
报告必须同时给出 k、n 与采样参数

典型使用场景

  • 代码模型能力对比:统一题目、采样数与 k 之后再比较,否则结论不可比
  • 生成式补全的回归门禁:pass@1 不得低于基线,退化即拦截合并
  • 多候选产品的效果评估:用户可以在多个候选里挑选时看 pass@5
  • 测试集质量核对:先看 pass@1 是否被过弱的用例抬高,再决定是否补边界用例
  • 采样参数调优:观察温度变化时 pass@1 与 pass@5 的走向差异

pass@k 无偏估计

pass@k 无偏估计
# 每题采样 n 个候选,其中 c 个通过;无偏估计公式:
# pass@k = 1 - C(n-c, k) / C(n, k)
python - <<'PY'
import math

def pass_at_k(n, c, k):
    # n=该题候选数,c=通过数,k=报告口径
    if n - c < k:
        return 1.0          # 通过的候选足够多,必然能凑齐 k 个
    return 1.0 - math.comb(n - c, k) / math.comb(n, k)

print(pass_at_k(n=10, c=3, k=1))   # 首答通过率
print(pass_at_k(n=10, c=3, k=5))   # 允许挑 5 个时的通过概率
PY

指标口径逐项读法

指标含义使用注意
pass@1首次作答就通过的比例最贴近单次使用体验,对采样温度敏感
pass@k(k 大于 1)多试可用概率随 k 单调上升,不同 k 之间不可直接比较
n(采样数)每题生成的候选个数n 太小时估计不稳,报告必须给出
c(通过数)该题有多少候选通过了测试测试用例越强,c 越接近真实能力
测试覆盖判定通过的用例强度只测正例会让 pass@k 整体虚高
把公开用例全部写进提示,模型会针对性把逻辑写死在这几个输入上,指标很高但换一批输入就不成立。保留一部分隐藏用例,是让 pass@k 有意义的前提。
生成温度对两个口径的影响方向相反:温度升高时候选多样性上升,pass@1 常常下降而 pass@5 上升。所以报告里必须同时给出采样设置,否则读者会把温度变化误读成能力变化。
执行模型生成的代码必须放在隔离沙箱里并限制超时与资源。在宿主机上直接运行候选代码,等于把不受控的代码放进生产环境。

易错点

  • 只报 pass@k 不报 k、n 与采样参数,数字无法复现,也无法与别的实验做对比
  • 测试用例覆盖太弱(只测正例)时 pass@k 虚高,上线后大量边界场景失败
  • 把不同 k 的数值画在同一张趋势图上比较,看到的是 k 变大而不是模型变强
  • 公开全部用例导致模型把逻辑写死到用例上,指标好看但泛化能力差
  • 在宿主机上直接执行候选代码,缺少沙箱与超时限制,带来安全与稳定性风险

数据来源与参考

  • Evaluating Large Language Models Trained on Code(Chen et al., 2021):pass@k 无偏估计
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌