摘要: Coding Agent 的月度预算不能只设置一个美元上限,因为一次任务的成本同时来自模型 Token、搜索与浏览器、MCP/API、云计算、测试、存储和人工审批。完整方案应把月度财务预算拆成组织、团队、项目、用户和任务五级额度,再以 Token Budget、Tool Budget、并发与时间预算共同约束;每次调用前预授权、调用后结算,并在软阈值降级、硬阈值拒绝、异常速率触发时自动熔断。本文给出可直接改造的预算模型、策略配置、网关伪代码、告警与回滚流程。
核心结论
Coding Agent 每月预算最稳妥的管理方式,是“财务预算管总额、实时预算网关管每一次行动、供应商限额做最后保险”。单独依赖控制台月度限额或账单告警,无法阻止短时间内的循环调用、昂贵工具和延迟入账。
- 预算至少分两本账: Token Budget 管模型输入、输出、缓存和推理费用;Tool Budget 管浏览器、搜索、MCP、云资源、CI、存储及第三方 API。
- 采用五级额度树: 组织 → 团队 → 项目 → 用户/Agent → 单任务,子级消耗同时扣减所有上级余额,避免局部正常、整体超支。
- 使用三段阈值: 70% 提醒与优化,85% 自动降级,100% 硬停止;异常调用速率、失败重试和高风险工具可以提前熔断。
- 在调用前预留最坏成本: 完成后按实际用量结算并释放差额,避免多个并发 Agent 同时看到“还有余额”而集体超支。
- 熔断后不能简单全停: 应保留只读查询、保存补丁、导出日志和人工恢复通道,同时禁止新任务、昂贵模型、外部写操作与生产工具。
为什么一个“每月 1000 美元”上限不够
Coding Agent 与普通聊天不同。它会循环规划、读取仓库、调用模型、运行测试、搜索文档、打开浏览器、触发 CI、调用 MCP 工具,失败后还会自动重试。一次看似简单的“修复 Bug”可能分裂为几十次模型请求和工具动作。
月度账单平台通常擅长财务统计,不一定适合毫秒级授权。部分数据会延迟汇总,供应商之间计量单位也不相同:模型按 Token 或 credits,GitHub Copilot 可能按 AI credits/请求额度,云平台按计算、网络与存储,第三方搜索按请求。若只在月底查看总额,Agent 已经完成的消费无法撤销。
因此预算治理要回答四个问题:这次任务最多花多少;每一步是否仍有余额;异常时降级什么;谁可以恢复。相关安全设计可结合 AI Stack Nav 的 Agent 预算治理内容 与 Coding Agent 工作流 一并规划。
| 预算维度 | 计量对象 | 常见失控方式 | 实时控制动作 |
|---|---|---|---|
| Token Budget | 输入、输出、缓存、推理 Token | 上下文膨胀、反复重读仓库 | 截断上下文、摘要、降级模型、停止调用 |
| Tool Budget | 搜索、浏览器、MCP、数据库/API | 工具循环、昂贵第三方接口 | 次数/金额/字节上限、工具禁用 |
| Compute Budget | Sandbox、CI、GPU/CPU、存储 | 测试死循环、工作区未销毁 | 超时、资源配额、自动回收 |
| Risk Budget | 生产写入、发信、部署、权限变更 | 低成本但高破坏性动作 | 强制人工审批、次数为零或一 |
| Concurrency Budget | 同时运行任务与子 Agent | 并发乘法放大消费 | 队列、租约、全局信号量 |

