
你有没有想过如果一个天文望远镜的数据处理程序算错了一个坐标转换公式会发生什么不是程序崩溃不是报错弹窗而是安安静静地跑出一个错误的数字。这个数字可能被写进论文可能支撑起一个错误的科学结论甚至可能没有人发现问题,直到很多年后有人试图重复这个实验,却怎么也对不上账。这就是科学软件的可怕之处。它不像手机App,崩了大不了重启;它一旦错了,错的可能是人类对世界的认知。现在,越来越多的科研团队开始尝试让AI编程助手,也就是所谓的coding agent去修复这类科学代码里的问题。听起来挺美好:机器人程序员24小时待命,帮科学家们改bug、补功能、修接口。但这里有个扎心的问题,来自复旦大学和上海创新研究院的一群研究者:**这些AI程序员,真的懂科学吗还是它们只是在装懂**为了搞清楚这件事,他们做了一件挺硬核的事情:造了一个专门用来考验AI程序员科学素养的测试题库,叫做SWE-bench Science。这不是一次简单的打分游戏,而是一次对AI到底理解了什么的深度审讯。先说说,这场考试到底有多难在这之前,业界已经有不少用来考AI编程能力的题库了。比较有名的是SWE-bench,它的做法是从GitHub上真实的开源项目里,挑出一些真实的bug报告,让AI去尝试修复,然后跑测试看能不能通过。这个思路本身没问题,但放到科学软件的场景里,就会暴露一个大漏洞:很多科学计算的bug,表面上看是代码问题,骨子里其实是物理/化学/生物原理的问题。举个例子。假设你在处理晶体结构的两种不同表示方式,比如用不同的坐标系去描述同一块晶体,理论上算出来的能量应该是完全一样的。如果AI只是盯着代码语法层面修修补补,却不懂能量守恒这个物理约束,那它很可能改出一个表面上能跑、但物理上是错的答案。之前的科学编程测试题库,大多聚焦在两类场景。一类是让AI独立实现一段科学计算函数,比较像抄论文里的公式写代码,偏向单点编程能力测试;另一类是让AI在整个科研工作流里跑一遍,比如帮你把一篇论文的代码复现出来。但这两类都没有真正切中科学软件工程这个更棘手的中间地带:代码库巨大、逻辑盘根错节、bug隐藏在物理假设的裂缝里。这就是SWE-bench Science要填的空。它从98个真实的GitHub科学计算仓库里,精挑细选出119个任务,横跨20个科学领域,从化学、材料科学、生物学、生物医学工程,到天文学、大气科学、力学、电气工程,几乎把常见的理工科门类都覆盖了。 **仓库级基准测试repository-level benchmark**指测试对象不是孤立的一段代码,而是一整个真实项目仓库,AI需要在完整的工程上下文里定位问题、修改多个文件、并保证系统整体能正常运行。这119个任务里,化学占了24个,是最大的门类;材料科学和工程紧随其后16个;生物学13个,生物医学工程12个,物理学11个。这个分布不是随便凑的,反映的是当下科学计算最活跃、代码最复杂的几个战场。更让人有代入感的是任务的规模。研究者统计发现,这些任务背后的代码库,平均有8万多行非空代码,最大的一个项目居然有200多万行。而修复一个bug需要改动的代码量,平均新增117.81行、删除44.53行,最夸张的一个任务改动量超过1000行。这意味着什么?意味着AI程序员不能像做算术题一样埋头苦算,它得先在一个可能有几十万行代码的迷宫里找到出问题的那个角落,再小心翼翼地动手术,还不能伤到周围健康的组织。如果你觉得这个场景有点熟悉,不妨想想医生做手术。一个经验丰富的外科医生不会一上来就切,他得先看CT片,搞清楚病灶的位置和周围血管神经的分布,再决定下刀的路线。如果不做这个前置的读片工作,直接凭感觉切,哪怕手速再快,也可能一刀切断了不该切的东西。AI程序员面对几十万行代码的科学仓库,干的其实就是这个读片的活,只是它读的不是CT,是代码和物理原理交织在一起的说明书。三种考题,三种不同的病这个基准测试没有一股脑把所有任务混在一起,而是精心设计了三种任务范式,分别对应AI程序员可能暴露出的三种不同的能力短板。第一种叫**问题驱动型任务Issue-driven**占了52个,约43.7%。 **问题驱动型任务**这类任务直接取材于真实历史上发生过的bug,比如某个开源项目的issue和PR讨论。研究者把代码回滚到问题发生之前的状态,构造出一个最小可复现的例子,再把具体的解决方案信息藏起来,只留下现象,让AI自己去找病根、开药方。这类任务考验的是最基础的能力:能不能在给定一个明确观察到的异常现象的情况下,精准定位并修复问题,同时不引入新的副作用。第二种叫**专家探索型任务Expert-exploratory**49个,占41.2%。这类任务更狠。它不是从一个已知的历史bug出发,而是从一个开放的科学场景出发,比如分子表示一致性校准、测量链偏差分析、医学图像坐标对齐这类真实存在但没有明确标准答案指向的科研难题。研究者会构造一个能跑起来的公开工作流,里面藏着一个观察到的异常,比如收敛异常或者结果有偏差,但不会告诉你具体是哪行代码出的问题。这就要求AI具备真正的科学侦探能力:通过观察、对比实验、推理去反推出问题的根源,而不是照着说明书对答案。第三种叫**工程集成型任务Engineering-integration**18个,占15.1%,数量最少但难度可能最高。这类任务不关心单点bug,而是关心这个系统的各个模块能不能真正串起来。研究者会分析整个仓库端到端的调用链,比如数据加载、参数解析、中间表示构建、算子组装、数值求解这一整条流水线,然后故意留一个功能缺口,考验AI能不能跨越多个文件、理解整体架构,把断掉的链条重新接上。这三种任务合在一起,构成了一个立体的能力画像:第一种测的是手稳不稳,第二种测的是脑子转得快不快,第三种测的是眼界够不够宽。单独测任何一种,都只能看到AI的一个侧面。而只有三种加在一起,才能看清一个AI程序员是不是真正靠谱的全科医生,而不是只会照本宣科的单科专精生。出题人的良苦用心:防止AI抄近路光有好的任务分类还不够,更关键的是怎么防止AI作弊或者蒙混过关。想象一下,如果考试的评判标准只是跑出来的结果和标准答案数字上凑巧对上了,那AI完全可以走捷径,比如硬编码一个特定的返回值,或者用一些统计学上的伎俩,让公开的测试用例正好通过,但实际上完全没理解问题的本质。为了防止这种表面正确、内核空洞的情况,研究者设计了一套四阶段的构建流程,还专门配了一个隐藏的裁判系统。具体来说,每个任务都会经过源采样筛选、快照冻结复现、公开材料抽象隔离、隐藏验证器构建这四步。 **快照冻结Snapshot Freezing**指研究者会把代码仓库精确地定格在问题发生前的那个历史时刻,剥离掉Git历史记录、未来的更新日志、以及任何可能泄露答案的痕迹,确保AI看到的就是问题最初发生时的真实状态,不多不少。最巧妙的设计在于评测环节的内外有别。AI能看到的东西,只有仓库快照、冻结的问题描述、必要的科学背景知识,还有一小部分公开测试用例用来做交互式调试。而真正用来判定成败的,是隐藏在评测容器里的私有测试集,这部分AI完全看不到,只有交完作业才会被拿出来批改。这个设计像什么?像期末考试里的平时作业可以查资料,但期末闭卷。公开测试用例相当于平时的小测验,允许你摸索、调试、试错;私有测试集才是真正一锤定音的期末大考,而且这份卷子出得极其刁钻,专门设置了边界条件检验、反向硬编码检测、启发式伪修复识别这些机制,就是为了揪出那些看起来对了但其实没懂的取巧行为。如果不设这道防火墙,会发生什么?很可能AI会学会一种投机取巧的策略:不去真正理解物理原理,而是专门针对公开测试用例做优化,就像学生提前搞到了老师出的模拟题,考试时死记硬背蒙对了答案,但换一套题立刻原形毕露。研究者论文里举的例子很直观:一个任务如果私有测试集里有10个科学场景,AI的修复方案可能公开测试全部通过,但私有测试只答对7个,这时候的Pass1得分就是0,因为这道题要求的是全对才算过关。 **Pass1**一种二元判定指标,只有当某次尝试通过了所有适用的私有测试用例时,才记为1分,否则记为0分。这是一个近乎严苛的一次性通关标准,不接受及格万岁。考试成绩出来了:最好的AI也没及格好了,题出好了,规则定好了,现在轮到真正的主角登场:8款主流的AI编程助手,包括Claude-Opus-5、GPT-5.6-sol、DeepSeek-V4-Pro、Kimi-K3、GLM-5.2等等,它们各自配上不同的编程框架(比如Codex、Claude Code)一起上考场。结果是什么?**表现最好的Claude-Opus-5,搭配Claude Code框架,拿到的Pass1成绩是47.90%,不到一半。**这个数字,如果放在普通的软件工程测试题库里,可能已经算不错的成绩了。但请记住,这里的评判标准是私有测试全部通过才算数,而且很多任务本质上考验的是对科学原理的深层理解,而不只是代码语法。更耐人寻味的是,这些AI在表面成绩上都表现得相当漂亮。同样是这款最强的Claude-Opus-5,它的公开测试通过率(Public score)高达96.64%,几乎接近满分。这意味着什么?意味着AI在能看到的那部分考题上几乎无所不能,几乎都能把公开的验证脚本跑通,营造出一种我懂了的假象。但一旦进入私有测试的深水区,真正考验对科学本质有没有吃透的时候,合格率立刻从96.64%跳水到47.90%,差了近50个百分点。这个反差就像一个学生,平时的课堂小测验几乎全对,老师布置的作业也交得漂漂亮亮,可一到期末真正的大考,面对没见过的题型,成绩立刻腰斩。这不是学生不努力,而是他学的可能只是套路,而不是原理。一旦题目稍微换了个说法,套路失效了,底子薄弱的地方就藏不住了。排在Claude-Opus-5后面的,分别是GPT-5.6-sol(46.22%)、DeepSeek-V4-Pro(42.02%)、Kimi-K3(35.29%)、GLM-5.2(31.93%)。而排名最后的Qwen3.5-397B,只拿到了14.29%,几乎每7个任务只能做对1个。细看这些模型的表现,还能发现更有意思的分工。DeepSeek-V4-Pro虽然总分不是最高,但在公开测试score上拿到了满分100%,而且在工程集成型任务上表现最好,达到44.44%,说明它擅长处理那种需要跨模块理解架构的复杂场景。GPT-5.6-sol则在私有测试得分、以及两个更细分的指标上拿到最高分,说明它修bug比较稳,既能把之前失败的测试改成功,也很少把之前本来通过的测试改坏。而Claude-Opus-5的强项在于问题驱动型和专家探索型任务上都拿了第一,说明它在找茬和侦探推理这两种能力上比较均衡。有意思的是,研究者还画了一张图,把每个模型的Pass1得分和它们消耗的token数量放在一起看。结果发现,烧钱多不一定就考得好。Claude-Opus-5用中等的token预算就拿到了最高分,而GPT-5.6-sol用了差不多的输入token,但输出的内容明显更短,却能拿到接近的高分。反过来DeepSeek-V4-Pro花了更多的输入token,排名却落在这两者后面。至于Kimi-K3和GLM-5.2,消耗的输入token相对较少,但对应的分数也偏低。这说明真正拉开差距的,不是模型话有多密或者想得有多久,而是每一分token花得够不够聚焦,够不够用在真正有价值的推理上。这就好比两个学生答同一道大题,一个洋洋洒洒写满三页纸却东拉西扯,另一个只写了半页但每句话都精准打在得分点上。分数往往属于后者。病理报告:AI到底是怎么犯错的拿到成绩单只是第一步,更值钱的是搞清楚:这些AI到底是怎么错的?错在哪一步?研究者没有满足于简单地说它没通过测试,而是把所有失败的尝试都拿出来,做了一次细致的尸检,归纳出四种反复出现的失败模式。第一种叫**科学知识或抽象缺陷Knowledge/abstraction deficit**。 **科学知识或抽象缺陷**指AI给出的修复方案是建立在一个错误或者不完整的科学概念、数学定义、领域抽象之上的。简单说,就是它一开始对这个物理量、这个化学结构到底是什么就理解错了,后面再怎么改代码都是错上加错。第二种叫**误导性探索或表面修复Exploration/surface repair**。这种情况是AI针对表面能看到的症状打了个补丁,或者只是为了让公开的检测指标变绿而做了调整,但从没有真正深入去追溯这个失败背后独立存在的科学证据链或者根本契约。这就像发烧了只吃退烧药,却没去查到底是感染了什么细菌病毒。第三种是**修复覆盖不全或系统集成缺陷Repair coverage/system integration**。这种bug看似局部改对了,但整个系统里的其他齿轮没跟上。比方说改了一个模块的逻辑,却忘了这个模块和别的模块之间共享着某个不变的约束条件,结果这边补上了,那边又崩了。第四种是**科学知识泛化失败Scientific generalization**。AI针对眼前这一个观测到的具体案例改对了,但换一个边界条件、换一种等价的表达方式,它给出的方案立刻失效,说明它压根没有真正吃透背后那个普适的科学原理,只是死记硬背了一个特例。具体到每个模型身上,数据讲出了很有意思的故事。Claude-Opus-5的错误总数是所有模型里最少的,58个(还有额外4个属于运行时或评测流程本身的失败,和科学理解无关)。而且它在误导性探索或表面修复这一项上错得最少,只有2次,几乎是断层式的领先。这说明这款模型确实很少去糊弄公开测试,大部分尝试都是认认真真在追根究底,只是有时候追究的方向或者深度不够。DeepSeek-V4-flash则在科学知识泛化失败这一项上表现最好,只错了6次,说明它一旦理解了某个原理,推广到新场景的能力还不错。DeepSeek-V4-Pro在科学知识或抽象缺陷和修复覆盖不全这两项上都是错得最少的,分别是15次和19次,说明它对基础概念的把握以及系统性思维相对扎实。这份病理报告最大的价值在于,它把一个笼统的AI不够聪明这句抱怨,拆解成了四个具体的、可以对症下药的方向。就像医生看病不能只说你身体不好,得说清楚是哪个器官出了什么具体问题,才能开出对症的药。一个反常识的发现:多给科学知识,不一定更好论文里最让人意外的一部分,是关于给不给AI额外的科学背景信息这件事的实验。直觉上,你可能会觉得,给AI越多的科学背景资料,它应该改得越准才对。就像给学生多发一本参考书,总不会是坏事吧?研究者设计了一个巧妙的对照实验。在119个任务里,有91个任务允许把科学辅助信息单独拿出来做对比。 **科学辅助信息Scientific auxiliary information**指那些不能直接从代码本身或运行时行为里看出来的、和科学有效性相关的额外证据,比如科学原理说明、上游的修复记录、审计发现、论文摘录、专家的诊断建议。要注意的是,去掉这些信息不代表代码本身的线索(比如接口、代码结构、测试用例)也被拿掉了,这些工程性的证据始终保留。研究者选了两个模型来做这个对照:GPT-5.6-sol和DeepSeek-V4-flash,每个都跑了有科学信息和没有科学信息两个版本,其他条件完全一致。结果非常打脑洞。对GPT-5.6-sol来说,加了科学信息之后,公开分数和私有分数确实都小幅提升了,从96.70%涨到97.80%,私有分数从73.23%涨到74.06%。但是最关键的Pass1指标,反而从36.26%掉到了31.87%,下降了将近4.4个百分点。同时它消耗的token数量还变少了。而对DeepSeek-V4-flash来说,情况正好相反。加了科学信息之后,公开分数、私有分数、Pass1全部提升,Pass1从16.48%涨到23.08%,涨了将近7个百分点。但代价是token消耗大幅增加,输入token从484万涨到740万。研究者进一步拆解了任务级别的重叠情况,发现GPT-5.6-sol在有科学信息的情况下多解出了8个任务,但同时也丢掉了12个原本能解出的任务。这个此消彼长的现象特别值得琢磨。一种合理的解释是,科学信息有时候能提供代码本身给不出的语义约束,比如极限情况的处理、坐标系一致性、独立的观测量、权威接口该怎么用,这些东西能帮AI避开一些纯靠代码推理很难发现的坑。但另一方面,这些信息也可能诱导AI产生锚定效应,让它过度依赖给定的解释,而放弃了独立地用代码和执行结果去验证这个解释到底对不对,甚至把信息的适用范围理解错了,发生范围溢出。这就好比一个新手医生看病,如果给他一份详细的病历摘要,里面写着上次类似症状是XX病,他可能会因为这份摘要而快速定位,省去很多摸索时间;但如果这份摘要本身有偏差,或者这次的病情其实和上次不完全一样,这个新手医生反而可能因为过度信任摘要,而忽略了眼前病人身上那些真正独特的、需要重新诊断的症状。如果压根不给任何摘要,医生反而会更谨慎地从头做一次完整的检查,有时候这种从零开始反而更容易发现真正的问题。这个实验结果还揭示了一个更深层的规律:在这组对比里,基线表现较弱的DeepSeek-V4-flash从科学信息中获益更明显,而本身表现更强的GPT-5.6-sol反而受到了一定程度的干扰。这似乎在暗示,越弱的模型越依赖外部投喂的知识拐杖,而越强的模型可能已经具备了某种自主从代码证据里提炼原理的能力,外部信息给多了反而成了噪音。这个发现的价值不在于告诉我们该不该给AI喂资料,而在于提醒我们,科学知识这东西不是万能药,它的效果取决于怎么组织、怎么和可执行的证据结合在一起。喂得好是拐棍,喂得不好是干扰项。这场考试暴露的,不只是AI的问题读到这里,你可能已经发现,这篇论文真正想说的,不是某个AI模型排名第几,而是一个更根本的问题:科学软件工程,和普通的软件工程,到底是不是同一件事。普通软件工程的bug,大多数时候错了就是错了,逻辑不通就是不通,改对了测试就能通过。但科学软件的bug,往往裹着一层看起来合理的外衣。代码能跑,数字能输出,图能画出来,但这个数字背后代表的物理量,可能压根就是错的。这种错误极其隐蔽,因为它不会崩溃,不会报错,它只是安静地、自信地给出一个错误答案。这也是为什么研究者反复强调,公开测试通过率高达96.64%,和最终的严格判定通过率只有47.90%之间的巨大鸿沟,才是这篇论文最想让人看到的核心信息。这个鸿沟说明,当前的AI编程助手,已经具备了相当强的让代码跑起来的能力,但距离真正理解科学原理并可靠地推广这个更高的门槛,还有很长的路要走。论文作者也坦诚地承认了这项研究的局限。每个具体科学领域里的任务数量还是相对有限,这可能会削弱跨领域比较的可靠性。而关于科学知识到底如何被AI实际运用、又该如何组织才能真正促成任务成功这个问题,目前的探索还比较初步,还有大量值得深挖的空间。写在后面读完这篇论文,最让我久久不能平静的,反而是那个多给信息反而更差的实验结果。这打破了我原本一个很朴素的假设:以为AI就像学生,资料越全、背景越充分,答题就该越准。但事实证明,信息本身也有代价,它可能让模型产生一种我已经知道答案了的错觉,从而放弃了对代码本身的独立验证。这种锚定效应其实和人类专家犯错的模式惊人地相似,一个资历深的老医生,有时候反而比新手更容易被自己以往的经验带偏,因为他太快地把新病例套进了旧框架里。另一个让我反复咀嚼的细节是,公开测试96.64%和私有测试47.90%这两个数字放在一起看,活像是一场表演型学习的实锤证据。AI并没有说谎,它确实认真解决了能看到的那部分问题,可一旦换个考法,底子马上现了原形。这让我想起教育领域常说的应试能力和真实能力的分野,或许AI在学习科学代码这件事上,正在经历一场和人类学生一模一样的成长困境。那么问题来了,如果连科学软件的bug都能藏得这么深,那些藏在真实科研论文结论里、从未被发现的代码错误,又有多少呢QAQ1SWE-bench Science到底是什么A它是一个专门用来测试AI编程助手能不能修复真实科学软件bug的基准测试题库,包含119个任务,来自98个GitHub开源科学计算仓库,横跨20个科学领域,分为问题驱动型、专家探索型、工程集成型三种任务类型。Q2目前最好的AI编程助手在这个测试里表现如何A表现最好的是搭配Claude Code框架的Claude-Opus-5,拿到47.90%的Pass1成绩,不到及格线一半,但它的公开测试通过率高达96.64%,说明AI在表面能看到的测试上表现很好,但真正严格的私有测试通不过率还很高。Q3给AI提供额外的科学背景知识,一定能帮它改对bug吗A不一定。研究发现效果因模型而异,对GPT-5.6-sol来说,加科学信息反而让Pass1从36.26%降到31.87%,但对DeepSeek-V4-flash来说,加了信息后Pass1从16.48%提升到23.08%。这说明科学知识的价值取决于模型如何将其与代码证据结合验证,并非越多越好。