第 23 章:Token 预算控制——Agent 的“CFO”与“止损阀”

44 阅读4分钟

第23章:Token 预算控制:Agent 的“CFO”与“止损阀”

在 Agent 的世界里,智商(Intelligence)是昂贵的。如果不加控制,一个陷入死循环的 Agent 能在一夜之间烧掉你一年的预算。预算控制不是为了省钱,而是为了生存。

你部署了一个 Research Agent,用户下达指令:“深度分析全球 AI 市场”。 第二天早上,你收到了 OpenAI 的账单扣款短信: $150.00。 你惊呆了。这只是一个任务啊!

0002页.png 查日志发现: Agent 为了追求完美,并行启动了 12 个子 Agent,每个子 Agent 都在疯狂搜索、阅读长达 100 页的 PDF,并且都在用最昂贵的 GPT-4-32k 模型进行总结,还陷入了“搜索-不满意-重试”的死循环。

这就是没有 CFO(财务总监)的下场。 Agent 很勤奋,但它不知道什么叫“成本效益”。在它的逻辑里,只要能完成任务,花多少钱都行。

本章我们来构建 Agent 系统的 财务部

01. 预算的三道防线:从微观到宏观

在企业财务管理中,预算是分级的。Agent 系统也一样,我们需要建立 三级预算防御体系

第一道防线:Task 级(单次任务熔断)

  • 控制对象:用户的单次 Prompt。
  • 逻辑:不管这个任务多重要,单次消耗不能超过 $1.00(约 30k Tokens)。
  • 作用:防止“毒 Prompt”或“死循环”导致的单点爆破。

第二道防线:Session 级(会话累计熔断)

  • 控制对象:用户的一次完整对话(多轮)。
  • 逻辑:如果你跟我聊了 50 轮还在聊,说明要么你在调戏 AI,要么 AI 解决不了你的问题。累计消耗超过 $5.00,强制结束会话。
  • 作用:防止用户滥用或恶意刷量。

第三道防线:Tenant 级(租户/公司熔断)

  • 控制对象:某个企业客户的总额度。
  • 逻辑:这家公司这这个月买的 $1000 套餐用完了,API 自动停机或降级。
  • 作用:商业化收费的基础。

0003页.png

02. 背压控制(Backpressure):高速公路的红绿灯

当预算快用完时,直接报错(HTTP 402 Payment Required)虽然简单,但体验极差。 更优雅的做法是 背压(Backpressure)

想象一下早高峰的高速公路,匝道口的红绿灯不是为了把车拦在外面,而是为了控制进入的速度

背压策略表:

预算使用率策略延迟(Latency)体验
< 80%绿灯0ms秒回,体验丝滑。
80% - 90%黄灯+500ms稍微有点慢,用户感知不明显。
90% - 95%红灯+2000ms明显变慢,暗示用户“省着点用”。
> 100%路障拒绝请求弹出充值提示。

代码实现关键点: 延迟(Sleep)必须在 Workflow 层 做,绝对不能在 Activity 层 做!

  • 在 Activity Sleep:占用了 Worker 线程,导致线程池耗尽,整个系统卡死。
  • 在 Workflow Sleep:只是挂起了协程,不占用资源,这是 Temporal 的正确用法。

03. 熔断器(Circuit Breaker):系统的“保险丝”

背压是“减速”,熔断是“断电”。 当系统检测到异常流量(比如某个 User ID 在 1 分钟内发起了 1000 次请求,且全是失败的),必须立刻拉闸。

熔断器状态机:

  1. Closed(闭合) :正常状态,请求通过。
  2. Open(断开) :检测到故障/攻击,直接拦截所有请求,返回 Error。
  3. Half-Open(半开) :过了一段时间(比如 5 分钟),放 1 个请求过去试试。如果成功,恢复 Closed;如果失败,继续 Open。

这保护了后端 LLM 服务不被 DDOS 攻击打挂,也保护了你的钱包不被恶意脚本刷穿。

04. 会计学的智慧:如何精准算账?

1. 幂等性(Idempotency):防止重复扣款

Temporal 的机制是“失败重试”。 如果 Activity 执行成功了(钱花了),但在返回结果时网络断了。Temporal 会重试这个 Activity。 如果不做幂等处理,你会发现:模型调用了 1 次,账单上却扣了 2 次钱。

解决方案:唯一流水号 Idempotency_Key = WorkflowID + ActivityID + Attempt_Count 在计费时,先查这个 Key 是否存在。如果存在,说明是重试请求,直接返回上次的扣款结果,不再重复扣费。

2. 输入输出差异化定价

这是新手最容易忽略的细节。 GPT-4 的 Output Token 价格是 Input Token2-3 倍。 如果你简单地按 Total Tokens * 单价 计费,要么亏本,要么对用户不公。

正确做法:

Cost = (Input_Tokens * Price_In) + (Output_Tokens * Price_Out)

必须精确到这种程度,你的财务报表才能对得上。

05. 架构师的避坑指南

坑 1:在 Activity 里做限流

后果:Worker 线程全部被 time.sleep() 阻塞,系统吞吐量降为 0。 解法:使用 workflow.Sleep(),利用 Temporal 的定时器机制。

坑 2:只看总价,不看比例

后果:你给所有用户设了 10上限。结果VIP用户觉得不够用,免费用户觉得用不完。解法:预算应该是动态配置的。VIP用户的阈值是10 上限。结果 VIP 用户觉得不够用,免费用户觉得用不完。 **解法**:预算应该是 **动态配置** 的。VIP 用户的阈值是 100,普通用户是 $1。

坑 3:并发更新预算

后果:两个并发请求同时读取余额 $10,都判断“够用”,然后同时扣款。结果余额变成负数。 解法:使用 Redis 的 DECR 原子操作,或者数据库的行锁(Row Lock)。

总结

Token 预算控制,是 Agent 系统从“玩具”走向“商业产品”的必经之路。

  • 三级预算:构筑了立体的防御纵深。
  • 背压控制:提供了优雅的降级体验。
  • 熔断机制:守住了系统的安全底线。
  • 精准会计:确保了商业模式的可持续性。

有了这一章,你的 Agent 不仅会干活,还学会了 “过日子”

0013页.png 下一章预告

钱的问题解决了,接下来是 的问题。 Agent 能不能删库?能不能查看 CEO 的工资条?能不能代表公司签署合同? 这不仅仅是预算问题,更是 权限治理(Governance) 问题。

下一章,我们来聊 OPA(Open Policy Agent)策略引擎:如何用代码定义法律,实现细粒度的权限控制(RBAC/ABAC),给 Agent 戴上“紧箍咒”。