五级预算树:从月度总额拆到每个任务
组织月度预算是最上层硬约束。团队预算按成本中心分配,项目预算对应产品或仓库,用户/Agent 预算限制单个主体,任务预算限制一次运行。每笔消费必须带 org_id、team_id、project_id、agent_id 和 task_id,同时写入五个账本。
不要把上级预算简单复制给下级。例如组织有 10 万元额度,不代表每个团队各有 10 万元。合理做法是给团队分配保障额度,同时保留中央弹性池;项目额度可动态借用,但借用需要策略或审批,并记录归还与到期时间。
单任务预算可按任务类型给模板:代码解释仅允许少量 Token 与只读工具;Bug 修复允许测试与 PR;大规模迁移允许较高 Token、计算和持续时间;生产事故可提高预算但缩短 TTL,并强制值班人员审批。预算不是员工福利,而是任务风险和业务价值的约束。
一个实用公式是:
任务预计成本 = 模型成本上界 + 工具成本上界 + 计算成本上界 + 风险缓冲
模型成本上界按各模型可能的输入/输出量和官方费率估算;工具按最大调用次数乘单价;计算按资源规格乘最长时间;风险缓冲可由历史误差决定。费率必须存在版本号和生效时间,不能把价格硬编码在 Agent Prompt 中。
Token Budget:预估、预留、结算
Token 预算应以“金额”和“Token 数”双重限制。只限制 Token 会忽略不同模型、缓存、长上下文与推理档位的价格差;只限制金额又不利于控制上下文长度和响应延迟。
调用前先使用官方 Token 计数能力或兼容 tokenizer 估算输入,叠加 max_output_tokens、工具定义、系统提示和安全缓冲,计算最坏成本。预算网关以原子事务预留这笔额度;只有预留成功才向模型供应商发请求。响应完成后读取供应商返回的实际 usage,按费率版本结算并释放差额。
如果请求失败,不应一律记为零成本,因为供应商可能已处理部分 Token。先标记为“待对账”,随后用 Usage/Cost API 或账单明细校准。对账任务只能调整账本,不能反向解锁已经触发的高风险动作。
budget_policy:
currency: USD
period: monthly
task:
hard_limit: 8.00
input_tokens: 500000
output_tokens: 80000
max_model_calls: 60
thresholds:
warn: 0.70
degrade: 0.85
stop: 1.00
degradation:
model_route: economical-approved-model
max_output_tokens: 2048
context_strategy: summarize_then_trim
disable_parallel_subagents: true
降级不能随意切换到未经批准的模型。候选模型必须事先通过代码能力、隐私、数据区域和安全评测。对于安全修复、加密代码或生产事故,低价模型可能增加错误与返工,策略可以选择缩小任务范围而不是降低模型质量。
Tool Budget:模型之外的隐性大头
工具预算应以“调用次数、金额、持续时间、数据量和风险等级”五个维度管理。浏览器按页面/会话/流量,搜索按请求,CI 按分钟,Sandbox 按 vCPU/内存时长,数据库按查询等级,MCP 按工具和参数分别定价。
工具目录必须给每个动作登记 cost_model、risk_level、idempotent、timeout 和 approval_required。未知工具默认禁止,而不是默认免费。即使某个内部工具没有直接账单,也要给它虚拟成本,避免 Agent 无限调用稀缺服务。
Tool Budget 还要防止“便宜但危险”的操作。删除数据、发布内容、发邮件、修改账户、修改权限、付款和生产数据库操作,不能因为财务成本低就自动放行。这些动作单独进入 Risk Budget,并要求结构化参数校验、一次性审批票据和完整审计。
{
"tool": "ci.run",
"scope": "YOUR_PROJECT_ID",
"limits": {
"calls_per_task": 6,
"minutes_per_task": 45,
"parallel_runs": 1,
"estimated_usd": 3.00
},
"retry": {"max_attempts": 2, "backoff": "exponential"},
"on_exhausted": "save_patch_and_stop"
}
自动熔断:三类信号、四种状态
熔断信号分为余额、速率和行为三类。余额信号包括任务或上级预算达到阈值;速率信号包括分钟级 Token、工具调用或并发突然升高;行为信号包括重复相同工具、连续失败、上下文不断增大、子 Agent 递归生成,以及尝试绕过网关。
状态机可设置为 NORMAL、DEGRADED、OPEN、RECOVERY。正常状态按完整权限执行;降级状态缩短上下文、禁止并行、切换批准的经济模型并关闭非必要工具;OPEN 状态拒绝新的计费动作,但允许保存 Patch、读取熔断原因和导出日志;恢复状态只放行小比例任务,验证费用与错误率后再回到正常。
供应商月度 Spend Limit、GitHub 预算阻断或云预算动作可以作为外层保险,但本地网关必须在请求前做决定。AWS 官方资料显示异常检测可能需要时间才能发现支出变化,因此它适合异常发现和财务运营,不适合作为 Agent 单任务即时刹车。
十步落地完整方案
- 统一成本目录。 收集模型、缓存、搜索、浏览器、MCP、CI、Sandbox、存储和网络的计量规则,登记币种、税费、折扣与生效日期。
- 建立五级预算主体。 给组织、团队、项目、Agent 和任务分配唯一 ID,禁止共享无法归因的 API Key。
- 设计任务模板。 为解释代码、修 Bug、重构、迁移和生产事故设置不同 Token、工具、时长与风险额度。
- 部署预算网关。 模型与计费工具只能通过网关调用;客户端余额仅供展示,服务端账本才是权威。
- 实现原子预留。 并发调用使用数据库事务或原子计数,预留失败立即拒绝,避免超卖余额。
- 接入实际用量结算。 读取响应 usage、工具回执和云账单,保留费率版本,定期处理待对账记录。
- 配置三段阈值。 70% 通知、85% 降级、100% 熔断只是起点,应按历史任务分布调整。
- 约束重试与循环。 设置连接/总超时、最大步骤、最大失败次数、幂等键和指数退避;相同错误重复出现时提前停止。
- 演练熔断与恢复。 模拟 Token 爆发、工具循环、账单延迟、供应商不可用和账本故障,验证默认失败关闭。
- 按价值复盘。 月末不仅看花费,还看有效 PR、接受率、缺陷逃逸、返工和人工时间,淘汰高消费低价值工作流。

