Token 降本增效 · 8 / 13

Agent 四大成本陷阱与熔断

上一节看到的还只是「一次成功的执行」。真实世界里,Agent 的账单事故来自四个方向:工具返回爆炸、思考税、死循环、历史雪球。每一个都有对应的工程解法。

工具截断思考税循环熔断历史压缩
交互演示 · 挨个拆四个陷阱

陷阱一 · 工具返回值的信息爆炸

用户说「帮我查一下数据库里所有用户的订单」,Agent 调 SQL 工具返回 10,000 条记录 ≈ 500,000 Token。这 50 万 Token 会被塞进下一轮 Input:直接触发高价区、甚至撑爆上下文窗口,模型还会因信息过载而「迷失」,输出质量反而下降。解法是给所有工具套一层截断保护:

def safe_tool_call(tool_func, *args, max_tokens=2000, **kwargs): result = tool_func(*args, **kwargs) result_str = json.dumps(result, ensure_ascii=False) estimated = len(result_str) * 0.5 # 粗略估算 Token if estimated > max_tokens: # 保留前后各一段 + 中间标记,提示模型缩小范围 truncated = result_str[:1000] + "\n...[已截断]...\n" + result_str[-500:] return { "status": "truncated", "preview": truncated, "total_records": len(result), "message": f"返回结果过长(约{int(estimated)} Tokens),已截断。" "如需完整数据,请缩小查询范围。" } return result
工具返回值信息爆炸与截断策略
10,000 条 SQL 记录 ≈ 50 万 Token:截断保护是 Agent 工具层的标配。(图:作者分享原稿)
陷阱二 · 思考 Token 的隐形账单

Qwen-Plus 思考模式、DeepSeek-R1、o1 这类模型会生成「思考过程」:用户可能看不到,但全部按 Output 计费,而且单价还翻 4 倍(Qwen-Plus 非思考输出 2 元/M,思考模式 8 元/M)。同一个 Agent 任务开启思考模式后:可见输出不变(450 Token),思考过程 +2,000 Token,输出费用暴涨 +2,078%

任务类型思考模式理由
简单检索❌ 关闭不需要深度推理
数据清洗❌ 关闭规则明确,不需要「想」
复杂推理✅ 开启值得为准确率付费
代码生成⚠️ 视情况简单函数关闭,复杂架构开启

进阶解法:用 0.6B 级的极小模型做前置分诊,先花几厘钱判断这个请求需不需要深度思考,再决定路由到哪个模式——这就是第 3 节「T2 给 T0 打下手」的具体形态。

思考 Token 的隐形账单
模型的「内心戏」全在烧钱,而且单价翻 4 倍:按任务分级开关思考模式。(图:作者分享原稿)
陷阱三 · 死循环

Agent 修 Bug:修复 A → 报错 B → 修复 B → 报错 A(回到原点)→ …… 15 轮还在转。每轮 Input 膨胀 1,000 Token 的话,20 轮下来成本涨 13 倍;更糟的是用户等了 5 分钟任务还没完成。解法是强制熔断,三个条件任一命中就优雅退出:

class AgentExecutor: def __init__(self, max_rounds=10, max_tokens=50000): ... def execute(self, task): while not task.is_complete(): self.round_count += 1 # 熔断 1:轮次上限 if self.round_count > self.max_rounds: return self._graceful_exit("已达到最大执行轮次") # 熔断 2:Token 预算 if self.total_input_tokens > self.max_tokens: return self._graceful_exit("已达到 Token 预算上限") # 熔断 3:死循环检测(连续 3 轮输出相似度 > 90%) if self._detect_loop(): return self._graceful_exit("检测到可能的死循环") result = self._run_one_round(task) self.total_input_tokens += result.input_tokens

优雅退出时要带上 rounds_executedtokens_consumedpartial_result——半成品也比黑洞强。

Agent 死循环与三条熔断策略
轮次上限、Token 预算、死循环检测:三道保险丝确保任务不会无限等待。(图:作者分享原稿)
陷阱四 · 历史记录的雪球效应

标准做法(错误)是每轮都把完整历史塞进 Input。优化做法是固定左侧 + 压缩历史 + 保留最近 N 轮:System Prompt 永不压缩(保缓存前缀),最近 3 轮保留完整细节,更早的历史用小模型压成一句摘要。

方案第 10 轮 Input说明
无限膨胀~50,000 Tokens包含全部历史
滑动窗口(最近 5 轮)~12,000 Tokens丢失早期上下文
固定 + 摘要 + 最近 3 轮~6,000 Tokens既保关键信息,又控制长度
综合清单与三条红线
控制点策略预期收益
工具返回值截断 + 摘要,上限 2k Tokens防止单轮爆炸
历史管理固定左侧 + 压缩旧历史降低 50%+ Input
循环控制熔断机制(轮次 / Token / 死循环检测)防止无底洞
思考模式按任务分级开启Output 成本降 4 倍
模型选择简单子任务用小模型降低单价
缓存利用固定 System Prompt,命中 KV CacheInput 成本降 90%
红线阈值建议后果应对
单轮 Input< 32k Tokens跳入高价区历史压缩 + 工具截断
总轮次< 10 轮成本指数膨胀熔断机制
I/O Ratio监控 > 50:1Agent 在「空转」优化流程或降级任务
本节要点

给工具返回值设 2k 上限:截断 + 摘要 + 提示缩小范围,防止单轮 Input 爆炸。

思考模式按任务分级:看不见的内心戏也按 Output 计费,单价还翻 4 倍。

熔断是 Agent 的保险丝:轮次、Token 预算、死循环检测三选一命中就优雅退出。

历史管理用「固定 + 摘要 + 最近 3 轮」,比粗暴滑动窗口省一半还不失忆。

内容来源:整理自作者团队内部分享《AI Token 降本增效策略分享》「Agentic 应用的计费机制」。Agent 卡死与防呆的产品视角在动手实战篇有专门章节,上下文压缩另见Harness 核心 · 上下文溢出