TaskSpec,再明确哪些字段可以交给 Harness、哪些状态只能用于评测。
区分四种数据载体
Harness 可以读取整个
PreparedTask,包括其中的 ground_truth 和 metadata。不要未经筛选就复制 TaskSpec.metadata。
仅供评测使用的数据应留在 TaskSpec.ground_truth 或类型化 BenchmarkPlan 中,并把 PreparedTask.ground_truth 设为 None。这些对象仍处于 runtime 和结果审计范围内,因此不能保存凭证或其他禁止持久化的秘密材料。
只有可以随结果公开的参考答案,才能写入 RunResult.ground_truth。
定义公开配置
Benchmark 参数应使用RuntimeBenchmarkConfig 和 config_field(),并在 __post_init__() 中尽早规范化类型:
加载确定性任务
load_tasks() 应固定上游版本并生成稳定的 task_id。下面的 metadata 只包含可以进入日志和执行输入的复现信息;答案单独放在 ground_truth 中:
select_tasks() 已提供 runtime 的通用任务选择逻辑。只有当前 Benchmark 的规则不同于普通 ID 过滤时,才需要覆盖该方法;无论采用哪种规则,都要保证返回顺序确定。
为每次尝试建立类型化计划
如果评测状态需要结合配置和任务计算,请定义BenchmarkPlan 子类,并在 build_plan() 中为当前尝试解析一次:
build_plan() 不应打开 Environment、调用 Model 或修改 RunRequest。初始 ExecutionPlan 建立后,Recipe 会按照自身契约调整计划,因此 Benchmark 文档不能假定 runtime 统一保证某种 Recipe 字段优先级。需要映射 provider 时,请在对应的 Recipe 集成中说明并测试字段保留规则。
准备执行输入
prepare_task() 可以在任务 Environment 中创建工作区或上传公开材料,但返回值只能包含执行阶段可见的内容:
EnvironmentSession,不要绕过 Environment 直接调用 provider SDK。重试时可能再次调用该方法,因此准备过程必须能够安全重复;否则,应在执行前明确清理自己创建的工作区。
注册与依赖
使用@BENCHMARKS.register() 注册实现,并在 src/agentcompass/benchmarks/__init__.py 中导入模块:
DependencySpec。任务或验证器需要的 runtime 依赖,则应固定在对应的 Environment 中。注册成功只说明模块可以导入,不代表数据、凭证、验证器或真实运行已经验证通过。