想象你是一家公司的技术负责人,想招聘一位能独立干活的全栈工程师。面试时背书背得再好也没用,你真正想看的是:给他一台装满真实项目代码的电脑,丢给他一个用户报上来的 Bug 工单,看他自己读代码、定位问题、动手修改、最后跑通测试把修复提交上来。 SWE-bench 干的就是这件事——只不过考生换成了 AI Agent。它不是一套智力测验题,而是一张张从真实开源项目里摘出来的“入职实操考核表”:每一个任务都来自 GitHub 上真实仓库的真实 Issue(问题工单),配上真实工程师当年写下的修复补丁作为参考答案,再按统一的规则判卷:你提交的修改,是否能让原本失败的测试通过、同时不弄坏原本正常的测试?这就像给 AI 做一场标准化的“新员工试用期考核”,考的不是花哨的推销话术,而是扎扎实实的代码理解、定位、修改与验证能力。

岗位关联

对 AI 从业者来说,SWE-bench 是把“AI 能不能真干活”落到数字上的标尺——无论是评估模型选型、迭代 Agent 工具链,还是向团队证明你的系统真的有价值,它都能提供一份可复现、可对比的量化依据。

目录
  1. 可视化演示
  2. 任务构造——从真实工单到考核题目
  3. 评测环境——隔离的考试机房
  4. 解决率统计——公平的评分标准
  5. 模型对比——Agent 排行榜
  6. 局限性——考试的盲区
  7. 改进方向——让考试更可信
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示RAG系统评估流程、多配置A/B对比实验与五维指标雷达图,交互切换模式查看不同评估维度。

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

RAG评估流程 查询经检索增强后生成答案,全链路评估 Top-K控制检索文档数量,影响召回与延迟 F1 = 2*P*R/(P+R) 调节滑块查看不同Top-K下的指标变化

任务构造——从真实工单到考核题目

公司要设计一场“入职实操考核”,HR 不会凭空编题,而是从过去一年的客服工单里,挑出那些描述清晰、真实影响用户的经典 Bug,再配上当年老员工修复这些 Bug 时留下的代码记录。这样,每一道考题都有据可依,也有标准答案可对照。SWE-bench 正是这样出题的:它从 GitHub 上的真实开源仓库里,把历史上真实出现过的 Issue 拿出来,作为考核 AI 的题目。

具体来说,SWE-bench 团队从 Django、SymPy、scikit-learn、matplotlib 等 12 个流行的 Python 开源库中,筛选出了 2294 个真实 Issue。这些 Issue 必须满足一个关键条件:它们都对应着一个真实工程师提交的修复 PR(Pull Request)。换句话说,每一道题都有“真人考生”验证过、确定可以被解决——这就避免了出题时出现“无解难题”的尴尬。

筛选完成后,围绕每个 Issue 构建一个如下所示的任务元组:

这样,每一道“考题”都来自真实世界,考的就是 AI 在真实代码库中定位问题、动手修复、并确保测试通过的综合能力——正如一份好的入职考核,题目必须真实、答案必须验证过一样。

任务i=(Issue描述i, 基准Commiti, 真人Patchi, 测试用例i)\text{任务}_i = \big( \text{Issue描述}_i,\ \text{基准Commit}_i,\ \text{真人Patch}_i,\ \text{测试用例}_i \big)
一个 SWE-bench 任务由四个要素组成:问题描述、修复前的代码基线、人工修复补丁作为参考答案,以及验证修复效果的测试用例。
  1. Issue 描述用户提交的自然语言 Bug 报告,相当于考题题干
    Issue描述i\text{Issue描述}_i
  2. 基准 CommitBug 尚未被修复时的代码版本,即考生开始动工的代码库快照
    基准Commiti\text{基准Commit}_i
  3. 真人 Patch当年工程师真正修好这个 Bug 的代码改动,用作评分参考答案
    真人Patchi\text{真人Patch}_i
  4. 测试用例用于验证修复有效性的专门测试,是最终判卷的依据
    测试用例i\text{测试用例}_i

评测环境——隔离的考试机房

有了考题,接下来要布置考场。如果每个考生用的电脑配置不一样,有人用的 Python 版本新、依赖装得全,有人用的环境乱七八糟,那考试结果就失去了可比性。所以,正规考核一定要求:所有考生在完全相同的机器和软件环境中作答。SWE-bench 也是这个思路,它用 Docker 容器为每个任务搭建一个独立、干净、可复现的“考试机房”。

