Agent预算不能只报警:50%、80%、100%该怎么控

Agent 成本最危险的地方不是单次请求贵,而是:

一个任务自己循环
一个团队突然放量
一个自动化一夜跑几万次

传统云成本管理经常是:

月底看账单

这对 Agent 太慢。

Google Cloud 8月26日公布的新一轮 Agent FinOps 控制里,最值得工程团队关注的是几个非常具体的机制:

项目级月度硬上限
50% / 80% / 100% 邮件告警
异常成本检测
Top 3 SKU根因
统一池化配额
Pay-as-you-go
Deferred Execution最高可降低约一半推理成本

Flexible Savings Plans 则给出:

1年承诺:10% token折扣
3年承诺:20% token折扣

真正应该借鉴的是:

Agent 成本必须进入运行时控制面,而不是只进财务报表。

第一层:预算要分层

不要只有:

Company Monthly Budget

至少:

Enterprise
Tenant
Project
Agent
Task Type
Run

例如:

budgets:

  tenant-a:
    monthly_usd: 5000

  research-agent:
    daily_usd: 150

  deep-research:
    per_run_usd: 2.5

只有最上层预算,根本找不到是谁烧掉的。

第二层:50%、80%、100%不能只发邮件

一个更实用的状态机:

0—50%:
NORMAL

50—80%:
WATCH

80—100%:
RESTRICT

100%:
HARD_STOP

每个阶段动作不同。

50%:提高可见性

增加成本采样
显示本月预测
检查增长率
通知Owner

不影响业务。

80%:开始限制低价值任务

可以:

关闭非关键Nightly Eval
降低并发
禁止高成本模型跑低风险任务
把可延迟任务转Deferred

不是直接停所有 Agent。

100%:硬停也要按任务分层

Google 的项目级 Spend Cap 到上限后会暂停 Agent API Call,同时不影响其他生产基础设施。

企业自己实现时也应该只控制:

AI消费面

不要连数据库和业务 API 一起停。

Task Criticality

public enum TaskCriticality {
    CRITICAL,
    IMPORTANT,
    NORMAL,
    DEFERRABLE
}

100%时:

DEFERRABLE:
停止

NORMAL:
停止

IMPORTANT:
需要Override

CRITICAL:
走Emergency Budget

安全告警 Agent 和日报 Agent 不能同等处理。

第三层:Run开始前先做Admission Control

不要:

任务跑完
→发现花了$8

启动前先估成本。

public record RunCostEstimate(
        BigDecimal expected,
        BigDecimal p90,
        BigDecimal maxAllowed,
        String estimatorVersion) {
}

如果:

p90 > remaining_budget

可以:

切便宜模型
缩小检索范围
减少Sub-Agent
延迟执行
拒绝运行

成本预测不用一开始就上机器学习

先按历史 Task Type 统计:

P50
P90
P95

例如:

select
  percentile_cont(0.9)
  within group (
    order by total_cost_usd
  )
from agent_run_cost
where task_type = 'deep-research'
  and occurred_at >= now() - interval '30 days';

这已经比完全不估强很多。

第四层:运行中还要有Cost Circuit Breaker

长任务预算:

$2

当前已花:

$1.65

Planner 准备再开 8 个 Sub-Agent。

这时 Runtime 必须干预。

if (runCost.current()
        .compareTo(
            budget.maxRunCost()
                .multiply(
                    new BigDecimal("0.8")))
        >= 0) {

    runtime.enableEconomyMode();
}

Economy Mode 可以:

减少并发
降低模型档位
缩短搜索深度
减少Reviewer次数
禁止非必要Tool

到100%不能只throw Exception

如果已经运行 20 分钟:

先Checkpoint

再停。

if (runCost.current()
        .compareTo(
            budget.maxRunCost())
        >= 0) {

    checkpointService.save(runId);

    throw new RunBudgetExceededException();
}

用户提高预算以后可以 Resume。

不要让已经完成的大量工作全部丢掉。

第五层:异常成本要能归因

Google 新工具会把异常趋势定位到 Top 3 SKU。

Agent 平台内部应该继续拆:

Model
Tool
Agent
Task
Tenant

例如:

{
  "spike": "+186%",
  "drivers": [
    {
      "type": "model",
      "name": "frontier-reasoner",
      "delta_usd": 912.18
    },
    {
      "type": "task",
      "name": "repo-migration",
      "delta_usd": 487.11
    }
  ]
}

