正在统计访客…
浏览全部文档
开始 · 9找到适合你的 Runifold 学习路径45 分钟掌握 Runifold理解完整的 Runifold 平台第一次可信运行选择正确的执行 API选择 Crate 与 Cargo Feature构建常见 Runifold 应用Runifold 常见问题排查 Runifold 应用故障
执行内核 · 7理解 RunContext安全协调外部副作用使用预算与取消限制工作安全地处理错误与重试事件、Journal 与执行证据设计 Capability 安全执行从 Checkpoint 安全恢复
模型与服务商 · 7在避免重复输出的前提下路由模型选择并配置模型服务商使用服务商中立的模型协议基于 Provider Runtime 契约构建使用 OpenAI 控制面与 Realtime API测试与 Benchmark Provider Adapter配置 OpenAI、Anthropic、Gemini 与 Ollama
Agent · 7构建并配置 Agent为 Agent 添加类型化工具加入会话与语义记忆安全地委派给子 Agent返回结构化 Rust 值在不丢失语义的前提下流式输出使用检索为 Agent 提供事实依据
持久工作流 · 7组合确定性工作流让工作流持久化运行持久工作流 Worker协调 Timer、Signal 与持久等待运行多租户工作流基础设施运行并行 Branch 与安全 Race对持久 Workflow 进行版本管理
集成 · 7通过 MCP 连接外部能力选择存储与持久化边界通过 MCP Tasks 暴露持久工作构建并评估检索流水线使用 MCP Resources、Prompts 与 Sampling在不跨越权限的前提下缓存 MCP 响应在 Rust Web Service 中部署 Runifold
质量与运维 · 10在没有网络的情况下测试评估质量并阻止回归观测完整运行树在浏览器与边缘环境安全运行准确理解可靠性声明在 CI 中运行可复现评测使用 SLO 运维 Runifold治理 Task 保留与删除把审计证据归档到 S3-Compatible WORM 存储管理兼容性与可信发布
文档/工作流
第一次使用?通过 45 分钟核心课程建立完整心智模型
工作流

组合确定性工作流

连接类型化步骤、并行分支与首次成功竞速,无需让模型控制每一次跳转。

实践指南·18 min

Agent 还是工作流

下一步确实需要模型判断时使用 Agent;转换规则可以确定表达时使用工作流。多数生产 系统会把两者组合起来:确定性编排包围有界的 Agent 步骤。

审批、补偿、并行展开与完成规则因此留在类型化代码中,而不是藏在 Prompt 里。

安装并运行最小 Workflow

Workflow 已包含在默认的 runtime Feature 中。先用一个不依赖模型的步骤理解编排, 再加入 Provider 和 Agent。

Cargo.toml
[dependencies]
anyhow = "1"
futures-executor = "0.3"
runifold = "=0.9.0"
serde_json = "1"
src/main.rs
use anyhow::Context;
use runifold::{
    Budget, BudgetTracker, CapabilitySet, RunContext, Workflow, WorkflowStep,
    WorkflowStepError, WorkflowStepFuture,
};
use serde_json::{Value, json};
 
struct NormalizeOrder;
 
impl WorkflowStep for NormalizeOrder {
    fn execute<'a>(
        &'a self,
        input: Value,
        _run: &'a RunContext,
    ) -> WorkflowStepFuture<'a> {
        Box::pin(async move {
            let order_id = input["order_id"]
                .as_str()
                .ok_or_else(|| WorkflowStepError::Execution("missing order_id".to_owned()))?;
            Ok(json!({ "order_id": order_id, "normalized": true }))
        })
    }
}
 
fn main() -> anyhow::Result<()> {
    let workflow = Workflow::builder("order-intake")
        .version(1)
        .step("normalize", NormalizeOrder, CapabilitySet::new())
        .build()
        .context("failed to build workflow")?;
    let run = RunContext::root(
        BudgetTracker::new(Budget::default()),
        CapabilitySet::new(),
    );
    let outcome = futures_executor::block_on(
        workflow.run(json!({ "order_id": "ord_42" }), &run),
    )?;
 
    println!("{}", outcome.output);
    Ok(())
}

