AgentWorkflow 在哪里运行、request 如何变成可执行 task,以及 reward computation 在哪里发生。
osmosis eval submit 和 osmosis train submit 不接收 backend flag。Platform 启动 rollout server 时,由 rollout entrypoint 构造 backend。将开源 SDK 嵌入自托管 harness 时,也需要选择 backend。选择 Backend 路径
应把HarborBackend 看成两条不同路径。两种 Harbor mode 都会把每个 rollout 隔离在 Harbor trial 中,但 instruction 的归属不同。
Template mode 只在 input model 上类似
LocalBackend:一个 rollout definition 处理变化的 dataset prompts。它的 execution model 仍然是 Harbor,每个 request 都有独立 task 副本和 sandboxed trial。共享 Server Contract
所有 backends 都接收ExecutionRequest,并返回 ExecutionOutcome,其中包含该 rollout 单个 sample 的 workflow result 和可选 grader result。由 create_rollout_server() 创建的 server 负责接纳 rollout 请求、向 RolloutClient 等轮询调用方提供结果,并在 execution 后执行 best-effort ATIF persistence。直接调用 backend methods 不会安装这个 server lifecycle。
Server 关闭时会停止 admission,取消未能及时完成的 rollout,然后 await backend.shutdown()。默认的 ExecutionBackend.shutdown() 不执行任何操作,因此现有自定义 backend 无需修改。如果自定义 backend 持有持久资源(例如 sandbox 或 worker pool),请重写该方法。重写的实现应尝试释放每个资源,并将无法清理的资源输出到 stdout。
Server 会在结果响应的 agent_started_at 中报告每个 rollout 的 agent 启动时间。默认情况下,server 在 execute() 开始时记录该时间。如果自定义 backend 需要先执行准备工作(例如创建 sandbox),可以将类属性设置为 reports_agent_start = True。Agent 启动后,backend 对当前 RolloutContext 执行 await mark_agent_started(...),传入 UTC datetime。只有第一次调用会被记录。调用方如何使用该字段,请参阅 RolloutClient。
Backends 不会发现 workflow、grader 或 config objects。Entry point 会显式选择它们:
决策指南
1
从进程内执行开始
开发 workflow 和 grader 时使用
LocalBackend。它提供直接 exceptions、breakpoints 和最短 feedback loop。2
增加一个可复用 environment
当所有 rows 都应在同一个 task environment 中运行,但需要隔离 filesystem、process tree 或 dependency set 时,迁移到 Harbor template mode。
3
保留已编写的 Harbor tasks
当每个 task 已经拥有 instruction,且通常也拥有 verifier 时,使用 Harbor dataset mode。这是集成已经可以通过
harbor run 运行的本地 Harbor dataset 的最直接路径。Backend 指南
LocalBackend
配置进程内执行、grading、concurrency、artifacts 和 errors。
HarborBackend
配置 template 或 dataset mode、原生 agents、task verifiers 和 sandbox capacity。