想象你是一家大医院的院长,想评估手下医生的真实水平。你不能只问「你会看病吗」,而是要拿着真实病例,看他们能否准确诊断、开出有效处方、让病人真正康复。AI代码修复能力评测,做的是同一件事——我们想知道AI模型能不能像资深医生一样,面对一段出错的代码,精准定位病灶、开出修复「药方」,而且这副药真的能让程序恢复健康。 这篇文章将带你完整走一遍「AI医生考核」的流程:考卷怎么出(评测数据集如何构建)、怎么判卷(修复正确性如何判定)、怎么打分(评测指标体系)、当前「医生们」的水平参差(主流模型表现对比),以及考试标准本身如何演进(评测基准的发展趋势)。全程用「医院看病」的比喻贯穿,让你零基础也能理解代码修复评测的每个环节。

岗位关联

掌握AI代码修复评测方案的设计能力,是评估大模型代码能力的核心技能之一。无论你做模型研发、AI应用落地还是质量保障,这套方法论都能帮你看懂模型能力边界、设计可信的评测实验。

目录
  1. 可视化演示
  2. 任务定义与Bug分类
  3. 评测数据集构建
  4. 修复正确性判定
  5. 评测指标体系
  6. 主流模型水平对比
  7. 评测基准演进趋势
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示AI代码补全的上下文感知生成流程,以及pass@k等评测指标的计算方式和模型对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

代码补全生成流程 上下文输入:已有代码提供上下文窗口 模型推理:基于上下文预测后续token 补全输出:多候选生成+排序选择最优 P(comp | context) = argmax P(token_t | context) 上下文越长补全越准确

任务定义与Bug分类

想象你是一名主治医师,每天面对的病人千奇百怪:有的头疼发热,有的外伤骨折,有的慢性病缠绵多年。要评估一位实习医生的水平,首先要让他学会区分病种、对症下药。AI代码修复评测也一样——第一步就是把「代码问题」这件事实实在在地定义清楚,否则后面的一切考核都无从谈起。

所谓代码修复任务,就是向AI模型输入一段存在Bug的代码(通常还附带报错信息或失败的测试日志),要求模型输出修复后的正确代码片段。这就像医生拿到病人的化验单和症状描述,需要开出对应的处方。模型不仅要指出问题在哪,还要给出能真正解决问题的「药」——完整的、可运行的修复代码。

实际评测中,Bug类型通常分为三类。第一类是语法错误,代码根本无法编译通过,如同呼吸困难需要急救的病人,虽然看起来吓人但往往最好治;第二类是逻辑错误,代码能跑但计算结果不对,如同潜伏的慢性病,表面正常实则隐患重重;第三类是边界条件错误,只在特定输入下才崩溃,如同只在剧烈运动时发作的心脏病,最难定位也最考验医生的经验。评测时通常分层统计这三类Bug的修复率,因为它们的难度不在一个量级。

一份完整病历要写明主诉、检查结果和处方,标准的代码修复任务也一样:Bug代码、错误线索、修复目标三者缺一不可。任务定义得越清晰,后续的考试才越公平,不同模型之间的比较才站得住脚。

Model(cbuggy,eerror)→cfixed\text{Model}(c_{\text{buggy}}, e_{\text{error}}) \rightarrow c_{\text{fixed}}
这个公式表示:代码修复模型接收两个输入——有Bug的代码 \(c_{\text{buggy}}\) 和描述错误的报错信息 \(e_{\text{error}}\),输出修复后的代码 \(c_{\text{fixed}}\)。就像医生看病需要「症状描述 + 检查报告」才能开处方。
  1. 输入Bug代码模型拿到的第一份输入是存在缺陷的源代码片段,这是待诊断的「病人」。
    cbuggyc_{\text{buggy}}
  2. 附带错误信息很多评测会额外提供报错日志或测试失败输出,帮助模型快速定位问题区域。
    eerrore_{\text{error}}
  3. 输出修复结果模型的产出是修复后的完整代码,而不是一句「这里有Bug」的诊断结论。
    cfixedc_{\text{fixed}}

