可信执行
使用预算与取消限制工作
为整棵运行树设置硬上限,并通过结构化取消停止所有后代。
预算维度
Budget 可以限制 Token、微美元成本、墙钟时间、模型轮次、工具调用和委派次数。
这些限制作用于整棵运行树,而不只是某个 Agent 循环。
应根据产品行为与失败成本确定限制。仅设置 Token 上限,无法约束工具密集或高度并行 的运行。
创建有界 Context
use runifold::{Budget, BudgetTracker, CapabilitySet, RunContext};
let run = RunContext::root(
BudgetTracker::new(Budget {
tokens: Some(20_000),
turns: Some(10),
tool_calls: Some(6),
delegations: Some(2),
..Budget::default()
}),
CapabilitySet::new(),
);预算耗尽是类型化的终止状态,应与服务商故障或模型输出格式错误分别展示。
截止时间
在入口边界设置 Deadline,让服务商调用、工具与子运行看到同一个剩余生命周期。
use std::time::{Duration, Instant};
let run = run.with_deadline(Instant::now() + Duration::from_secs(20));Deadline 限制整次运行的有效时间;单次网络 Timeout 只限制一个操作。生产系统通常 两者都需要。
分层取消
取消会从父级传播给后代。长时间运行的工具应观察 ToolContext 并协作停止。取消
不等于回滚,已经完成的外部副作用仍然存在。
记录取消原因,并返回稳定的业务状态,而不是任意的网络错误。
并行预留
并行任务开始前必须预留共享预算,避免每个分支都看到同一份余额,最终合计超支。
为清理、持久化和最终响应保留少量额度。预留不匹配是记账缺陷,不是重试信号。