<!-- Canonical URL: https://ask.atlascloud.ai/zh/set-hard-spending-limit-coding-agent-task -->

# 如何为编码智能体任务设置硬性支出上限？

> 硬性支出上限必须由掌管任务预算的网关在每次模型或付费工具调用之前执行。先预留最坏情况下的成本，再按实际用量结算；无法容纳下一次调用时直接拒绝，并让智能体留下可继续执行的检查点，而不是等钱花完后才发送提醒。

<!-- Canonical URL: https://ask.atlascloud.ai/set-hard-spending-limit-coding-agent-task -->

# 如何为编码智能体任务设置硬性支出上限？

硬性任务预算本质上是准入控制问题。在任何计费模型或工具调用开始之前，可信网关必须证明允许的最坏成本仍可由任务剩余余额覆盖。提醒和运行后报告很有用，但无法阻止已经发生的超支。

该设计应覆盖输入 token、最大输出、重试、回退、子智能体、嵌入、搜索、沙箱，以及智能体可以调用的其他任何付费工具。

## 区分硬限制和软目标

使用三个数值：

| 控制项 | 目的 | 行为 |
|---|---|---|
| 目标 | 预期成本 | 警告或选择更便宜的方案 |
| 软限制 | 升级阈值 | 请求批准或降低质量 |
| 硬限制 | 最大授权支出 | 在下一次调用开始前拒绝 |

例如，一个任务可以把目标设为 $0.60，在 $0.90 时请求批准，并在 $1.00 时停止。硬限制必须位于服务端，而不能只写在智能体提示词中。

## 让所有付费操作经过一个网关

为智能体发放只能调用自有网关的短期任务凭据。网关附加 `task_id`，查询预算，估算下一步操作，并决定预留资金或拒绝请求。

不要暴露可绕过记账的提供商密钥。网页搜索、托管沙箱、代码执行和付费检索服务也应遵守相同规则。

## 调用前预留，调用后结算

对于模型调用，根据已知输入 token 和配置的最大输出估算上限。原子性地预留该金额，发出请求，再用实际报告用量替换预留。

```text
remaining = hard_limit - committed_cost - open_reservations
worst_case = input_cost + max_output_cost + tool_allowance

if worst_case > remaining:
    reject("task_budget_exceeded")
else:
    reserve(worst_case)
    call_provider()
    reconcile(actual_cost)
```

原子预留可以防止两个并行子智能体同时花掉同一笔剩余余额。

## 使用带版本的费率表计价

把每次估算采用的价格与事件一起保存。模型价格和计费规则可能变化，因此后续报告不应使用今天的费率重新计算旧用量。

如果提供商返回权威成本，应同时保留估算值和最终费用。如果只返回 token，则使用调用前选定的费率表版本计算。对未知工具费用加入保守余量；如果无法确定最大成本，则拒绝调用。

## 确保流式响应安全

在打开流之前预留允许的全部响应成本。可用时统计接收的用量，但不要假设关闭客户端连接会立即停止提供商计费。取消是一种优化，不是强制边界。

为每次调用设置输出上限和墙上时钟超时。任务硬限制仍然覆盖所有流、重试和回退的总和。

## 包含重试和子智能体

每次尝试都从同一个父任务账本扣费。重试策略如果悄悄创建新预算，就会让限制失效。

智能体委派任务时可使用分层预算：

| 账本 | 上限 | 规则 |
|---|---:|---|
| 父任务 | $1.00 | 绝对上限 |
| 实现子智能体 | $0.55 | 不能超过父任务剩余余额 |
| 测试分析子智能体 | $0.25 | 返还未使用预留 |
| 最终审查 | $0.20 | 仅在仍有余额时运行 |

子限制是分配额，不是额外资金。

## 以有用的检查点停止

下一步操作无法容纳时，返回编排器能理解的类型化错误。智能体不应反复重试被拒绝的调用。

让它使用已有上下文生成无需额外费用的检查点，其中包括：

* 已完成变更和测试结果；
* 剩余工作与被阻塞操作；
* 当前仓库状态；
* 继续所需的估算预算；
* 恢复 token 或任务 ID。

这样，预算停止就会变成受控交接，而不是损坏的半成品运行。

## 把提供商控制作为后备保障

提供商和网关的账户限额可以降低影响范围，但通常不是精确的单任务控制。它们可能汇总多个仓库、异步更新，或者不包含工具费用。

使用 Atlas Cloud 等多模型网关时，应把权威任务账本放在自己的编排层，并记录网关用量标识用于对账。即使任务切换模型，硬边界也能保持不变。

## 像测试财务控制一样测试上限

测试并行调用、长流、提供商超时、缺失用量字段、重试、模型回退和账本故障。预算服务不可用时默认拒绝。验证已确认成本与开放预留之和永远不会超过硬限制。

## 结论

真正的硬性支出上限必须在消费前执行，并使用原子预留以及覆盖所有计费操作的统一账本。如果系统只在用量产生后发出提醒，就应称其为监控，而不是硬上限。

## FAQ

### max_tokens 是硬性美元上限吗？

不是。它只限制单次响应长度，不限制任务总成本、输入 token、重试、模型切换或付费工具。美元上限需要包围所有计费操作的预算账本。

### 编码智能体预算应在哪里强制执行？

应在所有模型和付费工具调用都必须经过的服务端网关或编排层执行。客户端计数器可能被绕过，也可能在并发时发生竞态。

### 如何为流式响应做预算？

在打开流之前预留允许的最大输出成本，流结束后再根据报告用量结算。提供商支持时可以取消请求，但不要把取消当作唯一的强制手段。

### 重试是否应共享原任务预算？

是。重试、回退、子智能体和评估调用都应从同一任务账本扣费，除非用户明确批准独立预算。

### 剩余预算不足时应该怎么做？

拒绝下一次计费调用，并让智能体利用已有上下文生成检查点。检查点应说明已完成工作、未解决事项以及继续所需金额。

### 提供商账户限额能否代替单任务限额？

通常不能。账户限额保护整个账户，而且可能异步更新。单任务网关可立即实现隔离，账户级控制则可作为额外保险。
