专题篇章 · Token 成本工程:让账算得过来

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 核心 · 上下文溢出

「陷阱一 · 工具返回值的信息爆炸」的完整成本怎么算

「用户说「帮我查一下数据库里所有用户的订单」,Agent 调 SQL 工具返回 10,000 条记录 ≈ 500,000 Token 。这 50 万 Token 会被塞进下一轮 Input:直接触发高价区、甚至撑爆上下文窗口,模型还会因信息过载而「迷失」,输出质量反而下降。解法是给所有工具套一层截断保护」提醒我们,AI 成本不是单价乘一次调用这么简单。输入、输出、重试、工具调用、等待时间和人工收尾,会共同决定一次任务到底贵不贵。

先找出账单里不断重复的部分

「Qwen-Plus 思考模式、DeepSeek-R1、o1 这类模型会生成「思考过程」: 用户可能看不到,但全部按 Output 计费,而且单价还翻 4 倍 (Qwen-Plus 非思考输出 2 元/M,思考模式 8 元/M)。同一个 Agent 任务开启思考模式后:可见输出不变(450 Token),思考过程 +2,000 Token,输出费用暴涨 +2…」对应的关键变量通常是上下文是否每轮重复发送、输出是否过长、失败是否触发重试,以及每次调用是否真的带来有用结果。减少无效 Token 往往同时降低费用、延迟和并发压力。

便宜的单次调用可能换来更贵的全流程

以「历史管理用「固定 + 摘要 + 最近 3 轮」, 比粗暴滑动窗口省一半还不失忆」为起点做一张小表:输入、输出、重试、工具和人工复核分别花了什么,再比较优化前后的质量,避免只看某一项价格。

从「陷阱一 · 工具返回值的信息爆炸」走到「陷阱二 · 思考 Token 的隐形账单」

「陷阱一 · 工具返回值的信息爆炸」先把问题落在「用户说「帮我查一下数据库里所有用户的订单」,Agent 调 SQL 工具返回 10,000 条记录 ≈ 500,000 Token 。这 50 万 Token 会被塞进下一轮 Input:直接触发高价区、甚至撑爆上下文窗口,模型还会因信息过载而「迷失」,输出质量反而下降。解法是给所有工具套一层截断保护」上;到了「陷阱二 · 思考 Token 的隐形账单」,讨论继续推进到「Qwen-Plus 思考模式、DeepSeek-R1、o1 这类模型会生成「思考过程」: 用户可能看不到,但全部按 Output 计费,而且单价还翻 4 倍 (Qwen-Plus 非思考输出 2 元/M,思考模式 8 元/M)。同一个 Agent 任务开启思考模式后:可见输出不变(450 Token),思考过程 +2,000 Token,输出费用暴涨 +2,078%」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。

把这条判断带到下一个场景

分析成本时,先画出完整交互,再找每轮重复的输入、无效输出和失败重试;单次调用便宜,并不代表整个任务便宜。

  • 「陷阱一 · 工具返回值的信息爆炸」:用户说「帮我查一下数据库里所有用户的订单」,Agent 调 SQL 工具返回 10,000 条记录 ≈ 500,000 Token 。这 50 万 Token 会被塞进下一轮 Input:直接触发高价区、甚至撑爆上下文窗口,模型还会因信息过载而「迷失」,输出质量反而下降。解法是给所有工具套一层截断保护
  • 「陷阱二 · 思考 Token 的隐形账单」:Qwen-Plus 思考模式、DeepSeek-R1、o1 这类模型会生成「思考过程」: 用户可能看不到,但全部按 Output 计费,而且单价还翻 4 倍 (Qwen-Plus 非思考输出 2 元/M,思考模式 8 元/M)。同一个 Agent 任务开启思考模式后:可见输出不变(450 Token),思考过程 +2,000 Token,输出费用暴涨 +2,078%
  • 「最后的要点」:思考模式按任务分级: 看不见的内心戏也按 Output 计费,单价还翻 4 倍

最后的「最后的要点」把讨论落到「思考模式按任务分级: 看不见的内心戏也按 Output 计费,单价还翻 4 倍」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。

标记为已学完 阅读进度会自动记录
← 上一篇下一篇 →

继续阅读

同一条线上的下一篇。

文章讨论

读到这里,留下一个判断。

把刚想明白的地方、还没想通的问题,留给下一位一起学习的人。

正在讨论 Agent 四大成本陷阱与熔断 Token 成本工程:让账算得过来
3条讨论文章讨论 · 与共学社区同步
在共学社区查看
AM
Asha Morgan内容编辑
观点实践记录

我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。

文章讨论7 有帮助
LH
Lin Harper独立开发者
观点观点

读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。

文章讨论5 有帮助
KM
Kiki Moore产品运营
问题问题

如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。

文章讨论4 有帮助