评测数据集构建

医生水平评估不能靠凭空编造病例——你给实习医生看的病例必须真实、典型、有据可查。AI代码修复评测同样如此:一份高质量的「考卷」是整个评估体系的基石。如果考卷本身出题不严谨,AI医生考了满分也不能证明它真的会看病。

评测数据集的构建主要有三条路。第一条是从真实开源项目中挖掘Bug——去GitHub上找那些曾经出过问题的代码提交,同时保留Bug版本和修复版本,这相当于收集真实临床病例,自然且接地气。第二条是人工构造缺陷——在正确的代码里人为埋入错误,这相当于用标准化病人做模拟演练,可控制性强。第三条是混合方式,兼取两者之长。

真实Bug的优点是高度自然、贴近实际开发,但收集成本高、难度分布不均;人工Bug的优点是标注准确、难度可控,但模式往往过于简单,无法覆盖真实场景的复杂性。当前主流基准(如Defects4J、BugsInPy、SWE-bench)大多以真实项目Bug为主。在数据规模上,一个可靠的评测集至少要包含几十到几百个Bug样例——太少则统计结果没有意义,太多则评测成本难以承受。

好医院的病例库一定分门别类、标注清晰、既有疑难杂症也有常见病。好的评测数据集同样要平衡Bug难度和类型,每条数据都带「金标准」修复方案。这样AI医生考完之后,我们才能清楚地知道它擅长什么、不擅长什么,而不是得到一个模糊的总分。

D={(bi,fi,ti)∣i=1,…,N}D = \{ (b_i, f_i, t_i) \mid i = 1, \ldots, N \}
评测数据集 \(D\) 由 \(N\) 个样例组成,每个样例是一个三元组:有Bug的代码 \(b\)、参考修复补丁 \(f\)、验证测试 \(t\)。相当于每份「病例档案」都附带了标准答案和复查手段。
  1. Bug代码组件每个数据点都包含带缺陷的源代码版本,这是给AI的「考题」。
    bib_i
  2. 参考修复补丁人工确认真确的修复方案,用于对照模型的输出质量。
    fif_i
  3. 测试用例集用于自动验证修复是否正确的测试套件,相当于「复查仪器」。
    tit_i

修复正确性判定

病人吃了药,医生不能说「我觉得应该好了」——必须复查血液指标、做影像检查,用数据说话。AI生成了一行修复代码,我们也不能只看它「长得像不像」标准答案,而要实际运行测试来验证它是否真的解决了问题。

修复正确性判定是整个评测中最关键的一环。主流方法是「功能等价测试」:运行一组针对该Bug精心设计的测试用例,如果修复后的代码全部通过,就判定修复成功。这相当于医学上的治愈标准——症状消失、指标正常、且没有新的并发症。注意,判定的是修复后的代码行为,而不是候选代码与参考补丁的文本相似度。

具体的判定有三个层次。第一层是编译/语法检查,代码必须能通过编译,这是最基础的门槛,相当于病人不能下不了手术台。第二层是测试套件执行——运行预定义的「失败用例」和「回归用例」,目标是失败用例转绿、且原有功能不退化。第三层是语义等价判断,通过静态分析或模糊测试来比较修复前后代码的行为一致性,这在测试用例覆盖不充分时尤为关键,能帮助发现「碰巧过测试但逻辑仍错误」的假修复。

出院标准不能只看病人脸色好不好,还要看各项生化指标是否正常。代码修复的「出院标准」同理——不能靠人眼主观判断代码样式,必须让测试用例这个「检验科」出具客观报告。测试覆盖面越全,这份报告的权威性就越高。