在这个隔离环境里,SWE-bench 为每个任务锁定了“基准 Commit”——也就是 Bug 还没被修复时的代码版本。Agent 拿到的代码库,恰好停在老工程师动手之前,这与真实世界里的“接单修 Bug”完全一致:你永远是从现状出发,而不是从答案出发;你打下的每一个补丁,都要能叠加在这个历史基线上。

接着,评测环境会按照依赖清单安装好所有需要的包和测试框架,然后自动跑测试。整个过程用公式描述就是:

这种方式确保了评测的可复现性——就像考场里的每台电脑都来自同一条装配线,任何考生都没有“环境作弊”的空间。

环境i=(Python版本, 依赖列表, 基准Commiti, 测试框架)\text{环境}_i = \big( \text{Python版本},\ \text{依赖列表},\ \text{基准Commit}_i,\ \text{测试框架} \big)
每个任务的环境由四个维度精确锁定,保证任何 Agent 来考,拿到的都是同一台“电脑”。
  1. Python 版本统一定义解释器版本,避免版本差异导致行为不同
    Python版本\text{Python版本}
  2. 依赖列表列出项目运行所需的全部第三方库及其版本
    依赖列表\text{依赖列表}
  3. 基准 Commit将代码仓库回滚到修复前的历史版本
    基准Commiti\text{基准Commit}_i
  4. 测试框架选用项目原生的 pytest 等测试框架执行判定
    测试框架\text{测试框架}

解决率统计——公平的评分标准

考试不能只靠阅卷老师的印象给分,得有一套客观、明确的评分规则。SWE-bench 的评分标准相当巧妙,它借鉴了软件开发中一个朴素的原则:修复 Bug 的最高境界是“刚开失败的测试,现在通过了;原本好好的功能,也没被动坏”。这就是“失败转正”(Failed-to-Pass,F2P)与“回归保护”(Pass-to-Failed,P2F)的判定思想。

具体评分时,SWE-bench 为每个任务准备了两组测试:一组是从真人修复 PR 里提取的、能够复现 Bug 的“失败转正测试”;另一组是项目既有的“回归测试”,用来确保 Agent 的改动没有弄坏其他功能。只有当 Agent 提交的补丁让失败转正测试全部通过,同时没有让任何回归测试由通过变成失败,这个任务才被记为“解决”。

在此基础上,解决率的统计方法很直接:

除了整体解决率,社区还常用 Pass@1 指标来衡量 Agent 的“一次性成功率”——即模型第一次尝试就成功完成任务的概率。这两个指标组合起来,既看平均实力,也看单次稳定性,就像考试既看总分,也看是否一次答对。

解决率=1N∑i=1N1[任务i 被解决]×100%\text{解决率} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}\big[ \text{任务}_i \text{ 被解决} \big] \times 100\%
解决率等于被判定为“解决”的任务数占总任务数的百分比。它是 SWE-bench 最核心、最直观的量化指标。
  1. 总任务数进入评测的全部 SWE-bench 任务个数,即分母
    NN
  2. 指示函数对每个任务判断是否满足“失败转正且无回归”,满足记 1,否则记 0
    1[⋅]\mathbb{1}\big[ \cdot \big]
  3. 求和平均对所有任务的指示结果求和后除以总数,得到解决比例
    1N∑i=1N\frac{1}{N} \sum_{i=1}^{N}
  4. 百分比转换将比例乘以 100%,得到人们习惯的百分数表述
    ×100%\times 100\%

模型对比——Agent 排行榜

考试的意义除了评估个人能力,更重要的是在候选人之间横向比较。SWE-bench 发布后,各大 AI 实验室和开源社区都把它当作“新员工考核赛场”,纷纷提交自家 Agent 的成绩单。这就像公司同时让多批候选人进入同一个考场、面对同一份试卷,然后按统一评分标准排出座次。

从 SWE-bench 论文及后续跟踪报告来看,GPT-4、Claude 系列以及各类开源模型都在这份榜单上亮过相。早期结果非常“扎心”:即使是最强模型,在完整 SWE-bench 基准上的解决率也长期徘徊在 10% 到 30% 之间。这意味着即使是最先进的 AI Agent,面对真实软件工程任务时,仍有约七成甚至九成的 Bug 修复不了。模型间的差距用如下公式刻画:

