系统概览
CLI 与 Python SDK 最终进入同一个编排 runtime。run 包装一个 RunRequest;launch 将一组有序具名请求解析为一个 Orchestration。注册表解析请求的组件,规划器为每个任务创建 ExecutionPlan,共享调度器协调请求优先级、任务并发数、Environment、Benchmark、Harness、评测、结果和分析生命周期。
图中展示常见的由 Harness 驱动的路径。HarnessFreeBenchmark 可以自己负责推理循环,但仍必须保留相同的任务、Environment、结果、评测和持久化契约。
runtime 结构
runtime 围绕一组精简的类型化对象构建;它们是模块之间的稳定边界。
修改这些契约中的任何一个都是 runtime 变更,不是局部组件变更。应审计全部生产方和消费方、更新公开导出,并在已有结果产物依赖时保留序列化兼容性。
组件职责
使用职责判断代码应放在哪里。例如,数据集元数据中的任务镜像属于 Benchmark 契约;将该镜像映射到 Daytona 快照或 Modal 命名镜像属于 Recipe;创建和关闭 sandbox 属于 Environment provider。
执行生命周期
runtime 为每个选中任务创建计划,因为镜像、资源、工作区和验证器要求可能逐任务不同。 清理必须位于finally 路径。准备、Harness 启动、model 执行、产物收集或验证失败时,都不能泄漏容器、云端 sandbox、代理、客户端或后台进程。
规划与优先级
执行前先标准化配置。Recipe 随后适配每个任务计划的副本,而不修改原始请求。每层适配都必须保留用户显式意图。 provider 选择字段遵循:setdefault(),不能无条件赋值。
这是一项有意的权衡:自动 Recipe 让官方任务镜像易于使用,而用户优先原则保留自定义预构建镜像和 provider 原生快照。显式值不兼容时,给出可操作错误;不要静默替换为“碰巧能运行”的配置。
设计原则
依赖契约,而非具体实现
组件通过 runtime 契约和公开注册表通信。共享类型从agentcompass.runtime 导入,不要进入另一组件的私有模块,使 Harness 可复用于不同 Benchmark,Environment provider 可复用于不同 Harness。
分离策略与机制
Benchmark 定义评测策略,Environment 提供执行机制,runtime 负责排序。Benchmark 可以要求隔离验证,但应通过评测计划表达,而不是直接创建 Docker 容器。保留用户显式意图
默认值与 Recipe 可以补齐缺失值,不能覆盖兼容的显式选择。任何便利逻辑如果改变用户提供的镜像、资源限制、工作区、网络策略、model 参数或超时,都是正确性缺陷。保持规划纯净,限定副作用
任务加载、计划构造和 Recipe 应用应保持确定性。网络调用、软件包安装、sandbox 创建和文件修改属于明确生命周期阶段,使错误、限制和清理可见。在 Environment 边界强制安全
提示词和 agent 指令不是安全控制。网络隔离、资源限制、文件系统边界和密钥处理必须由 provider 或 runtime 强制。准备、agent 执行和验证策略分离,因为可信准备与不可信执行需要不同权限。让可复现性可观察
记录版本、修订版本、解析后计划、model 与 Harness 设置、评测器行为、失败和任务覆盖范围。设置和分母未对齐时,接近的得分不是对齐证据。提前失败,并保留失败语义
昂贵操作前验证不支持的版本、协议、provider、策略和任务 ID。保留 Environment 错误、Harness 错误、model 错误、agent 超时、评测器错误和有效零分的区别;下游分析依赖这些区分。保持专用依赖可选
默认安装只包含框架必需和广泛共享软件包。Benchmark/Harness 专属驱动依赖属于可选依赖和可信依赖工作流;任务 runtime 依赖属于任务镜像或受控准备阶段。限制并发与外部压力
任务并发数、provider 打开速率限制、model 端点容量和资源配额是独立约束。provider 异步调用应保持非阻塞;在责任层应用有界并发;每个任务会话避免全局可变状态。变更影响图
修改前使用下表识别最小代码与验证范围。
Benchmark 需要可复用 runtime 或 provider 能力时,应拆分工作:先合入基础变更,再把 Benchmark 集成变基到其上,使平台行为可以独立审查,而不是隐藏在 Benchmark PR 中。
公开接口与兼容性
稳定的面向开发者的接口包括:- Python SDK 入口点和受支持外部 Recipe 类型使用
agentcompass。 - 共享契约与内置组件实现使用
agentcompass.runtime。 - 使用稳定 ID 发现组件的注册表。
- 公开组件参数的配置数据类。
- 供下游工具使用的已持久化详情、进度、运行信息 和摘要产物。