Correct(c′)=I[TestAll(c′)=True]\text{Correct}(c') = \mathbb{I}\left[ \text{TestAll}(c') = \text{True} \right]
这个判定函数简洁而严格:只有当修复后的代码 \(c'\) 通过全部预设测试用例时,\(\text{Correct}\) 才等于1(修复成功),否则为0。它回答的是一个二元问题:治好了,还是没治好。
  1. 修复后代码模型生成的补丁应用到代码库后形成的完整版本。
    c′c'
  2. 运行全部测试执行针对该Bug设计的失败用例与回归用例的合集。
    TestAll(c′)\text{TestAll}(c')
  3. 二值判定结果全过取1(成功),任一失败取0(失败),不设中间态。
    I[⋅]\mathbb{I}[\cdot]

评测指标体系

一家医院的治愈率高不高,不能靠个别病人的口碑,而要用统一的统计指标来衡量。AI代码修复评测也有自己的「医院排行榜」指标。最核心的是「修复成功率」,即全部被测Bug中修复成功的比例。但单看这一项不够全面——因为模型每次生成的修复方案可能不同,存在随机性。

因此业界广泛使用 Pass@k 指标:允许模型对每个Bug生成 k 个候选修复方案,只要其中任意一个通过测试,就计为该Bug修复成功。这相当于允许医生做「二次诊断」——给患者提供一套备选治疗方案,其中一套起效就算治愈。k 越大,成功率通常越高,但也就越偏离真实使用场景。

除此之外,还有「多修复率」(要求 k 个候选里至少 m 个都正确才算成功,考察稳定性)、「编译通过率」(生成补丁的语法有效性)、「运行效率」(平均修复耗时与计算成本)。评测实践中的黄金法则是组合使用多类指标:修复成功率管「能不能治好」,Pass@k 管「给几次机会能治好」,运行效率管「治一次花多少钱」。

就像医院季报会同时公布接诊量、治愈率和平均住院天数,AI代码修复评测也一定要多维度呈现。只看一个指标,就像只问患者「过了危险期没」,却不关心他恢复得怎么样、花了多少时间——给出全面的指标组合,模型的真实水平才无所遁形。

Pass@k=1−(n−ck)(nk)\text{Pass@k} = 1 - \frac{\binom{n-c}{k}}{\binom{n}{k}}
Pass@k 的直觉是:模型在 \(n\) 个Bug中有 \(c\) 个是「有把握修对的」,但评测时不知道哪几个,只能生成候选碰运气。公式用组合数算出「k次候选全部落空」的概率,用1减去它就得到「至少命中一次」的概率。
  1. 总样本数评测数据集中包含的Bug总数,公式中的底数。
    nn
  2. 可修复样本数模型至少能产出一个正确修复的Bug数量。
    cc
  3. 全部落空的概率从不可修复的 \(n-c\) 个中抽k次,组合数为 \(\binom{n-c}{k}\)。
    (n−ck)\binom{n-c}{k}
  4. 取补集得成功概率用1减去「全落空」概率,得到至少一个成功修复的概率。
    1−(n−ck)(nk)1 - \frac{\binom{n-c}{k}}{\binom{n}{k}}

主流模型水平对比

医院排行榜一出,各家医生的水平立见高下。目前AI代码修复领域的「医生们」——GPT-4、Claude、开源模型——表现到底如何?这是所有评测者最关心的问题,也是评测结果最有价值的输出。

根据主流基准测试的公开数据,闭源大模型在代码修复任务上整体领先。以SWE-bench为例,最新一代GPT-4类模型能够修复约25%-30%的真实GitHub Issue问题,Claude系列表现相当;优秀的开源模型(如DeepSeek等)能修复约15%-20%。听起来差距只有10个百分点,但这些被选中作为考题的Issue都不是「感冒发烧的小毛病」,每一个都难度极高,10个百分点的差距背后是巨大的工程能力差异。

比总分更重要的是典型失败模式。第一种是「复读机」——模型把Bug描述复述了一遍,但代码没改或只改了无关紧要的地方;第二种是「过度治疗」——模型大改特改,虽然测试碰巧通过,但引入了大量不必要的变更,相当于给病人做了个全器官移植;第三种是「注意力偏航」——模型被大段无关代码干扰,压根没定位到真正的Bug。评测时观察这些失败模式,比只看总分更能指导模型的后续改进方向。

三甲医院与社区医院的差距从来不只体现在个别疑难病例上,而是整体的诊疗深度。目前闭源模型在复杂Bug上的优势明显,但开源模型迭代速度极快,差距正在肉眼可见地缩小。也许过不了多久,这份「AI医生排行榜」就要重新洗牌了。

Δ=PassRate闭源−PassRate开源\Delta = \text{PassRate}_{\text{闭源}} - \text{PassRate}_{\text{开源}}
这个公式量化了闭源与开源模型之间的修复能力差距。PassRate 是各自在同一评测基准上的修复成功率,两者的差值就是当前的能力鸿沟。
  1. 闭源模型修复率GPT-4等商业模型在同一基准上的修复成功率。
    PassRate闭源\text{PassRate}_{\text{闭源}}
  2. 开源模型修复率最佳开源模型在同一基准上的修复成功率。
    PassRate开源\text{PassRate}_{\text{开源}}
  3. 能力差距值两者相减得到鸿沟大小,正值代表闭源领先。
    Δ\Delta

评测基准演进趋势

医学考试的标准不是一成不变的——几十年前认为正常的生理指标,今天可能被认为异常。AI代码修复评测基准同样经历了从简单到复杂、从静态到动态的演进,理解这段历史能帮我们判断评测结果的时代局限性。

早期的代码修复评测基准以合成Bug为主:研究者人为地在正确代码中埋入错误,测试模型对特定错误模式的修复能力。这类基准相当于「标准化病人」考试,优点是成本低、可重复,缺点是题目模式太规整,与真实Bug的复杂面貌相去甚远——标准化病人背熟了剧本,真实病人却可能同时患有三种合并症。

近年来的现代基准如SWE-bench完成了质变:直接用GitHub真实Issue作为考题,任务从「修复给定的一小段代码」升级为「在完整代码仓库中定位问题并修复」。到了这一代,AI医生面对的已经是真实的「急诊病人」,需要在五花八门的症状中抽丝剥茧。最新的趋势是「动态评测」——为了防止模型在评测数据上「刷题」(训练数据泄漏),评测集持续滚动更新,不断从最新社区Issue中取题。未来的方向包括多语言覆盖、多模态Bug报告理解,以及从「修复是否有效」走向「修复是否优雅」——评估补丁的安全性、性能开销和长期可维护性。

从标准化病人到真实临床轮转,医学生的考试越来越贴近真实的医患环境。AI代码修复评测也正从「人造题库」大步走向「真实战场」,评估标准只会越来越严、越来越专业。因为我们真正想要的不只是一个会做教科书例题的AI,而是一个能在一线代码战场上治病救人的「大医」。

Score动态=1T∑t=1TRt\text{Score}_{\text{动态}} = \frac{1}{T} \sum_{t=1}^{T} R_t
动态基准的最终分数是多个时间窗口修复率的平均值。每个时间窗口都使用新采集的、模型没见过的高质量Bug,以此确保「考试不泄题、成绩不作假」。
  1. 时间窗口总数评测按采集时间切分为 \(T\) 个批次,每批都是新题。
    TT
  2. 单批次修复率模型在第 \(t\) 批新采集Bug上的修复成功率。
    RtR_t
  3. 平均总分各批次成绩取算术平均,得到动态基准的最终得分。
    1T∑t=1TRt\frac{1}{T} \sum_{t=1}^{T} R_t

AI 应用场景

CI/CD流水线中的自动Bug修复

阶段:模型推理与部署

解决的问题:传统持续集成(CI)流程一旦构建失败,开发者需要手动阅读日志、定位Bug、编写修复代码,每次平均耗时数小时。引入AI代码修复模型后,可以在CI失败时自动生成修复补丁,供开发者一键确认或微调,开发周期大幅缩短。

具体案例:某大型开源项目在CI流水线中接入AI修复服务,构建失败后模型自动分析报错日志并产出候选补丁。评测数据表明,接入后约30%的常见Bug可被AI直接修复,人工介入时间减少了40%。

安全漏洞批量修复评估

阶段:模型评测与效果验证

解决的问题:安全团队面对扫描器发现的大量安全漏洞,人工修复效率极低。使用代码修复能力评测框架,可以系统评估AI模型对安全类Bug(如SQL注入、缓冲区溢出)的修复水平,从而决定哪些漏洞可以放心交给AI处理。

具体案例:某金融机构在应用安全报告中积累了几百个漏洞样本,利用代码修复评测流程给多款大模型「考试」,筛选出安全修复准确率最高的模型,将其部署到漏洞管理平台,把高危漏洞的平均修复时间从天级缩短到小时级。

Python 演示

python80 行
# -*- coding: utf-8 -*-"""模拟AI代码修复能力评测流程"""import random SAMPLES = [    "def add(a, b):\n    return a + b",    "def max_val(x, y):\n    return x if x >= y else y",    "def is_even(n):\n    return n % 2 == 0"] TESTS = {    "add": [((1, 2), 3), ((-1, 1), 0), ((0, 5), 5)],    "max_val": [((1, 2), 2), ((5, 5), 5), ((-1, -3), -1)],    "is_even": [(2, True), (3, False), (0, True)]}  def inject_bug(source):    """模拟从真实项目收集Bug,这里用规则替换构造"""    if "a + b" in source:        return source.replace("a + b", "a - b")    if "x >= y" in source:        return source.replace("x >= y", "x > y")    if "n % 2" in source:        return source.replace("n % 2", "n % 3")    return source  def get_func_name(source):    """从代码中提取函数名"""    return source.split("(")[0].replace("def ", "").strip()  def run_tests(source, func_name):    """运行测试用例,全部通过返回True"""    namespace = {}    try:        exec(source, namespace)    except Exception:        return False    func = namespace[func_name]    for args, expected in TESTS[func_name]:        try:            if func(*args) != expected:                return False        except Exception:            return False    return True  def model_repair(buggy_source):    """模拟中等水平模型的修复行为(实际应调用LLM API)"""    rules = {        "a - b": "a + b",        "x > y": "x >= y",        "n % 3": "n % 2"    }    for bug, fix in rules.items():        if bug in buggy_source:            return buggy_source.replace(bug, fix)    return buggy_source  def main():    """主流程:注入Bug -> 模型修复 -> 测试判定 -> 统计修复率"""    random.seed(42)    total = len(SAMPLES)    fixed = 0    for source in SAMPLES:        buggy = inject_bug(source)        repaired = model_repair(buggy)        if run_tests(repaired, get_func_name(source)):            fixed += 1        else:            print(f"修复失败: {buggy.splitlines()[0]}")    print(f"评测完成: {total} 个Bug, 修复成功 {fixed} 个, 修复率 {fixed/total:.0%}")  if __name__ == "__main__":    main()
目的:用最简单的方式演示代码修复评测的四个核心步骤——构造带Bug的数据集、调用修复模型(此处为规则模拟)、运行测试判定正确性、汇总统计修复率。
  1. SAMPLES = [...]定义评测数据集,这里是三个正确函数,代表「健康样本」。
  2. inject_bug(source)模拟真实世界收集到的Bug版本,对应评测数据集的「有缺陷代码」。
  3. TESTS = {...}为每个函数预设测试用例,这就是判卷的「标准答案」。
  4. run_tests(source, func_name)在隔离的命名空间中执行修复后代码并运行全部测试,完全等价于正文中的 Correct 判定函数。
  5. namespace = {}用独立字典做执行环境,避免修复代码污染主进程,安全且干净。
  6. model_repair(buggy_source)模拟模型生成修复补丁;真实项目中应当替换为调用大模型API。
  7. fixed += 1每通过一个Bug的测试,计数器加一,最后除以总数得到修复率。

常见误区

误区小白经常觉得,只要模型生成的代码能通过运行测试用例,就可以判定修复成功了,万事大吉。

正解测试用例的覆盖率才是关键。如果测试集本身漏掉了某个边界条件,哪怕全部通过,代码依然可能带着未被发现的Bug上线。就好比只量了血压就说病人痊愈,却没有查血糖和心电图。严谨的评测还会补充语义等价分析、回归测试和人工抽检,防止「虚假治愈」。

为何常见:测试用例是唯一全自动且客观的验证手段,运行结果清晰明了,人很容易把「工具本身不错」误当成「工具结果绝对可靠」。

误区有人觉得,只要往正确代码里埋几个错误,就能模拟出真实的Bug,用这类数据评测足够了。

正解真实项目的Bug往往藏于复杂的依赖关系、并发逻辑和业务规则之中,远非简单替换一个运算符就能模拟。标准化病人会说剧本台词,真实病人的症状却千奇百怪、还伴有并发症。用合成Bug评测得到的高分,放在真实场景中往往大幅缩水。

为何常见:人工构造Bug成本低、可精准控制,测试起来方便,容易让人下意识忽略它在真实性和复杂度上的天然短板。

误区看到排行榜上某模型修复率比另一个高5个百分点,就认为前者全面碾压、可以直接选型。

正解评测数据集的构成(Bug难度分布、语言类型、库版本)、测试用例的严密程度、Pass@k中的k值设置,都会显著影响最终分数。一个充满简单Bug的数据集上,所有模型都能拿到高分,区分度为零。要像看待医院治愈率一样看待修复率——先问收治的病人是什么病情,再谈治愈率高低。

为何常见:排行榜数字直观且易传播,人天生偏好「一刀切」的比较结论,容易忽略数字背后的评测条件差异。

误区模型在SWE-bench等公开基准上拿了高分,开发者就迫不及待地将其接入生产环境,期待同等水平的修复效果。

正解这会遇到两道坎:一是数据泄漏风险,模型的训练语料可能已包含评测基准中的Issue和修复方案,相当于考试做过原题;二是分布漂移,生产环境的私有代码风格、框架版本、依赖关系与基准差异极大,模型的真实能力需要做小规模人工验证才能确认。

为何常见:公开基准是唯一能横向对比不同模型的标准尺子,分数容易带给人确定性错觉,忽略了实验室分数与生产线效果之间的鸿沟。

面试题

Q1. 代码修复评测中,最常用的修复正确性判定方式是?

单选题 · easy

  • A.人工查看代码质量
  • B.运行测试用例验证← 正确答案
  • C.比较修复前后行数
  • D.检查代码注释风格

答案:B。运行测试用例验证是主流方式——修复后的代码必须通过全部预设测试才算成功,如同病人复查各项指标。人工查看代码质量和注释风格都是主观手段,比较行数则与功能正确性完全无关。

Q2. 评测数据集中「真实Bug」的主要来源是?

单选题 · easy

  • A.人工编写的错误代码
  • B.开源项目的历史缺陷← 正确答案
  • C.编译器自动生成错误
  • D.由模型自身产生的错误

答案:B。真实Bug通常从开源项目的版本历史中挖掘——开发者修复过的Issue天然带有「Bug版本 + 修复版本」对,最为自然。人工编写代码属于合成Bug,编译器与模型产生的错误则不属于标准评测数据来源。

Q3. 正确的代码修复判定通常需要满足哪些条件?

多选题 · mid

  • A.代码能够通过编译← 正确答案
  • B.失败测试用例转为通过← 正确答案
  • C.原有功能测试不退化← 正确答案
  • D.代码行数与参考补丁一致

答案:ABC。修复的「治愈标准」有三层:能编译(下得了手术台)、失败用例转绿(病灶消失)、回归用例不退化(无并发症)。代码行数是否与参考补丁一致属于文本相似度对比,不是功能正确性的判据。

Q4. Pass@k指标的核心含义是什么?

单选题 · mid

  • A.前k个Bug必须全部修复
  • B.生成k次候选至少一个通过← 正确答案
  • C.修复耗时不超过k分钟
  • D.测试用例数量至少为k个

答案:B。Pass@k允许模型对每个Bug生成k个候选补丁,只要其中一个通过测试就算该Bug修复成功。这相当于给医生多次「复诊开方」的机会,考察的是「给予足够尝试时能治好吗」。

Q5. 为什么合成Bug不如真实Bug可靠?

单选题 · mid

  • A.合成Bug的数量通常太少
  • B.模式简单缺乏真实性← 正确答案
  • C.合成Bug无法用测试验证
  • D.只能构造语法类错误

答案:B。人工埋错通常只做简单的运算符替换或条件翻转,模式单薄,难以覆盖真实Bug的复杂依赖关系。合成Bug完全可以被测试验证,数量也很充足,天然缺陷在于「仿真度」而非「可用性」。

Q6. SWE-bench基准相比早期基准最大的进步是什么?

单选题 · hard

  • A.使用了更多的测试用例
  • B.从真实Issue出发修复仓库← 正确答案
  • C.支持了更多编程语言
  • D.评测的耗时大幅缩短

答案:B。SWE-bench直接把GitHub上的真实Issue作为考题,模型要在完整代码仓库中自主定位并修复问题,而非在给定的小片段上打补丁。这是从「标准化病人」到「真实急诊」的质变,测试用例数量和语言支持都是次要改进。

Q7. 评测基准采用动态演进(持续采集新Issue)的主要目的是什么?

多选题 · mid

  • A.防止模型训练数据泄漏← 正确答案
  • B.确保评测任务难度可控
  • C.使评测贴近真实开发场景← 正确答案
  • D.降低每次评测的计算成本

答案:AC。动态基准定期纳入最新社区Issue,从根本上杜绝「模型背过原题」的数据泄漏问题,同时让任务始终反映当下开发者的真实痛点。动态更新会增加而非降低评测成本,难度稳定也不是它的直接目标。

Q8. 在Pass@k公式中,若n=30、c=15、k=3,Pass@3的数值约为多少?

单选题 · extreme

  • A.约 82.5%
  • B.约 88.8%← 正确答案
  • C.约 72.3%
  • D.约 95.1%

答案:B。代入公式 Pass@3 = 1 − C(15,3)/C(30,3)。计算得 C(15,3)=455,C(30,3)=4060,455/4060 ≈ 0.112,因此 Pass@3 ≈ 0.888,即 88.8%。这道题要求理解公式中每个符号的含义并完成组合数运算。

Q9. 标准的代码修复任务中,模型的输入通常包含什么?

单选题 · easy

  • A.只有报错信息
  • B.Bug与报错信息← 正确答案
  • C.只有测试用例
  • D.只有函数名称

答案:B。模型通常同时接收「有Bug的代码」和「描述错误的报错信息」,就像医生需要「主诉 + 检查报告」来诊断。输入越丰富,定位越高效;但单独给其中任何一项信息都不足以构成完整的修复任务。

Q10. 以下哪些属于AI代码修复中的典型失败模式?

多选题 · hard

  • A.复述Bug但代码未改动← 正确答案
  • B.过度修改引入新风险← 正确答案
  • C.被无关代码干扰未定位← 正确答案
  • D.补丁通过测试但缺少注释

答案:ABC。复读机(只描述不修复)、过度治疗(大幅改动带来隐患)、注意力偏航(被无关代码带偏)是三种经典失败模式,直接影响修复质量。而「通过测试但缺少注释」说明功能是正确的,只是代码风格问题,不属于失败修复的范畴。