Run 预算与 Grace Call 协作

Run 预算字段与 Grace Call 机制共同决定 Run 何时结束、如何结束。


预算字段

字段默认值说明
MaxTurns90最大 LLM 调用轮次
MaxTokens0(无限制)总 token 消耗上限
TimeoutSeconds86400(24h)超时秒数
IterationBudget与 MaxTurns 联动迭代预算(含委派子 Run 共享)

INV-TERM-01:引擎不因计数器自动终止

预算耗尽时引擎不会自动终止 Run。行为如下:

  1. 发送 EventBudgetWarning 通知 UI
  2. 进入 Grace Call 状态
  3. 允许 Agent 一轮最终回复

唯一能因预算终止 Run 的是外部 BudgetCheckFn(商业限制)。


Grace Call 流程

预算耗尽
    ↓
_budget_grace_call = true
    ↓
LLM 调用(最后一轮)
    ├── Agent 返回文字 → 正常结束
    └── Agent 调用工具 → 执行工具 → Run 结束
    ↓
_budget_grace_call = false(不再有下一轮)

Grace Call 确保 Agent 不会在工具调用中途被"截断"。


BudgetCheckFn(外部终止)

type BudgetCheckFn func(status BudgetStatus) BudgetDecision

// 返回值
BudgetContinue    // 继续
BudgetWarning     // 警告但继续
BudgetExhausted   // 终止 Run

CycleDetector 独立预算

CycleDetector 有自己的阈值体系,与 Run 预算完全独立:

类别警告阈值终止阈值
探索类工具50100
动作类工具2550
完全相同调用47

CycleDetector 终止走两阶段协议(自愈 → HITL),不走 Grace Call。


消费方预算配置示例

req := wesgine.AppRunRequest{
    Actor:          "alice",
    SessionID:      "s1",
    AgentID:        "assistant",
    Messages:       messages,
    Model:          "gpt-4o",
    MaxTurns:       50,
    TimeoutSeconds: 3600,  // 1 小时
    BudgetCheckFn:  walletChecker.Check,
}

相关文档