Skip to main content
先把数据集记录转换为稳定的 TaskSpec,再明确哪些字段可以交给 Harness、哪些状态只能用于评测。

区分四种数据载体

Harness 可以读取整个 PreparedTask,包括其中的 ground_truthmetadata。不要未经筛选就复制 TaskSpec.metadata 仅供评测使用的数据应留在 TaskSpec.ground_truth 或类型化 BenchmarkPlan 中,并把 PreparedTask.ground_truth 设为 None。这些对象仍处于 runtime 和结果审计范围内,因此不能保存凭证或其他禁止持久化的秘密材料。 只有可以随结果公开的参考答案,才能写入 RunResult.ground_truth

定义公开配置

Benchmark 参数应使用 RuntimeBenchmarkConfigconfig_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 中导入模块:
在仓库根目录检查组件发现和参数结构:
框架运行所必需的依赖应加入默认项目依赖。只有某个 Benchmark 使用的 Python 驱动,应加入单独的可选依赖组并声明 DependencySpec。任务或验证器需要的 runtime 依赖,则应固定在对应的 Environment 中。注册成功只说明模块可以导入,不代表数据、凭证、验证器或真实运行已经验证通过。