none、reuse 或 fresh,并在任务 Environment 关闭前提取后续评测所需的产物。
三种模式
collect_artifacts() 在三种模式下都会于任务 Environment 存活期间调用。它的职责是提取提交物,不是决定分数。
设置默认值和逐任务覆盖
如果所有样本都使用同一种模式,请在 Benchmark 类上设置默认值:TaskSpec 上分别设置:
ExecutionPlan 时的选择顺序。随后启用的 Recipe 可以按自身契约调整计划;如果 Recipe 会修改评测 Environment,必须在实现和测试中明确哪些字段可以覆盖、哪些字段必须保留。排查实际生效的模式时,应查看 run_info.json 的 resolved_execution_plans,其中记录了 Recipe 调整后的计划。
none:进程内评分
none 适合只依赖 TaskSpec、PreparedTask 和 RunResult 的评测器。不要在这种模式下读取任务工作区:
reuse:检查当前任务 Environment
reuse 在任务 Environment 关闭前执行评测,因此验证器能看到 agent 最终留下的工作区:
evaluation_network_policy;不要假定执行阶段仍保留原有的网络权限。
完整的 reuse 生产实现可参考 terminalbench2.py。
fresh:先提取,再隔离验证
fresh 不会自动把任务工作区复制到评测 Environment。先在 collect_artifacts() 中把提交物转成可跨 Environment 传递的 RunResult.artifacts:
evaluate()。评测器负责将捕获的产物写入新 Environment,再运行官方验证器:
fresh + collect_artifacts() 实现可参考 deepswe.py。
选择模式时检查
- 评分只依赖答案或内存对象时选
none,不要为简单评分额外创建 sandbox。 - 验证器必须看到 agent 修改后的原始文件系统时选
reuse,并确保验证器不会污染后续需要保留的结果。 - 验证器不应信任 agent 留下的依赖或进程时选
fresh,并明确传输的最小提交物。 prepare_task()、collect_artifacts()中执行的命令以及验证器命令都要设置明确的超时,并保证重试时可以安全重复。- 评测失败与正常零分必须使用不同状态,具体映射见结果与聚合。
