给Agent加预算护栏防token烧爆实操

先说结论:智能体(Agent)能自己决定调几次工具、循环几轮,一旦没拦着,token 能在你睡觉的几小时里悄悄烧掉几十块。最省事的护栏就两条——单次调用上限 + 单会话上限,再加一个超限直接熔断。我自己这么配完,月账单从一百多压到二十几,下面是踩坑全过程。

先说我是怎么被烧的

上个月做了个客服分流的小助手,挂的 deepseek-v3,让它自己判断要不要查知识库、要不要调天气接口、要不要再问用户一句。本来跑得挺好。

出事那天我加了个"找不到答案就换个说法再检索一遍"的逻辑。结果有个用户问了句特别绕的话,那玩意儿就开始自己跟自己较劲:检索→没命中→重写问题→再检索→还没命中→再重写……我在后台看日志,一个会话滚了 40 多轮,单会话直接干到 11 万 token。最离谱的是它没报错,安安静静烧,我第二天看账单才发现。

那一晚上,光这种死循环会话有七八个,烧掉将近 18 块。钱不多,但吓人——这要是上了量,按比例就是几千块凭空蒸发。

护栏怎么设

我后来定了三道闸,按这个顺序加,从粗到细:

第一道:单次模型调用的 max_tokens

最基础也最容易漏。很多人 SDK 调用根本不传 max_tokens,等于默认放开。客服场景一句回复撑死 500 token,我直接卡 800,留点余量。

 

resp = client.chat.completions.create( model="deepseek-v3", messages=msgs, max_tokens=800, # 单次硬上限,别让它写小作文 )

第二道:单会话累计 + 工具调用轮数

这道是治死循环的关键。我在会话级别记两个数:累计 token 和 tool_call 次数,超了就掐。

 

class Budget: def __init__(self, max_tokens=20000, max_tool_calls=8): self.used = 0 self.calls = 0 self.max_tokens = max_tokens self.max_tool_calls = max_tool_calls def check(self, just_used): self.used += just_used if self.used > self.max_tokens: raise BudgetExceeded(f"会话超 {self.max_tokens} token,熔断") if self.calls >= self.max_tool_calls: raise BudgetExceeded("工具调用超 8 次,疑似循环") def tick_tool(self): self.calls += 1

工具轮数那条特别管用。正常一次问答顶多调 2-3 个工具,超过 8 次基本就是 Agent 在原地打转,直接熔断比等它烧完强。

第三道:超限后怎么收场

熔断不是抛个异常就完事,得给用户一句体面的话,别让人对着报错页发懵。我的做法是 catch 住,回一句"这个问题有点复杂,帮你转人工",顺手把会话 ID 记下来事后看。

护栏

我的阈值

拦住的情况

单次 max_tokens

800

模型写长文跑题

单会话 token

20000

累计慢慢烧

工具调用轮数

8

检索死循环

超限动作

转人工+记日志

兜底体验

省了多少的账

加完护栏跑了三周,对比很直接:

  • 改之前:日均 token 约 95 万,月账单 ¥130 上下,还时不时有失控会话

  • 改之后:日均压到 31 万,月账单 ¥24,再没出现过单会话破万的情况

省下来的大头不是正常对话,是那些被熔断掐掉的死循环。粗算一下,光"工具轮数超 8 次熔断"这一条,每天就拦掉十几次失控,按之前一次失控均价 2 块算,一个月省下小三百。

说几个我真踩进去的:

1. 阈值定太死会误伤。 我一开始把单会话卡到 5000 token,结果正常的多轮咨询动不动被掐,用户体验崩了。后来加日志看了一周真实分布,95% 的会话在 18000 以内,才把线划到 20000。别拍脑袋,先观察。

2. 流式输出的 token 统计要单独算。 stream 模式下 usage 字段不一定在每个 chunk 里都有,我一开始累计漏了一截,护栏形同虚设。得在 stream_options={"include_usage": True} 打开,从最后一个 chunk 拿总数。

3. 工具本身的 token 别忘了算进去。 检索返回的知识库片段会塞进下一轮 prompt,那部分也烧钱。我最初只统计了模型输出,漏了 RAG 灌进去的上下文,实际消耗比账面高 30%。

4. 最大的坑:这套手写护栏维护起来烦。 我后来把这个客服助手迁到了一个零代码搭智能体的平台上——拖拖配配就能搭出能跑的小助手,知识库、模型、工具编排都在界面里点,预算和轮数上限直接在配置里填个数就行,不用我自己在代码里维护 Budget 类。说实话有点学习曲线,第一版配出来的回复挺干,提示词调了好几轮才像人话;它也就帮我省了搭框架和拦预算这些杂活,真正的业务判断还得自己琢磨。但护栏这块确实省心,不用再担心半夜偷偷烧钱。

(模型这层我走的讯飞星辰 MaaS,现成大模型 API 直接调,没自己部署算力——省了一笔机器钱。)

你们的 Agent 有没有被 token 烧过的经历?最高一次烧了多少,评论区聊聊,我好奇极限在哪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值