如果只给你一个能运行的程序,不给你一行源码,你能把它完整重写出来吗?这个问题听起来像刁难,但Epoch AI和METR联合推出的MirrorCode基准,就是拿它来考AI智能体的。
MirrorCode的设定很直接:AI要端到端地重新实现一整个程序,而且拿不到原始源码。它只能以"只执行"的方式访问原程序,传入任意参数、观察输出,相当于面对一个黑盒预言机。除此之外,它还能看到描述程序的文档和示例测试输入。
![]()
换句话说,AI要自己琢磨出整个程序的结构,而不是把代码一块块翻译过去。文档、示例和原程序的行为,共同构成了一份精确的规格说明,剩下的事全交给AI去满足。
25个目标程序,横跨多个领域
MirrorCode一共选了25个目标程序,覆盖计算领域的多个方向:Unix工具、数据序列化与查询工具、生物信息学、解释器、静态分析、密码学和压缩。
评测用的排行榜配置叫MirrorCode(ML, +Private, 2L),取的是Medium和Large两个档位的15个目标程序,每个程序用两种实现语言来写——通常是Go和Ada——合计30个任务。每个任务跑3次,单次预算为100亿token和7天时间。
评分靠的是端到端测试,这些测试来自原程序的测试套件、真实世界数据以及大模型辅助生成。每个目标程序有几百到几千个测试用例。要过关,AI的方案必须在标准输出和标准错误流上,产出和参考程序完全一致的输出。
防作弊是设计的第一原则
如果所有测试都公开,AI完全可以建一张查找表,而不是真的去解题。MirrorCode的对策是留出一部分隐藏测试,整个基准平均有34%的测试被保留不公开。只有100%测试通过,才算解决了一个任务。
针对几类典型作弊,基准从设计之初就做了封堵:
- 想包装或调用原程序?评分时AI的代码会被复制到独立沙箱,那里没有参考二进制文件。
- 想用查找表代替通用代码?隐藏测试会让硬编码方案失败,永远不算成功重写。
- 想干扰评分机制?评分环节与开发用的沙箱分离,只比对日志输出与原程序输出的字符串是否相等。
团队还做了一次红队测试,明确指示智能体绕过正常评测机制、靠作弊拿高分。在当前的脚手架下,没有任何智能体成功作弊。
简单脚手架,不给联网
所有评测都基于Inspect库的ReAct智能体搭建的简单脚手架。它允许使用shell,并开放text_editor工具用于读写文件。除了text_editor和submit工具,模型还能用一个evaluate_testcases工具,对自己的代码跑一遍可见测试的评分,但不会结束会话。轨迹超出最大上下文时,用压缩机制让它继续跑下去。
所有评测都在Docker容器里沙箱化运行,智能体没有联网权限,因此无法去查原程序源码,也无法使用第三方依赖。
记忆化能解释成绩吗?
由于MirrorCode重写的都是开源程序,AI模型很可能在预训练中见过原始代码库。但一个值得注意的现象是:AI成功重写了几个通过了记忆化筛查的目标程序,却在筛查显示存在记忆化证据的程序上失败了。这说明成绩并非由记忆化主导,但团队也表示,无法排除记忆化对AI表现有所贡献的可能性。
Epoch AI把脚手架和25个目标程序中的22个开源发布,合计132个任务实例,覆盖六种受支持的编程语言,另外3个目标保留为私有测试集。
回到开头那个问题:不给源码只给黑盒,AI能不能重写整个程序?MirrorCode给出的不是一个是或否的答案,而是一套可复现的测量方式——它把"长周期编程能力"这件事,拆成了可以被打分、也可以被质疑的具体任务。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.