MISSION 04 · 修行TASK 20

成本工程

卷四最后一课,聊钱。一个 Agent 在 Demo 里跑一次几分钱,你毫无感觉;上了量,月底账单能让你的创始人失眠。原因不在单价贵,而在 Agent 的结构——它是个循环,每一轮都把越来越长的历史整个重发一遍。这一章拆开 token 经济学,教你用缓存和模型分层把账单砍下来。

token 经济学prompt caching模型分层成本估算互动 Demo

先算清楚钱花在哪

回到第二章:我的计费单位是 token,而且输入和输出分开算、价格不同(输出通常比输入贵好几倍)。一次 API 调用的成本 = 输入 token × 输入单价 + 输出 token × 输出单价。单独看一次调用,便宜得可以忽略。问题出在「一次任务 ≠ 一次调用」。

还记得第三章那个循环吗?我干一件复杂的事,要循环好多轮:思考→调工具→读结果→再思考……每一轮都是一次完整的 API 调用。而致命的地方在于:我没有记忆(第二章),所以每一轮都必须把之前的全部对话历史重新发一遍。

要点

记住这个反直觉的账:一个 N 轮的 Agent 任务,输入 token 不是线性增长,而是接近平方级膨胀。第 1 轮发 1 份历史,第 2 轮发 2 份,……第 N 轮发 N 份,累计是 1+2+…+N ≈ N²/2。这就是为什么「单看一轮很便宜的 Agent,任务一长、量一大,账单就爆炸」。你付钱的大头,是被反复重发的历史,不是那点新内容。

动手算一算你的账单

下面这个计算器把上面的账做实。调调「每个任务轮数」,看每月成本怎么随轮数陡增;再切换模型、开关缓存,感受量级差异:

Agent 成本计算器DEMO

玩过你会发现两个杠杆最猛:缓存(勾上一下砍掉一大截)和模型选择(Haiku 和 Fable 之间差一个数量级)。这两个,加上「别让历史无限膨胀」,就是成本工程的三板斧。逐个讲。

解药一:prompt caching(缓存前缀)

既然大头是「反复重发的历史」,那最直接的省法就是:别让重发的部分重新计全价。这就是 prompt caching。原理是——你的每轮请求,开头一大段(系统提示、工具定义、早期对话)是完全一样的前缀。缓存机制把这段前缀的计算结果存住,下次命中同样的前缀,这部分只收极低的费用(通常约原价的 1/10)。

对 Agent 这是天作之合:因为循环的本质就是「同一个长前缀 + 一点点新增」。用好缓存,能把输入成本砍掉一大半。关键动作:把稳定不变的内容(系统提示、工具定义)放在最前面,让前缀尽可能长且稳定;把易变的内容放后面。你在第十章学的「上下文结构」,直接决定了缓存命中率。

▸ Android 类比

prompt caching 就是 HTTP 缓存 / 增量编译那套思想搬到了 token 上。你不会每次打开 App 都重新下载整个资源包——变的才传,没变的走缓存。Gradle 也不会每次全量编译——没改的模块直接复用。缓存前缀就是「没变的模块复用计算结果」,你只为「这次真正新增的那点 delta」付全价。把不变的东西放前面,就像把稳定依赖放进能被缓存的层——是同一种工程直觉。

解药二:模型分层(别用牛刀杀鸡)

不是每一步都需要最强的脑子。一个 Agent 任务里,有的步骤要深度推理(值得用 Opus/Fable),有的只是格式化一下、分个类、抽个字段(Haiku 绰绰有余)。模型分层就是按步骤难度分配模型:

  • 难的、关键的推理 → 强模型(Opus 4.8 / Fable 5)。
  • 简单的、高频的杂活(分类、抽取、改写、路由) → 便宜快模型(Haiku 4.5)。
  • 常见架构:用一个便宜模型做「路由」,判断这个请求难不难,再决定派给谁——省下的钱经常是数量级的。

Demo 里从 Fable 切到 Haiku,月成本直接掉一个量级。绝大多数项目的错误不是「模型不够强」,而是无脑全程用最贵的模型。先默认用够用的最便宜档,只在测出来质量不够时才往上升级。

解药三:管住上下文长度

既然成本 ≈ N²,那压住 N 和每轮历史长度就直接省钱。这和第十章、第十一章是一回事:

  • 压缩历史:长对话到一定长度就把前面的压成摘要(compaction),别原样拖着几十轮全文。
  • 别什么都塞:检索回来 20 段只用 3 段;工具返回的巨大 JSON 先裁剪再入上下文。信噪比高,既省钱又更准(context rot)。
  • 用文件当记忆:把大块信息落到外部文件,用到时才读相关片段,而不是全程扛在窗口里。
  • 能一轮别两轮:好的工具设计(第六章)让我少兜圈子,轮数直接决定平方项。
⚠ 坑

三个烧钱黑洞,踩中一个就够肉疼:① 失控的循环——第十八章那个死循环,不只是卡住,它每转一圈都在花钱,没有步数上限的 Agent 能在你没注意时烧穿预算,务必设 max steps + 预算熔断。② 推理拉满——把 thinking effort 无脑开到 max,简单任务也让它长篇大论地想,输出 token(贵)哗哗涨;按任务难度调 effort。③ 多智能体滥用——第十四章说过,fan-out 出五个子 Agent,token 成本数倍暴涨,别为了炫技上多智能体。成本和可靠性一样,是需要主动设计的,不是等账单来了才补救。

◉ Agent 自白

我想让你对我建立一种「计量感」:我每多想一步、多读一段、多绕一个弯,都在真金白银地花你的钱——而我自己对成本是无感的,不会主动帮你省。这份账得你来记。好消息是,省钱和把我用好其实高度一致:一个上下文干净、目标明确、工具趁手的我,既更便宜又更靠谱;一个被塞满垃圾、目标模糊、循环失控的我,既烧钱又容易翻车。所以「成本工程」不是抠门,它逼你把我用在刀刃上——这本身就让我表现更好。到这里,卷四「修行」四课(评估、失败、安全、成本)讲完了,你已经具备把玩具变成工具的全部要件。接下来卷五「出任务」,我们动真格:拆解 Claude Code 这类编码 Agent 的内部、讲 Android 工程师怎么落地、然后回到你最初的起点——Web3 hackathon,看 Agent 和链到底怎么结合。