AgentWorkflow 是 rollout 行为的 SDK contract。您需要继承它、实现一个 async run() 方法,并通过返回 message history,或通过 Osmosis 支持的 agent integration 调用当前策略并注册 sample source,来创建一个 sample。
Workflow 应该回答一个问题:给定这个数据集 prompt,agent 在 grader 打分之前应该做什么?
基类
run() 会为每次 workflow execution 调用一次。在方法内部构造任何 per-execution agent 或 session objects 并运行 agent。然后直接返回 sample,或让 integration 把生成的 conversation 注册到活跃的 RolloutContext。
Workflow 返回值
run() 接受三种形状,都会被规范化为单个 sample:
受支持的 integrations 会为您注册 sample source,因此大多数 workflow 返回
None:OsmosisStrandsAgent 注册其 Strands history,OsmosisMemorySession 注册 OpenAI Agents SDK session。当您自己构建 message history 时返回 AgentWorkflowOutput:
AgentWorkflowOutput.info 是保留字段,目前不会传给 grader。有限数值的 sample measurements 请放在 metrics 中,文件请写入 ctx.artifacts_dir。
AgentWorkflowContext
ctx object 为 workflow 提供输入和 config:
如果您的数据集行包含
system_prompt、user_prompt 和 ground_truth,prompt 字段会被组装进 ctx.prompt。参考答案不会传给 workflow;它会作为 ctx.label 暴露给 grader。AgentWorkflowContext 和 GraderContext 上的 metadata 对象相同,因此 workflow 和 grader 可以读取同一份按行的上下文。
写入 artifacts
使用ctx.artifacts_dir 写入不适合放进 sample payload 的文件 —— 日志、trace、截图或其他大文件/二进制输出。每次 rollout 都有独立目录,但当执行环境无法提供时为 None,因此写入前请用 if ctx.artifacts_dir: 进行判断 —— 未加判断的写入会抛出异常并导致 workflow 失败。
ctx.artifacts_dir 下写入的目录结构。Artifact 收集永远不会影响 rewards 或 rollout 状态。
保存的 Trajectory
使用create_rollout_server() 创建的 rollout server 会把已完成的 samples 作为 ATIF(Agent Trajectory Interchange Format)文档保存在 run artifacts 旁。Persistence 采用 best-effort 策略,永远不会改变 reward 或 rollout 状态。在自定义 harness 中直接调用 LocalBackend.run_workflow() 或其他 backend 方法不会安装这个 server lifecycle;该 harness 必须自行保存所需 trajectory。
文件位于平台管理的主机路径下:
RolloutSample.messages 会保留 grader 读取的 framework-native history。对于 ATIF persistence,内置 integrations 会在 trajectory_messages 中创建一份独立的 best-effort normalized copy;normalization 失败时 native sample 保持不变,并跳过 trajectory persistence。显式 workflow output 在可复制时会将返回的 messages 用于两个 views。
只有 source messages 或 server report 提供 usage、model 和 timestamp 数据时,ATIF 才会包含这些字段。缺失的 metadata 会保持缺失;SDK 不会虚构它们。
模型路由要求
请使用以下受支持 integrations 之一:
不要在
run() 中用硬编码 policy model 直接调用 litellm、OpenAI SDK 或其他 provider SDK。直接调用会绕过 rollout context,无法用于训练。
Strands 模式
对于 Strands,直接把ctx.prompt 作为 messages 传入,并调用 invoke_async():
run() 内构造 OsmosisStrandsAgent 会将其绑定到活跃的 rollout context,并把 agent 注册为 sample source。
工具 examples、迁移步骤和 OsmosisRolloutModel 细节请参见 Strands 集成。
OpenAI Agents 模式
对于 OpenAI Agents,请构造OsmosisAgent,附加 OpenAI Agents ModelSettings,创建一个 OsmosisMemorySession,并把该 session 传给 Runner.run():
run() 内创建它,使其注册到当前 RolloutContext。
Session 行为、tracing 说明和迁移步骤请参见 OpenAI Agents 集成。
自定义配置
自定义 configs 继承AgentWorkflowConfig。请在 rollout entrypoint 中定义 module-level config instance,并把它传给 backend:
LocalBackend(workflow=SearchWorkflow, workflow_config=search_workflow_config)。Eval 和 training TOML 文件目前不会直接设置 workflow config fields。
BaseConfig 允许额外字段,因此简单 rollout configs 通常不需要额外的 Pydantic 样板代码。
使用工具的 Workflows
工具使用属于 agent framework,而不是 backend。请按您的 framework 期望的方式定义 tools,把它们传给 Osmosis-wrapped agent,并让 integration 记录生成的 messages。 例如,Strands workflow 可以把 tool list 放在 config 中:Entry Point 连接
Workflow classes 和 config objects 需要显式 wiring。请在 backend constructor 中选择它们,并通过 rollout server 暴露该 backend:AgentWorkflow subclasses;只有通过 workflow 传入的 class 会运行。Submit preflight 会导入 entrypoint 一次以暴露 import-time errors,并且不会检查 module namespace;关于该导入在何种情况下被跳过、以及它在本地执行了什么,参见 Rollout 中的文件。
下一步
Strands 集成
使用 tools 和
OsmosisStrandsAgent 构建基于 Strands 的 rollout。OpenAI Agents 集成
使用
OsmosisAgent 和 OsmosisMemorySession 构建 OpenAI Agents SDK rollout。Grader
为 workflow 生成的 sample 定义 reward 逻辑。
评估
在训练前提交 evaluation run 测试 workflow 和 grader。