SWE-bench Science: Can Coding Agents Resolve Engineering Tasks in Science? —— 精读
论文链接:https://arxiv.org/abs/2608.19799
代码仓库:https://github.com/OpenMOSS/SWE-bench-Science
数据集:https://huggingface.co/datasets/OpenMOSS-Team/SWE-bench-Science
排行榜:https://swescience.github.io
发表时间:2026 年 8 月(HF Daily Papers 2026-08-21 批次,57 票)
发表机构:上海创新研究院、复旦大学(OpenMOSS 团队)
一、论文背景:当科学软件成为科学仪器的一部分
1.1 科学软件的特殊地位
这篇论文的出发点建立在一个容易被工程视角忽视的事实上:科学软件早已不是科学研究的辅助工具,而是科学仪器本身的一部分。望远镜有镜片,对撞机有探测器,而今天的计算化学家有 RDKit,材料学家有 pymatgen。当一篇论文声称"模拟显示该催化剂活化能降低 0.3 eV"时,结论的可信度还取决于背后几万行科学代码的正确性。如果代码里藏着一个符号错误或单位换算失误,被污染的就不只是程序行为,而是科学结论的证据基础。
正是本文标题那个问句的分量所在。如果 coding agent 能可靠修复科学软件缺陷,它补上的就是科学发现链条中一个此前完全依赖人类研究生苦力的环节;反之,我们就需要搞清楚失败发生在哪里、为什么。
1.2 SWE-bench 系谱与它留下的空白
自 SWE-bench(2023)开创"真实仓库 + 真实 issue + 测试驱动评估"的范式以来,这个家族不断在规模和模态上加码:Verified 人工校验、Multilingual 扩展语言、Multimodal 加入 UI 截图。但作者指出它有两个系统性盲区:
第一,领域盲区。 现有基准的任务几乎全部来自通用软件场景——Web 框架、数据库、CLI 工具。科学软件这个庞大且高价值的类别基本缺席,而它的问题分布与通用软件差异巨大:数值稳定性、物理单位、边界条件、跨模块的科研管线契约——这些问题需要的不仅是代码能力,还有"这段代码在数学/物理/化学上应该做什么"的领域理解。
第二,评估盲区。 现有评测高度聚合:报一个总分,最多分个 Fail-to-Pass 和 Pass-to-Pass。当 agent 失败时,你只知道它没通过测试,但不知道它是不懂科学、探索方向错了、修了一半,还是修好了观测案例但泛化失败。这些失败的补救路径完全不同,聚合分数把诊断信息全压扁成一个数字。
1.3 为什么科学领域特别难
科学软件的困难不是"通用软件 + 更多知识点"的简单叠加,作者识别出三类结构性挑战:
- 缺陷的隐蔽性:科学代码的 bug 往往不抛异常、不崩溃,而是安静地输出一个偏差 5% 的数值——程序层面"看起来能跑",科学层面已经错了。
- 验证的滞后性:数值算法错误可能要等下游实验复现失败才被发现,缺陷与症状之间隔着漫长的传播链。
- 修复的双重正确性:修复必须同时在代码层面通过测试、在科学层面保持与领域原理(守恒律、对称性、量纲一致性)一致。只满足前者的"修复"就是最危险的伪修复。
二、论文定位:在科学代码评测版图中的坐标
评测"AI 做科学计算"并非无人尝试,但既有工作各有侧重。论文的对比表重排如下:
| 基准 | 规模 | 任务粒度 | 核心侧重 |
|---|---|---|---|
| SciCode | 80 题 | 函数级 | 从头实现科学计算函数 |
| ResearchCodeBench | 212 | 代码级 | 科研代码生成 |
| ScienceAgentBench | 102 | 任务级 | 数据处理类科研 agent 任务 |
| SUPER | 801 | 任务级 | 自动化科研工作流 |
| AstaBench | 2400+ | 任务级 | AI 科学家系统性评测 |
| AInsteinBench | 244 任务 / 6 域 | 任务级 | 科学家行为评测 |
| SWE-bench Science | 119 任务 / 98 仓库 / 20 域 | 仓库级 | 科学软件工程:真实缺陷修复 |
三个关键差异:
粒度差异:SciCode 这类函数级基准给 agent 一个函数签名和文档让它补全实现——测"算法编写能力"。SWE-bench Science 给的是平均 80,600 行代码的完整仓库快照(最大超过 200 万行),agent 要自己定位、理解、修复。前者像考试题,后者像入职第一周。
能力维度差异:ScienceAgentBench 和 SUPER 关注管线编排,AstaBench 关注"AI 科学家"的端到端行为。SWE-bench Science 独特聚焦在维护上——科学软件在长期演化中积累缺陷,修复缺陷是科研基础设施运转的日常。
诊断深度差异:这是本文最深的差异化。其他基准回答"agent 得了多少分",SWE-bench Science 试图回答"agent 为什么错",把失败机制归因和科学知识贡献度测量作为一等公民(第四节详述)。
三、问题定义:什么是"科学软件工程"
3.1 概念界定
论文给出的定义值得转述:科学软件工程是在科学有效性约束下维护软件系统的实践。重心不在"写科学软件",而在"维护科学有效性"。什么叫科学有效性?一段代码在数学上实现了正确的公式、在物理上尊重守恒律、在数值上保持算法的稳定域、在工程上维持模块间的行为契约。这揭示了科学软件的本质属性:正确性标准是双层的,程序正确性只是必要条件,科学正确性才是充分条件。
3.2 三种范式对应三种能力
基于这个定义,作者把科学软件工程实践拆解为三种任务范式,这是全文最核心的分类学贡献:范式一:Issue-driven(52 个任务,43.7%)——已知缺陷的修复。仓库中存在报告明确的 issue,agent 需定位根因并修复,考察诊断式修复能力:从症状回溯根因。
范式二:Expert-exploratory(49 个任务,41.2%)——未知根因的自主探索。没有现成 issue,只有一个模糊的科学异常现象(如"模拟结果与文献不符"),agent 需自主探索、发现并修复缺陷,考察探索式诊断能力。
范式三:Engineering-integration(18 个任务,15.1%)——跨模块能力链。任务要求打通多个模块间的工程链路(数据流、状态管理、模块间契约),考察系统级集成能力:局部正确不等于整体正确。三个范式不是难度递进,而是能力维度上的正交分解。后面的实验会证明,不同 agent 在三个范式上的表现剖面差异极大——这正是聚合分数会完全掩盖的信息。
3.3 为什么聚合分数不够
作者用一个尖锐的观察论证了诊断式评测的必要性:假设 agent A 在 Issue-driven 上 90 分、Engineering-integration 上 10 分;agent B 两项都是 50 分。聚合分数相同,但改进方向截然不同。更关键的是,失败的类型比失败的数量更重要:一个"科学知识错误"意味着模型需要领域语料,一个"表面修复"意味着评估协议可能被欺骗。只给总分的评测让这两类失败在数字上不可区分,也就失去了指导改进的价值。
四、解法:证据链协议下的基准构造
4.1 任务 schema:信息不对称是评估的基石
SWE-bench Science 的每个任务由两组信息构成,核心设计是严格的信息不对称。Agent 可见:仓库快照(缺陷版本的完整代码)、冻结的问题陈述(从 issue/异常报告抽象而来)、必需科学上下文 creq(修复所必需的科学背景)、公开测试用例。仅评估者可见:私有测试用例(真正的评分标准)、契约标签(模块间行为契约)、参考补丁、科学原理与定位支持块(缺陷科学根源及代码位置的证据链)、污染等级标注。
其中最关键的执行细节:私有测试仅在 agent 提交修复之后,才在独立容器中挂载运行。agent 对私有测试的存在形态、覆盖范围一无所知,也无从探测——你没法过拟合一个看不见的评分标准。
4.2 四阶段构建:证据链协议
119 个任务不是爬取-过滤的产物,而是经一条严格的四阶段证据链协议逐个打磨的:
阶段一:源采样与筛选。 从 GitHub 按科学领域系统性采样候选仓库与缺陷,人工审核科学相关性与可复现性。98 个仓库最终入选,覆盖 20 个科学领域——化学(24 个任务)、材料科学(16)、生物学(13)、生物医学工程(12)、物理(11)为前五。任务规模差异极大:输入代码从 174 行到 2,029,051 行,平均 80,600 行;参考补丁平均 +117.81/-44.53 行,是实打实的工程改动。
阶段二:快照冻结与复现。 对每个候选缺陷,在隔离容器中冻结仓库快照并复现异常现象,确证缺陷存在于核心算法逻辑而非环境配置、依赖漂移或随机噪声。只有"稳定复现、根因在代码"的候选才进入下一阶段,这一步过滤掉了大量"看起来像 bug 其实是环境问题"的候选。
阶段三:公开材料抽象与信息隔离。 把原始 issue 讨论、专家分析抽象成标准化问题陈述,同时执行信息隔离——agent 侧材料不泄露根因位置和修复方案:只描述现象,不描述病灶。
阶段四:隐藏预言机与反校准。 这是协议的精华,单独展开。
4.3 隐藏预言机与反校准:如何防伪修复
什么是伪修复?设想一个科学计算 bug:某数值库在特定参数区间输出错误结果。agent 可以写一个 if 分支硬编码"当输入等于测试用例时输出正确答案",或做一个只治症状的后处理校正,都能通过公开测试。这类修复在程序行为层面通过验证,在科学层面是彻底造假。反校准协议针对三类伪修复设防:
第一层:语义等价测试。 私有测试不只检查"输出数值是否等于期望值",还检查修复在数学结构上是否与参考实现语义等价——比如检查中间量、检查守恒量是否保持。硬编码解在私有测试的参数扰动下立刻现形,因为私有测试覆盖了公开测试未见的参数区间。
第二层:边界条件覆盖。 私有测试专门包含公开测试边界的邻域。科学缺陷常在边界条件处暴露(参数极端值、退化情形、输入顺序变化),只在"典型情形"下正确的修复会在此现形。
第三层:反向检查。 评估者持有人工核验的"伪修复模式清单",对 agent 补丁反向审查:是否硬编码解?是否有启发式伪修复(magic number、经验校正项)?是否不完整修复?命中者直接标记为无效,即便它骗过了部分测试。
这套设计把评估从"通过/不通过"的二元判断升级为带证据链的行为审计:agent 的每个失败都能沿评估者侧材料的链条归因到具体环节。
4.4 三种范式的差异化构造
三个范式在阶段三、四上的处理各有专门的反过拟合设计:
Issue-driven 的构造链:退化隔离(把缺陷从复杂环境剥离)→ 现象收窄(把宽泛的 issue 描述收敛为可验证的具体现象)→ 反过拟合验证:在数据规模、边界参数、输入顺序上系统性变化,确认修复必须处理这些变化,而非记住特定输入。
Expert-exploratory 的构造链:科学情景设计(构造真实的科研异常场景)→ 探索点提取(确定 agent 需自主发现的关键信息)→ 现象-根因分离(该范式的核心:公开材料只给现象,缺陷位置和根因完全隐藏,agent 必须自己完成从现象到根因的推理跳跃)→ 机制泛化验证:在参数尺度、物理拓扑、坐标顺序上变化,确保修复来自对科学机制的理解,而非对特定案例的拟合。
Engineering-integration 的构造链:管线分析选缺口(分析真实科研管线的模块依赖,找出能力链断点)→ 保留完整真实包结构(不做玩具化简化)→ 端到端契约验证:以替代路径执行、状态重置、模块间行为契约三类检查验证集成修复的完整性——局部测试全绿但契约破坏的修复会被识别。
4.5 91 个任务的信息分离设计
基准构造中还有一个为后续分析埋下的伏笔:119 个任务中有 91 个,其辅助科学信息(科学原理讲解、上游修复参考、审计发现、相关论文摘录、专家指导)可以与工程上下文干净地分离,因此可做严格的 paired ablation:同一任务、同一 agent,分别在"有科学信息/无科学信息"两个条件下运行,差值就是科学知识对该任务的净贡献。这是第五节那组双向结论的实验基础。
五、评估证据:八个 agent 配置的全面体检
5.1 主结果:没有一个 agent 过半
评测了 8 个主流 agent 配置(前沿模型 × 主流 scaffolds)。指标:Public(公开测试通过率)、Private(提交后挂载的私有测试通过率)、Fail2Pass(从失败到通过的比例)与综合指标 Pass@1。主结果(表 2)如下:
| Agent 配置 | Public | Private | Fail2Pass | Pass@1 |
|---|---|---|---|---|
| GPT-5.6-sol + Codex | 99.16 | 78.82 | 72.30 | 46.22 |
| Claude-Opus-5 + Claude Code | — | — | — | 47.90 |
| DeepSeek-V4-Pro + Claude Code | — | — | — | 42.02 |
| Kimi-K3 | — | — | — | 35.29 |
| GLM-5.2 | — | — | — | 31.93 |
| Nex N2 | — | — | — | 24.37 |
| DeepSeek-V4-flash | — | — | — | 23.53 |
| Qwen3.5-397B | — | — | — | 14.29 |
几个值得咀嚼的观察:
全部 Pass@1 不足 50%。 即便配备完整 agentic 工具链的前沿模型,在科学软件修复上也无法过半。这与通用 SWE-bench Verified 上头部 agent 已冲到 70%+ 的图景形成刺眼对比——科学领域不是通用能力的小幅折扣,而是一堵墙。
GPT-5.6-sol 的"高分陷阱"。 它在 Public/Private/Fail2Pass 三项过程指标全部第一,但综合 Pass@1 反而低于 Claude-Opus-5。这个剪刀差就是对"表面修复"的量化——它更擅长让测试通过(包括部分骗过测试),但端到端真正修复的能力被最终指标揭示。
三范式剖面差异巨大。 Claude-Opus-5 以 Pass@1 47.90% 居首,分范式成绩为 Issue-driven 38.46 / Expert-exploratory 65.31 / Engineering-integration 27.78——探索式任务反而远强于有明确 issue 的任务,这个反直觉剖面是聚合分数无法给出的。而 DeepSeek-V4-Pro 总分第三(42.02%),但 Engineering-integration 得分 44.44 为全场最高。总分第三的模型拥有单项第一的能力,这就是剖面信息的管理价值:做材料计算管线维护时,正确的选择可能不是总分最高的模型。
5.2 Token 经济学
除了准确率,论文还分析了 token 消耗与性能的关系:Claude-Opus-5 以适中的 token 预算拿到最高 Pass@1,性价比领先;GPT-5.6-sol 的输出 token 明显更短却达到相近水平,推理紧凑高效;DeepSeek-V4-Pro 输入 token 消耗全场最多但只排第三,暗示其在巨型仓库上下文中检索效率偏低;400B 参数以下模型中 Nex-N2 的平衡最佳。这组数据对 API 成本敏感的选型场景有直接参考价值。
5.3 失败机制归因:四类失败画像
表 3 的错误归因分析是本文诊断价值的集中体现,全部失败被归入四类机制:
- 科学知识/抽象缺陷:修复基于错误的科学对象或数学定义——agent 理解了代码结构,但搞错了代码背后"应该做什么"。
- 误导探索/表面修复:探索被表面现象带偏,治了症状不追根因,把"让观测异常消失"当成修复目标。
- 修复覆盖不全/系统集成失败:局部修复正确,但数据流、共享不变量、兼容性没保住——“按下葫芦浮起瓢”。
- 科学知识泛化失败:修复能处理观测案例,但不能扩展到未见条件(不同参数尺度、物理拓扑)。
归因结果同样呈现显著的模型间差异:Claude-Opus-5 的可归类错误最少(58 项归类 + 4 项运行时);DeepSeek-V4-Pro 的知识/抽象错误最少(15 项)且集成错误最少(19 项)——与其 Engineering-integration 单项第一互相印证。四类失败 × 八个模型,构成一张"能力体检报告"。
5.4 科学信息消融:一组双向的意外结果
利用 4.5 节的 91 任务 paired ablation 设计,论文做了一个直击灵魂的实验:给 agent 额外提供辅助科学信息,性能会怎么变?对照组是 GPT-5.6-sol(xhigh)与 DeepSeek-V4-flash(high)两个档位的模型。
结果出现了方向相反的两个结论:
GPT-5.6-sol:科学信息微升过程指标,但 Pass@1 反降。 Public 从 96.70 → 97.80,Private 从 73.23 → 74.06,均微升;但 Pass@1 从 36.26 降到 31.87,token 从 3.86M 降到 3.70M。
DeepSeek-V4-flash:三项指标全升,但 token 大涨。 Public 从 98.90 → 100,Private 从 61.21 → 62.53,Pass@1 从 16.48 大幅升到 23.08;代价是 token 从 4.84M 涨到 7.40M(+53%)。
如何解读?论文的结论是:科学知识对 agent 的价值不是均匀的,而是条件性的——
- 当辅助信息组织良好、且直接接地约束修复方向时,它能补上弱模型自己补不上的知识缺口,提升修复质量与效率——DeepSeek-V4-flash 的全指标上升就是证据。
- 当信息与任务错位时,强模型反而被诱发锚定效应:GPT-5.6-sol 本有能力自主探索出正确根因,额外的科学信息把它锚定到某个方向上,压缩了探索空间(token 减少 4% 也侧面印证:它探索得更少、收敛得更快,但收敛到了错误方向),精确修复率反而下降。
“知识非均匀有益”——这个结论对 RAG 工程师、agent 设计者和训练数据配比决策者都有警示意义:往上下文里堆领域知识不是免费的午餐,知识的组织形式与模型自主能力的匹配度决定了它是助力还是锚。
六、根源解释:为什么最强的 agent 也过不了 50%
6.1 科学抽象:领域知识与代码推理的交集能力
综合全部证据,论文对"全员 <50%“的核心解释是:科学软件修复需要领域知识 × 代码推理的交集能力,而这个交集目前没有任何模型真正具备。
通用 SWE-bench 上的高分证明了模型的代码推理能力:读代码、追调用链、理解控制流,这些是纯工程技能。但科学软件修复要求在推理的每一步都叠加科学约束:这个循环在迭代的是物理量,这个截断近似的稳定域在哪里,这个数据结构的字段遵循什么坐标系约定。通用代码模型的训练语料中,科学概念的密度不足以支撑这种叠加。失败类型中的第一类(科学知识/抽象缺陷)和第四类(泛化失败)直接对应这个交集缺失——模型可以在纯代码空间里走到正确的位置,却在科学语义上判断错误。
6.2 三类工程性失败的机制根源
第二、三类失败的根源在评测设计与 agent 能力的错配:
误导探索/表面修复的根源是独立预言机的缺失。人类专家修复科学软件时,脑中有一个独立于代码的"物理直觉预言机”——结果应满足守恒、量纲、对称性,这些先验让人能判断"这个修复在科学上对不对"。Agent 没有这个独立预言机,唯一反馈信号是测试结果,于是"让测试变绿"理性地取代了"让科学正确"成为优化目标。Claude-Opus-5 在 Expert-exploratory 上的高分说明顶尖模型的探索策略已相当成熟,但只要预言机问题不解决,探索能力越强,“高效地走向错误方向"的风险反而越大。
修复覆盖不全/集成失败的根源是局部验证与全局契约的鸿沟。Agent 的修复-验证循环天然是局部的:改一块、跑一遍测试。但科学软件的完整性约束是全局的——跨模块的数据流不变量、状态重置语义、兼容承诺。agent 没有工具"看见"这些全局契约(契约标签只在评估者手里),局部理性叠加全局失败几乎必然。DeepSeek-V4-Pro 在此项上的相对优势暗示其训练语料中工程密集型代码的比重可能更高。
6.3 锚定效应:解释 GPT-5.6-sol 的 Pass@1 下降
5.4 节中 GPT-5.6-sol 的 Pass@1 下降(36.26 → 31.87)值得单独给出机制解释,因为它揭示了强模型的一个反直觉弱点:弱模型缺知识,强模型缺的可能是"忽略知识的自由”。对于推理能力已经很强的模型,额外上下文的主要作用不是"补充知识"而是"改变先验"。当辅助科学信息被注入后,模型的探索策略从"广撒网式的自主验证"切换为"围绕给定信息的定向确认"——token 消耗下降 4% 正是这个行为转变的痕迹。问题在于,如果给定信息与任务的真实根因错位(比如信息描述的是缺陷的一个侧面而非核心机制),定向确认就成了定向偏航:模型以更高的置信度、更少的探索,走完一条错误路径。这也提示一个实用策略:给强模型提供辅助信息时,应以"参考假说"而非"事实约束"的措辞呈现,保留其推翻信息的空间。
七、知识反推:从这篇论文我们能学到什么
把视角从"评测科学 agent"拉远到"构建可信的 AI 评估体系",这篇论文沉淀了几条可迁移的方法论:
反推一:评估的信息架构决定评估的效度。 SWE-bench Science 把信息严格划分为 agent 侧与评估者侧,且执行层面做到私有测试的物理隔离(独立容器、提交后挂载)。很多评测失效不是因为题目不好,而是信息边界漏了——agent 以某种方式"看到"了评分标准,评估就从测量能力退化为测量拟合。先画信息边界图,再写题目。
反推二:每个任务都应该自带证据链。 每个任务都携带科学原理、定位支持块、契约标签——评估者判定失败时不是对照黑箱测试结果,而是沿证据链定位失败环节。任务构造的成本前置换来评估输出的诊断价值。评测集不是题库,是带标准答案推理过程的案例库。
反推三:反校准应成为基准的标准工序。 任何"通过测试即算成功"的基准都天然暴露在伪修复攻击之下。三层反校准成本不低,但它是保证"分数 = 能力"这一评测基本契约的唯一手段,而 agent 越来越擅长优化可见指标。
反推四:消融设计要在数据构造阶段预埋。 91 个任务的科学信息可分离设计是任务构造时规划好的,而非事后补救。想测量"某类信息对模型的净贡献",paired ablation 的前提是信息可剥离——这个约束必须在数据采集阶段就进入 schema。
八、通用灵感:超越科学领域的启示
最后把启示压缩为四条对更广泛场景成立的判断:
灵感一:评测要诊断,不要只打分。 只输出总分的基准,信息量在首次报分后就衰减殆尽;能输出"四类失败画像 + 三范式剖面"的基准,每次运行都在产出改进方向。诊断粒度就是评测的保鲜期,三范式 × 四失败机制的归因矩阵可被任何垂直领域基准套用。
灵感二:信息增益是条件性的。 给模型加上下文不是单调提升——强模型可能因锚定而受损,弱模型可能因 token 爆炸而得不偿失。任何"外挂知识提升 agent"的方案都需要回答:对哪个能力的模型、以什么组织形式、付出多少推理预算,净收益才为正。paired ablation 是回答这类问题的范式级工具。
灵感三:任务设计的"三范式"结构可迁移。 Issue-driven / Expert-exploratory / Engineering-integration 实质是按"信息给定方式"(症状已知 / 现象已知根因未知 / 全局契约已知局部未知)对任务空间的正交分解。金融风控、法律合规、医疗信息系统——任何有"领域正确性双层标准"的垂直领域,都可以照这个骨架构造自己的诊断式基准。
灵感四:防御性评估是评测设计的新常态。 当被测对象本身是强大的优化器时,评测设计就成了对抗博弈。隐藏预言机、提交后挂载、反向检查伪修复——这些手段的思想内核是"让评分标准在博弈论意义上不可被优化",对任何 AI 评估都适用:评分标准只要能被描述出来,就能被过拟合;所以要么让标准不可见,要么让标准不可穷尽。
结语
SWE-bench Science 用 119 个精雕细琢的任务、一套带证据链的构造协议和一次信息不对称的消融实验,把"coding agent 能否修科学软件"从口号变成诊断报告。答案目前是否定的——最强模型 Pass@1 不到 48%,且失败被精确定位为科学抽象、探索误导、集成断裂、泛化不足四类可分别攻克的机制问题。
对科学社区而言,这个基准把"科学软件的可信性"从隐性依赖变成可测量的工程目标;对 agent 社区而言,它是一面照出"代码能力与科学理解间鸿沟"的镜子;而对所有构建 AI 评测的人而言,它示范了一件事:好的基准不是记分牌,是听诊器。