正在统计访客…
浏览全部文档
开始 · 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 分钟核心课程建立完整心智模型
可信执行

安全协调外部副作用

在执行前记录意图,重放已完成结果,并在写操作可能已发生时失败关闭。

实践指南·10 min

为什么副作用需要边界

模型调用、Tool 或 Worker 可能在外部系统已经接受写操作后、调用方收到成功前失败。 此时“重试”可能意味着“扣款两次”“发送两次”或“删除下一个资源”。

Runifold 把它称为 Ambiguous Effect,不会用普通临时错误掩盖这种不确定性。

需要恢复结果的外部写操作都应使用 Effect 边界,例如支付、通知、资源开通、审批与 破坏性操作。纯计算不需要。

写前生命周期

EffectExecutor 通过持久状态协调一个逻辑操作:

状态含义安全的下一步
Prepared意图已持久化,Handler 尚未开始执行
StartedHandler 可能已经到达目标应用恢复策略
Completed规范化输出已持久化重放输出,不再 I/O
Failed明确的 Handler 错误已持久化返回相同失败
use std::sync::Arc;
use runifold::{
    EffectExecutor, EffectRecoveryPolicy, InMemoryEffectStore,
};
 
let executor = EffectExecutor::new(Arc::new(InMemoryEffectStore::new()));
let outcome = executor
    .execute(
        effect_request,
        &run,
        &handler,
        EffectRecoveryPolicy::RejectAmbiguous,
    )
    .await?;

需要跨进程重启恢复时使用持久 EffectStore。内存 Store 只适合测试与进程内行为。

恢复策略

默认 RejectAmbiguous 会拒绝重复结果未知的 Started 操作。

即使选择 RetrySafe,也只会在请求契约证明安全时重试:

  • Pure 与 ReadOnly;
  • 带稳定幂等 Key 的 IdempotentWrite。

它不会把非幂等写操作变安全。幂等 Key 必须代表目标系统中的同一个逻辑请求,而不是 每次 Retry 都生成新 Key。

Agent 工具与 Effect

Tool Descriptor 声明 effectrisk,Agent 根据这些语义协调 Callable。已完成调用 可以从共享 Effect Store 重放;同一执行位置出现不同请求时会被拒绝,不会拿到错误的 缓存结果。

Agent Checkpoint 可能在另一进程恢复时,应注入持久共享 Executor。ToolError 只保留 适合模型看到的信息,详细运行诊断放在 Transcript 外。

取消不是回滚。Handler 执行期间发生取消,Effect 仍保持 Ambiguous,直到对账完成。

生产检查清单

  • 按目标系统真实行为分类每个写操作;
  • 从业务身份派生稳定幂等 Key;
  • 发送外部请求前先持久化意图;
  • 使用有界 Deadline,但超时后保留 Ambiguous 状态;
  • 未经明确批准,不把完整 Effect 输出写入 Journal Event;
  • 为高风险不确定 Effect 提供对账队列;
  • 故障注入测试“目标已提交,但成功响应丢失”。

如果无法解释最后一种失败如何恢复,这个操作就不应该自动重试。