这样才知道应该:

换模型
还是停任务

第六层:Deferred Execution非常适合Agent

Google 公布的方向是:

可延迟Agent工作
在非高峰容量执行
最高可降低约一半推理成本

适合:

Nightly Eval
离线Embedding
批量文档分类
日报
代码库全量Review

这些任务没有必要和实时对话抢同一种成本结构。

给Task加Deadline

public record SchedulingProfile(
        Instant earliestStart,
        Instant deadline,
        boolean deferrable,
        TaskCriticality criticality) {
}

Scheduler 可以判断:

现在贵
→晚点跑

只要 Deadline 允许。

实时和延迟任务必须分池

Realtime Pool
Deferred Pool

Realtime 目标:

低延迟
高优先级

Deferred 目标:

低成本
高吞吐
可批处理

不要一个队列混在一起。

第七层:Savings Plan不能只看折扣

1年 10%、3年 20% 很好看。

真正决定是否承诺的是:

Baseline Usage
Growth
Volatility

如果月消费波动:

$1000
$6000
$900
$7000

长期承诺未必合适。

至少先看:

过去90天P50
过去90天P90
增长率

如果 P50 稳定且增长明确,更适合承诺。

第八层:核心指标仍然是Cost per Successful Task

总花费下降:

不等于效率提高

可能只是任务成功率下降。

所以成本优化要同时看:

Task Success
Latency
Human Rework

最核心:

Cost / Successful Task

一个成本优化Gate

cost_optimization_gate:

  task_success_drop_max: 0.005

  cost_per_success:
    target_reduction: 0.10

  p95_latency_increase_max: 0.20

不能为了便宜,明显牺牲质量。

第九层:预算Override必须有期限

项目达到 100%。

业务说:

今天必须继续跑

可以开 Temporary Overage。

但必须保存:

Owner
Reason
Extra Budget
Expiry
public record BudgetOverride(
        String scopeId,
        BigDecimal extraBudget,
        String reason,
        String approvedBy,
        Instant expiresAt) {
}

不要永久把上限从 1000 改成 10000,然后忘掉。

第十层:Agent不能修改自己的预算

这是非常重要的一条。

如果负责花钱的 Agent 同时有:

budget.update

它在成本压力下可能自己“解决”限制。

所以:

Agent Runtime

只能读预算。

Budget Controller

独立身份、独立审批。

Budget变更本身也要审计

$1000
→$10000

这是重大控制变化。

至少需要:

Approval
Reason
Owner Notification
Audit

高风险环境可以走 Git / PR。

第十一层:项目预算和单Run预算不能互相替代

月预算还有很多:

不代表一个Run可以无限烧

反过来,每个 Run 都很便宜:

也不代表一天跑100万次没问题

所以:

Per Run Limit
+
Per Hour Limit
+
Daily Limit
+
Monthly Limit

都要有。

一个层级检查

Run Admission
↓
Agent Daily Budget
↓
Tenant Monthly Budget
↓
Enterprise Monthly Budget

任何一层不足:

降级 / 延迟 / 拒绝

我会监控这9个指标

agent_cost_usd_total
agent_cost_per_success
agent_budget_utilization
agent_budget_override_total
agent_run_budget_exceeded_total
agent_deferred_task_total
agent_cost_anomaly_total
agent_cost_forecast_usd
agent_cost_driver_top

其中:

budget_utilization

最好同时展示:

Actual
Forecast

现在花 40% 不代表安全。

如果月份刚过 20%,预测可能已经超预算。

一个完整控制链

Cost Forecast
↓
Run Admission
↓
Runtime Circuit Breaker
↓
Project Spend Cap
↓
Anomaly Detection
↓
Owner Override

这套链比月底报表强太多。


Agent 成本治理成熟以后,不应该只问:

这个月花了多少钱?

而应该在任务执行前就回答:

还有多少预算?
这次预计花多少?
是否值得现在跑?
能不能延迟?
达到80%以后要降什么?
达到100%以后哪些任务必须停?

50%、80%、100% 不是三个提醒数字。

它们应该是三个不同的运行状态。

只有把预算真正接到 Agent Runtime,FinOps 才从“看账单”升级成“控制行为”。


更多企业级 AI 应用、Agent、RAG 与模型工程化内容,我会继续整理在 智元界

https://www.zyentor.com/