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

📅 2026/6/29 17:21:03
给Agent加预算护栏防token烧爆实操
先说结论智能体Agent能自己决定调几次工具、循环几轮一旦没拦着token 能在你睡觉的几小时里悄悄烧掉几十块。最省事的护栏就两条——单次调用上限 单会话上限再加一个超限直接熔断。我自己这么配完月账单从一百多压到二十几下面是踩坑全过程。先说我是怎么被烧的上个月做了个客服分流的小助手挂的 deepseek-v3让它自己判断要不要查知识库、要不要调天气接口、要不要再问用户一句。本来跑得挺好。出事那天我加了个找不到答案就换个说法再检索一遍的逻辑。结果有个用户问了句特别绕的话那玩意儿就开始自己跟自己较劲检索→没命中→重写问题→再检索→还没命中→再重写……我在后台看日志一个会话滚了 40 多轮单会话直接干到 11 万 token。最离谱的是它没报错安安静静烧我第二天看账单才发现。那一晚上光这种死循环会话有七八个烧掉将近 18 块。钱不多但吓人——这要是上了量按比例就是几千块凭空蒸发。护栏怎么设我后来定了三道闸按这个顺序加从粗到细第一道单次模型调用的 max_tokens最基础也最容易漏。很多人 SDK 调用根本不传max_tokens等于默认放开。客服场景一句回复撑死 500 token我直接卡 800留点余量。resp client.chat.completions.create( modeldeepseek-v3, messagesmsgs, max_tokens800, # 单次硬上限别让它写小作文 )第二道单会话累计 工具调用轮数这道是治死循环的关键。我在会话级别记两个数累计 token 和 tool_call 次数超了就掐。class Budget: def __init__(self, max_tokens20000, max_tool_calls8): 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_tokens800模型写长文跑题单会话 token20000累计慢慢烧工具调用轮数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 烧过的经历最高一次烧了多少评论区聊聊我好奇极限在哪。