LocalBackend 会在创建 backend 的 Python 进程中运行 AgentWorkflow 和可选 Grader。它是 rollout 开发的默认起点,也是标准 rollout scaffold 使用的 backend。
LocalBackend 是 execution strategy,不是只能在 laptop 上使用的 mode。同一个 entrypoint 可以在本机或 Platform-managed rollout infrastructure 上运行;两种情况下,workflow 都会共享 rollout server 的进程和 filesystem。安装
LocalBackend 属于基础 osmosis-ai package。通过 create_rollout_server() 暴露它时,请添加 server extra:
创建 Rollout Server
导入的 module 中可以存在多个 classes。这些 arguments 会显式选择 workflow、grader 和 configs。
执行生命周期
1
创建 workflow context
Backend 把 request prompt 和 metadata 传入
AgentWorkflowContext,并为该次 execution 深拷贝配置好的 workflow config。2
运行 workflow
Workflow 在当前进程的 active
RolloutContext 中运行。它的显式 return value 或已注册 sample source 会成为 rollout sample。3
适用时运行 grader
Workflow 成功后,如果
request.grade 为 True 且 request 有 label 或 metadata,配置好的 grader 就会运行。它通过 GraderContext 接收 sample、label、metadata 和 artifact directory。4
返回 result
ExecutionOutcome 将 workflow result 和可选 grader result 返回给 rollout server。Grading 仍在 rollout 的 critical path 上;其 latency 或 failure 会影响 completed result。进程与隔离模型
LocalBackend 特意不提供 sandbox boundary:
- Workflow 和 grader code 共享 server 的 Python interpreter、installed packages、environment variables、filesystem 和 event loop。
- Breakpoints、普通 logging、stack traces 和 print debugging 可以直接工作。
- Process crash、blocking call、global-state mutation 或 dependency conflict 可能影响该 server 中的其他 rollouts。
- 修改文件或 spawn processes 的 tools 不会在 executions 之间自动隔离,除非您的代码自行创建 isolation。
Concurrency 与 Timeouts
LocalBackend 使用 workflow_config.concurrency.max_concurrent 作为进程内 execution limit:
LocalBackend 通过异步 deadline 执行有限的 agent_timeout_sec 和 grader_timeout_sec。等待 execution slot 的时间会扣减 workflow 的时间预算;grading 使用独立预算。省略 timeout 即不限制对应阶段的时长。
Deadline 可以中断配合取消的异步代码。阻塞 event loop 的同步代码,或忽略 cancellation 的代码,无法在进程内被强制停止;如果控制权在 deadline 之后才返回,backend 会报告 timeout。需要严格进程边界时,请使用隔离的执行环境。
Grading 规则
Grader 会在每次 workflow execution 成功后创建,而不是在 requests 之间共享。只有同时满足以下条件时才会运行:- 已配置
grader。 - Workflow result 成功。
- Request 包含 label 或 metadata。
request.grade为True(默认值)。
remove_sample=True 丢弃该 sample。如果 grade=True,但未配置 grader 或既没有 label 也没有 metadata,即使 workflow 成功,整个 rollout 仍会失败。需要不 grading 的 rollout 时,请设置 grade=False;参见 RolloutClient。
Artifacts 与 Persistence
如果路径可写,backend 会给 workflow 和 grader 提供~/.osmosis/<rollout-id>/artifacts 下的 artifacts directory。创建该目录失败时会降级为 artifacts_dir=None,但不会单独导致 rollout 失败。
ATIF persistence 属于 create_rollout_server(),不属于 LocalBackend。直接调用 run_workflow() 或 execute() 的 harness 必须自行持久化所需 trajectory。
错误分类
LocalBackend 会把未捕获的 workflow 和 grader exceptions 转成结构化 results:
完整 traceback 由 rollout server process 记录;result 包含 exception message 和 category。
何时使用 LocalBackend
以下情况适合使用LocalBackend:
- 需要最短的开发与调试循环。
- 由一个 workflow 处理变化的 dataset prompts。
- 所有 dependencies 都由当前 Python environment 提供。
- 构建轻量自定义 evaluation 或 rollout harness。
下一步
AgentWorkflow
实现由 LocalBackend 执行的 agent behavior。
HarborBackend
增加 per-trial task environments,或复用已有 Harbor tasks。