随着 SWE-bench 从最初版本迭代到 SWE-bench Verified,再到 Multilingual 多语言版本,排行榜也在不断刷新。趋势很清晰:各模型的绝对解决率在稳步爬升,但距离“人类工程师水平”仍有明显鸿沟。这也恰好说明,衡量“AI 能否独立完成真实软件工程任务”这件事,本身就是一条通往 AGI 路上极具价值的试金石。

ΔR=RAgent A−RAgent B\Delta R = R_{\text{Agent A}} - R_{\text{Agent B}}
两个模型的解决率之差反映了它们在真实验证环境下的能力差距,差值越大说明实力悬殊越明显。
  1. 模型 A 的解决率模型 A 在相同评测环境中取得的任务解决率
    RAgent AR_{\text{Agent A}}
  2. 模型 B 的解决率模型 B 在完全相同的任务与环境下取得的解决率
    RAgent BR_{\text{Agent B}}
  3. 差值计算两者相减得到性能差距,正值表示 A 更强,负值表示 B 更强
    ΔR\Delta R

局限性——考试的盲区

任何考试都有盲区。SWE-bench 这套“新员工考核”虽然设计得相当严谨,但它绝不是万能的。就像一场笔试能测出知识储备,却测不出沟通能力和团队协作一样,SWE-bench 也有它力所不能及的地方。

第一,数据泄漏风险。SWE-bench 的真实 Issue 和真实 PR 都来自公开 GitHub 仓库,而这些数据很可能已经在模型预训练时被“读”过。这就好比考生在考前偷偷看到了原题,哪怕没有标准答案,也会产生“见过类似题”的熟悉感,让分数偏高。用公式表达就是:

第二,语言单一。SWE-bench 的核心基准几乎全部集中在大众熟知的 Python 项目上,对于前端、移动端、系统级开发等其他技术栈的覆盖面极为有限。第三,评测成本高。每个任务都要拉起 Docker 容器、安装依赖、跑完整测试,评测一次要耗费大量 GPU 算力和时间,这也是社区迭代 SWE-bench Verified 时反复权衡的因素。

认识到这些盲区,我们才能更理性地看待排行榜上的数字——考试分数高代表“在真实任务上表现好”,但绝不等于“所有软件开发场景都天下无敌”。

泄漏率=训练语料中出现的任务数SWE-bench任务总数\text{泄漏率} = \frac{\text{训练语料中出现的任务数}}{\text{SWE-bench任务总数}}
泄漏率衡量测试题库中有多大比例可能已被模型“剧透”,比例越高,分数的可信度越打折扣。
  1. 泄漏任务数模型训练语料中可能包含的评测任务数量
    训练语料中出现的任务数\text{训练语料中出现的任务数}
  2. 任务总数SWE-bench 基准中的全部任务
    SWE-bench任务总数\text{SWE-bench任务总数}
  3. 比例计算两者相除得到泄漏率,用于评估评测分数的可信度
    ⋅⋅\frac{\cdot}{\cdot}

改进方向——让考试更可信

认识到考试盲区之后,自然就要推动“考试制度改革”。SWE-bench 团队和开源社区做了大量改进,核心追求只有一个:让这份考核更公平、更有区分度、结果更可信。

最受关注的是 SWE-bench Verified。这个版本从原始基准中精选出 500 个任务,由人工逐一验证问题描述的清晰度和测试的有效性,把“题意模糊”或“测试不可靠”的劣质考题剔除掉,相当于聘请资深工程师对每一道考题进行二审。随后推出的 SWE-bench Multilingual 把覆盖范围扩展到 JavaScript、Java、Rust、Go 等更多语言,试图打破“只会 Python”的单一评价局限。此外,评测工具链本身也在标准化,比如统一的 Dockerfile 构建流程、公开的评分脚本,以及更完善的提交模板。这些改进可以用一个“覆盖度”指标来理解:

改进的方向背后,是评测理念的升级:从“考得严”到“考得真”,从“考得窄”到“考得广”。这场考试的最终目标,是让 AI 软件工程能力拥有一个被全行业认可的、可信赖的度量衡——就像现代社会的职业资格认证一样,一旦标准被广泛接受,整个行业的用人决策和技术迭代就有了坚固的地基。