网关实现:关键不是统计,而是授权
预算网关的核心接口可以是 reserve()、settle()、cancel() 和 trip()。reserve 接收任务身份、资源类型、最大预估成本和幂等键,在所有上级账本中原子扣留;settle 使用实际成本完成结算;cancel 释放未发生的预留;trip 写入熔断状态并通知 Agent 编排器。
def authorize_call(task, request, ledger):
estimate = price_catalog.estimate_max(request)
signals = anomaly_detector.evaluate(task, request)
if signals.high_risk or task.steps >= task.max_steps:
return deny("risk_or_step_limit")
mode = ledger.current_mode(task.budget_path)
if mode == "OPEN":
return deny("budget_circuit_open")
if mode == "DEGRADED":
request = policy.apply_degradation(request)
estimate = price_catalog.estimate_max(request)
reservation = ledger.reserve_atomic(
path=task.budget_path,
amount=estimate,
idempotency_key=request.idempotency_key,
)
return allow(request, reservation)
上述是平台无关的示意代码。生产实现还要处理多币种、税费、批处理、缓存 Token、供应商折扣、流式响应中断和迟到的账单调整。账本建议采用不可变事件记录加可查询余额快照,任何人工调额都要记录操作者、理由、工单和有效期。
告警、审批和恢复机制
告警要发给能行动的人。70% 阈值通知任务所有者并给出主要成本来源;85% 通知项目负责人并自动应用降级;100% 通知成本中心和平台值班,创建事件并暂停新任务。组织级余额不足时,不能让项目管理员自行绕过。
临时提额使用一次性授权,绑定预算主体、增加金额、原因、审批人和到期时间。禁止把“月底前提高总额度”当成常规修复。若某个生产故障必须继续,可从中央应急池借用,同时锁定工具范围和执行时长。
恢复前检查三个条件:根因已经消除;未结算预留已对账;小流量试运行没有再次触发异常。恢复采用分级放量,先开放只读与低成本任务,再开放写 PR,最后才恢复昂贵工具。直接清空熔断标志可能导致积压任务同时启动,造成第二次尖峰。
成本、隐私与安全边界
成本日志可能包含仓库名、任务描述、用户、工具参数和模型用量,它本身属于敏感运营数据。只记录预算所需字段,对 Prompt、源代码和响应正文做哈希或脱敏;财务人员不应自动获得代码内容,开发者也不应看到其他团队的详细消费。
API Key 只保存在网关的 Secrets 系统中,Agent 获得任务级身份而非供应商长期密钥。Prompt Injection 可能诱导 Agent 反复调用工具或声称“必须忽略预算”,预算策略必须在模型之外执行,模型无权修改自己的额度、熔断状态或价格目录。
Rate Limit 与 Budget 不可混为一谈。速率限制保护服务稳定性,月度 Spend Limit 控制累计消费;即使一分钟请求量合法,也可能快速耗尽月度预算。反过来,余额充足也不代表允许无限并发。两类限制应同时评估,并把供应商 429、5xx 与连接错误纳入有限重试。
运营指标:花了多少钱之后还要问创造了什么
每月报告应至少包含:总成本、按团队/项目/模型/工具分布、预算利用率、预留与实际误差、降级次数、熔断次数、异常检测提前量、失败重试浪费,以及未使用额度。价值指标包括有效 PR 数、PR 接受率、缺陷修复周期、测试覆盖变化、返工率和人工节省时间。
不要用“Token 越少越好”考核个人。复杂安全修复可能合理消耗更多 Token;单纯压低额度会诱导员工转用未受控账号。更好的目标是单位有效变更成本,并结合质量与风险。预算策略的职责是防止意外、建立归因和促进选择,而不是机械限制探索。
预算负责人还应每月检查“未使用额度”和“频繁提额”两种相反信号。长期闲置说明分配过宽,会降低异常检测敏感度;频繁临时提额则可能意味着任务模板过小、价格目录过期,或团队把大任务错误拆成多次运行。任何调整都应通过版本化策略发布,并保留调整前后的影响比较。
建议建立成本回放环境:从审计记录中抽取脱敏后的真实任务,使用新模型、新价格或新预算策略离线重算,比较预计阻断率、成功率与成本。这样可以在不影响生产任务的前提下验证阈值。如果价格变更或供应商计量规则升级,先更新价格目录并完成回放,再切换生产版本;不能等月底账单异常后才发现计算口径已经失效。
对于跨月长任务,应在周期切换点重新授权,而不是把上月预留无限延续。重授权时保存当前 Commit、工具状态和剩余工作,新的月份按新费率与余额重新计算。如果余额不足,Agent 输出可恢复检查点并安全停止,避免为了跨月结算而丢失已完成成果。
事实依据与来源
截至 2026 年 9 月 22 日,Anthropic 官方文档明确区分 Spend Limit 与 Rate Limit,并提供 Token Counting、Usage/Cost、Spend Limits 等管理能力;Claude Code 成本指南建议追踪 Token、设置团队支出限制并通过上下文和模型选择优化费用。GitHub 官方文档说明组织和企业可设置 AI credits 预算、在 75%、90%、100% 阈值接收提醒,并可对部分计量使用在预算耗尽时阻断。具体计量体系可能继续变化,应以组织控制台和合同为准。
AWS 官方文档确认 Cost Anomaly Detection 用于识别异常支出,但检测可能存在延迟;因此本文把它定位为外层财务监测,而非 Coding Agent 的即时授权系统。本文的五级预算树、70/85/100 阈值、预留结算算法和状态机属于实施建议,不是 OpenAI、Anthropic、GitHub 或 AWS 的统一官方标准,需结合团队历史数据验证。
FAQ
Token Budget 与美元预算应该选哪一个?
两者都要。Token 上限控制上下文和输出规模,美元预算处理不同模型和功能的价格差异。只选其一都会留下盲区。
每月预算设置多少才合理?
先用两到四周只观测模式收集任务分布,再按业务价值、历史 P50/P90 成本和风险缓冲定额。没有历史数据时从小范围只读试点开始,不应引用其他公司的数字直接套用。
供应商 Spend Limit 能代替本地预算网关吗?
不能。供应商限额是重要保险,但通常无法理解企业的团队、项目、任务、工具风险和内部成本,也可能存在用量汇总延迟。本地网关负责调用前授权。
达到预算后是否应立即终止正在运行的 Agent?
停止新的计费动作,但允许执行安全收尾:保存补丁、关闭文件、写审计日志和释放资源。生产写操作不得为了收尾而绕过审批。
如何避免并发 Agent 超卖同一余额?
使用服务端原子预留。每次调用先锁定最大可能成本,完成后按实际用量结算并释放差额;不能让多个客户端各自读取缓存余额后自行判断。
Tool Budget 怎样给没有公开价格的内部工具计费?
使用虚拟成本或资源配额,把计算时长、调用次数、数据量和风险转换为内部单位。目的不是财务精确,而是防止循环占用和建立优先级。
自动降级会不会降低代码质量?
可能,因此模型路由必须预先评测。高风险任务可以选择缩小上下文、禁止子 Agent 或暂停等待审批,而不是强制切换低价模型。
月底剩余额度是否应该清零?
财务额度通常按周期清零,不建议自动滚存成无限余额。若支持结转,应设置上限和到期时间,避免年底集中消费或长期掩盖预算配置不合理。
参考来源
- Anthropic, Rate limits and spend limits
- Anthropic, Manage Claude Code costs effectively
- Anthropic, Token counting
- Anthropic, Administration API
- GitHub, Setting up budgets to control spending
- GitHub, Managing premium request allowance
- AWS, Detecting unusual spend with Cost Anomaly Detection
- AWS Well-Architected, Implement cost controls
工具选型与提示词资料
适合阅读工具评测、工具推荐、对比测评类文章后继续转化。
0 回复