运行 cargo run。一个步骤的输出会成为下一个步骤的输入;outcome.output 是最终规范结果,outcome.usage 是实际消耗的预算。构建失败表示图定义无效;运行失败 则表示步骤、Capability、预算、Deadline 或取消边界阻止了执行。

顺序步骤

工作流定义为每一步提供稳定 StepId、类型化输入输出和明确失败策略。只把下一步 需要的数据传过去。

好的步骤边界可以单独重试和观察,例如读取记录、分类、申请审批、执行 Effect、 保存结果。不要用一个巨大步骤混合所有职责。

并行分支

独立任务可以并行以降低延迟。启动前预留预算,并在 Worker 或租户边界限制并发。

明确选择汇合规则:要求全部成功、接受部分结果,或返回类型化的部分成功。一条慢分支 不能静默延长整体 Deadline。

首个成功竞速

冗余读取或可替换模型路由适合首个成功竞速:第一个有效结果获胜,其他分支被取消。

不要竞速非幂等写操作。取消无法撤回已经到达外部目标的副作用。

加入 Agent 步骤

先构建 Agent,再用 Arc 包装,并只授予该步骤真正需要的 Capability。planwrite 这样的稳定 Step ID 会成为持久身份;只要旧 Checkpoint 仍可能恢复,就不要 重命名它们。

let workflow = Workflow::builder("plan-and-write")
    .version(1)
    .agent("plan", planner, CapabilitySet::new())
    .agent("write", writer, CapabilitySet::new())
    .build()?;
 
let outcome = workflow.run("设计一个重试策略", &run).await?;
println!("{}", outcome.output);

确定性的 Rust 逻辑使用普通 .step(...);只有真正需要模型判断时才用 .agent(...)。校验、写入、审批和状态迁移应留在 Prompt 之外。

加入审查门控生成

当应用自有 Reviewer 必须在 Workflow Commit 前批准生成值时,使用 .repairable_agent(...)

let workflow = Workflow::builder("reviewed-answer")
    .repairable_agent(
        "draft",
        answer_agent,
        compliance_reviewer,
        WorkflowRemediationPolicy::new(2),
        generation_capabilities,
        reviewer_capabilities,
    )
    .build()?;

第一次生成接收普通 Workflow 输入。Repair Verdict 会先持久化被拒绝的 Candidate 与 结构化 Feedback,再进入下一次生成。Generation、Review、Approval 与 Repair 是独立的 Write-ahead 子阶段,因此恢复会从持久 Candidate 继续,不会再次生成。升级时必须先排空 0.7 Worker:0.8/0.9 写入的 Checkpoint Schema v5 无法被 0.7 Worker 读取。

选择执行模式

需求Builder 形式关键约束
每个阶段依赖前一步结果连续 step / agent每个输出都应可序列化
必须获得所有独立结果parallel为每个分支预留有限预算
第一个有效只读结果即可race只允许 Pure 或 ReadOnly Capability
进程退出后仍要继续持久 Store + Worker固定定义版本与稳定 ID
等待人工或定时恢复持久 Wait / Signal认证并去重 Signal

排查失败的 Workflow

  1. 在启动时构建 Workflow,遇到重复或无效 ID 立即失败。
  2. 记录 Workflow 名称、定义版本、Step ID、Run ID 与类型化错误种类。
  3. 先检查 outcome.usage 和 Run Journal,不要直接认定是 Provider 故障。
  4. 如果外部写入可能已经完成,先对账,不要盲目重跑。
  5. 对持久执行,确认已部署 Worker 仍注册了 Checkpoint 所指定的准确版本。

需要跨重启执行时继续阅读持久 Workflow,扇出与 Race 阅读并行执行,队列与租约运行阅读 Worker