覆盖度=已支持的语言数量目标支持的语言总数×100%\text{覆盖度} = \frac{\text{已支持的语言数量}}{\text{目标支持的语言总数}} \times 100\%
覆盖度反映了基准在技术栈广度上的完善程度,值越高,说明评测结果对外推广时的说服力越强。
  1. 已支持语言数SWE-bench 当前纳入扩展评测的语言种类
    已支持的语言数量\text{已支持的语言数量}
  2. 目标总语言数SWE-bench 计划覆盖的全部语言目标
    目标支持的语言总数\text{目标支持的语言总数}
  3. 百分比转换两者相除并乘以 100%,得到覆盖度百分比
    ×100%\times 100\%

AI 应用场景

场景一:代码助手产品迭代的“体检报告”

阶段:模型评测与迭代

解决的问题:代码助手类产品(比如自动补全、Bug 修复插件)迭代时,团队往往靠人工尝试几个示例来评估效果,既主观又无法规模化。借助 SWE-bench 的评测思路,可以自动对每次模型更新做一次“真实代码任务体检”,量化地知道这个版本比上个版本在真实 Bug 修复上进步了多少。

具体案例:某团队开发了一款基于大模型的安全漏洞自动修复插件。他们在每次发布新版本前,把内部私有代码库中沉淀的上百个历史 Issue 按 SWE-bench 方式构造任务集,自动跑一遍“失败转正”测试。某次迭代中,新模型的解决率从 61% 提升到 67%,但回归测试破坏率也上升了 0.8%,团队据此决定推迟发布、加强补丁验证。

场景二:自动化 Bug 修复机器人的验收标准

阶段:模型训练与交付验收

解决的问题:训练出一个“自动修 Bug”的 Agent 很容易,但怎样验收它到底行不行,很难用传统的人工 Code Review 回答。SWE-bench 提供了一套客观验收标准:让 Agent 在 Docker 隔离环境中提交补丁,再通过自动化测试判定质量。

具体案例:某大型 AI 公司训练跨项目 Bug 修复 Robot,直接把完整 SWE-bench 基准作为验收门禁。每一轮训练完成后,在固定的 GPU 集群上评估解决率和 Pass@1,解决率低于阈值则模型不允许上线。最终该 Robot 在 SWE-bench Verified 上达到 25% 解决率,才被允许进入真实工单系统试运行。

场景三:企业私有代码能力基线的建立

阶段:模型选型与技术预研

解决的问题:企业引进 AI 编程工具时,面对各家模型的宣传数据一头雾水。SWE-bench 的“真实任务 + 统一环境 + 自动判定”框架可以直接套用到企业私有代码库上,构建一套自定义的“企业版 SWE-bench”,用内部真实业务代码做选型评估。

具体案例:某银行科技部门希望选购代码辅助模型。他们从过去两年的内部工单中筛选出 200 个 Bug,构造了私有评测集,在统一容器环境里测试三个候选模型。结果发现,某开源模型在企业专属框架上的解决率比通用榜单高 12 个百分点,团队据此选择了更符合自身场景的模型,并沉淀为长期评测基线。

Python 演示

python52 行
"""简化版 SWE-bench 解决率模拟器根据 Agent 是否让"失败测试转正"且未破坏回归测试,计算解决率"""import re  class ResolvedRateEvaluator:    def __init__(self):        self._task_list = []     def add_task(self, issue, commit, test_file):        self._task_list.append({            "issue": issue,            "base_commit": commit,            "test_file": test_file,        })     def _run_failed_to_pass(self, task, patch):        # 从 issue 描述中提取目标文件名,模拟生成失败转正测试        target = re.search(r"[a-z_]+\.py", task["issue"])        return target is not None and target.group() in patch     def _run_regression(self, task, patch):        # 若补丁修改了测试文件本身,视为可能破坏回归测试        return "test_" in patch and task["test_file"] in patch     def evaluate(self, patch):        passed_count = 0        for task in self._task_list:            ok_f2p = self._run_failed_to_pass(task, patch)            ok_reg = not self._run_regression(task, patch)            if ok_f2p and ok_reg:                passed_count += 1        total = len(self._task_list)        rate = passed_count / total if total else 0.0        return passed_count, total, rate  if __name__ == "__main__":    bench = ResolvedRateEvaluator()    bench.add_task("修复 utils.py 中的空指针异常", "abc123", "test_utils.py")    bench.add_task("修复 api.py 中超时设置无效", "def456", "test_api.py")    bench.add_task("修复 db.py 中连接泄漏", "ghi789", "test_db.py")     patch_good = "--- a/utils.py\n+++ b/utils.py\n+def safe_call():\n+    pass"    passed, total, rate = bench.evaluate(patch_good)    print(f"补丁A -> 通过 {passed}/{total},解决率 {rate:.2%}")     patch_bad = "--- a/test_api.py\n+++ b/test_api.py\n- def test_timeout():\n-     assert False"    passed, total, rate = bench.evaluate(patch_bad)    print(f"补丁B -> 通过 {passed}/{total},解决率 {rate:.2%}")
目的:演示 SWE-bench 的核心评分逻辑——只有当补丁修复了 issue 描述中的目标文件、且没有破坏测试文件时,任务才被计为成功。
  1. self._task_list = []初始化任务列表,用于存放所有模拟的 SWE-bench 任务
  2. re.search(r"[a-z_]+\.py", task["issue"])从 issue 描述中提取要修改的文件名,模拟 Agent 定位 Bug
  3. target is not None and target.group() in patch判断补丁是否覆盖了目标文件,对应“失败转正”条件的简化为
  4. ok_f2p and ok_reg两个条件同时满足时,任务才算解决,与 SWE-bench 评分逻辑一致
  5. passed_count / total if total else 0.0计算解决率,注意避免除零错误

常见误区

误区“Agent 生成了补丁,代码语法也正确,issue 里提到的问题都改了,那这个任务肯定算解决了吧?”

正解SWE-bench 根本不关心代码“看起来”对不对,它只认自动化测试的客观结果。判卷的唯一标准是:失败转正测试是否通过、回归测试是否被破坏。就像入职考核不看你自我感觉多好,而是看你交的代码能否通过 CI 流水线。

为何常见:人们习惯用肉眼判断代码输出质量,但真实软件工程的可靠性恰恰建立在自动化验证之上。

误区“如果 RAG 模型在 SWE-bench 上做到 60% 解决率,应该比很多初级工程师还厉害了吧?”

正解SWE-bench 只是从大量真实任务中抽样出来的一个基准,它覆盖的 Python 语言、可测试的 Bug 类型、以及纯代码修复的形态都远不能代表真实的软件工程。真实工作还要包括需求沟通、代码评审、架构设计、运维部署等,这些 SWE-bench 都无法衡量。

为何常见:人们习惯用一个数字代替复杂判断,忽略基准的覆盖边界,犯了“以偏概全”的典型错误。

误区“用 Docker 不就是图个测试方便、自动化跑批处理吗?普通人手动装环境也行吧。”

正解Docker 的真正价值是“环境即代码、即证据”。它把 Python 版本、依赖、基准 Commit、测试框架全部声明成可复现的配置,确保任何人在任何时候重跑评测,结果都一致。这直接决定了 SWE-bench 分数的可信度和可比性。

为何常见:习惯了本地开发环境的人,容易把 Docker 理解成简单的沙箱工具,忽略了它作为“复现性基础设施”的核心意义。

误区“PASS@1 就是解决率吧,都是算模型能修好多少 Bug。”

正解解决率是对每个任务给一次“修改机会”后统计的通过比例;PASS@1 则强调“流程上允许模型多次尝试,但只取第一次尝试结果”的正确率。在实际评测中,PASS@1 通常对模型更苛刻,因为它禁止了“先跑一遍发现问题,再调整补丁”的后验优势。

为何常见:两个指标在数值上有时接近,名字又都带“通过”或“解决”的字眼,初学时分不清很正常,但它们在论文图表中代表两种完全不同的评测协议。

面试题

Q1. SWE-bench 任务判定的核心标准是?

单选题 · easy

  • A.失败测试转正通过← 正确答案
  • B.代码编译无错即可
  • C.人工阅读补丁确认
  • D.模型自信度足够高

答案:A。SWE-bench 用自动化测试判卷,核心是“失败转正”——原本失败的测试必须通过。编译无错、人工阅读、模型自信度都不能客观验证修复效果,这与真实 CI 流水线的判定逻辑一致。

Q2. SWE-bench 的题目主要来自哪个平台?

单选题 · easy

  • A.GitHub 真实仓库← 正确答案
  • B.Kaggle 数据集
  • C.StackOverflow 问答
  • D.LeetCode 算法题库

答案:A。SWE-bench 从 Django、SymPy 等 12 个流行 Python 开源库的真实仓库中提取 Issue 和修复 PR。Kaggle、StackOverflow、LeetCode 都不是完整的代码工程评测来源。

Q3. SWE-bench 任务中“基准 Commit”的作用是?

单选题 · mid

  • A.指定修复后的版本代码
  • B.锁定修复前的代码基线← 正确答案
  • C.记录 Agent 运行日志
  • D.保存测试用例的集合

答案:B。基准 Commit 把代码库回滚到 Bug 未修复时的状态,是 Agent 开始工作的起点,也保证所有考生面对同一份“现状代码”。修复后的版本是 Agent 应该产出的结果,不是输入。

Q4. SWE-bench 为保证评测公平性采取了哪些措施?

多选题 · mid

  • A.使用 Docker 容器统一环境← 正确答案
  • B.固定基准版本代码← 正确答案
  • C.自动运行测试判定结果← 正确答案
  • D.随机抽选模型的输出答案

答案:ABC。Docker 隔离环境、固定 BaseCommit、自动跑测试这三者共同保证了“同一台电脑、同一份试卷、同一套判卷规则”。随机抽选答案会破坏评测严肃性,不可能用于公平评测。

Q5. 某 Agent 在 SWE-bench 上解决率为 20%,这说明?

单选题 · mid

  • A.模型成功修复了 20% 的任务← 正确答案
  • B.模型通过了 20% 的测试用例
  • C.模型代码覆盖率达到 20%
  • D.模型输出格式正确率为 20%

答案:A。解决率的分子是“被判定为解决的任务数”,一个任务必须完整通过失败转正且无回归才计为解决。通常涉及多个测试用例,不能简单等同为“通过 20% 测试用例”。

Q6. SWE-bench 的已知局限包括哪些?

多选题 · hard

  • A.评测数据集中于 Python← 正确答案
  • B.存在训练数据泄漏风险← 正确答案
  • C.评测计算成本比较高← 正确答案
  • D.可以覆盖全部编程语言

答案:ABC。SWE-bench 核心基准几乎全为 Python 项目,存在公开数据被预训练语料吸收的泄漏风险,且每个任务都要拉 Docker 跑测试、耗费大量算力。它无法覆盖全部语言,D 恰恰与事实相反。

Q7. SWE-bench Verified 相比原始版本的改进是?

单选题 · easy

  • A.加入人工验证去除噪声← 正确答案
  • B.改用 Java 语言重写
  • C.完全取消 Docker 环境
  • D.只保留前端相关任务

答案:A。SWE-bench Verified 从原始题库中精选 500 个任务,由人工逐一验证问题描述和测试质量,剔除模糊或不可靠的题目。它没有换语言、更没去掉隔离环境,也并非只保留前端任务。

Q8. 构建一个 SWE-bench 任务时,需要配对哪些信息?

多选题 · mid

  • A.问题描述 Issue← 正确答案
  • B.修复前的基准版本← 正确答案
  • C.真人工程师 Patch← 正确答案
  • D.配套的失败测试用例← 正确答案

答案:ABCD。任务元组由 Issue 描述、基准 Commit、真人 Patch 和测试用例四要素构成。Issue 给出题干,基准锁定起点,真人 Patch 说明“此题可解”,测试给出判分标准,缺一不可。

Q9. PASS@1 指标的含义是?

单选题 · hard

  • A.模型第一次尝试即成功的比例← 正确答案
  • B.模型运行一次的推理耗时
  • C.模型生成的代码行数水平
  • D.测试用例一次执行的数量

答案:A。PASS@1 强调“只允许试一次”的严格协议,衡量模型在单次尝试中就完成任务的比例。它排除多次采样的运气成分,比允许重试的指标更能反映模型真实实力。

Q10. 模型 A 解决率 18%、模型 B 解决率 22%,最合理的结论是?

单选题 · extreme

  • A.模型 B 肯定显著优于 A
  • B.模型 B 略优但需显著性检验← 正确答案
  • C.两个模型表现完全相同
  • D.模型 B 的代码质量不如 A

答案:B。4 个百分点的差异在排行榜上看起来明显,但必须考虑评测方差、任务抽样和随机种子等因素。结论只能说 B“略优”,但要断言显著超越,需要做显著性检验或扩大任务样本,不能只看单一数字。