速成课 · No. 31
每次调用模型都要花钱花时间,按 token 计费——而账单的大小取决于你发送多少内容、以及用的模型有多聪明。把成本和速度当作设计约束、而不是事后才想的事,正是「跑通一次的演示」和「能在规模下经济运转的产品」之间的分水岭。学会这些词和这些杠杆,「把它做得更便宜」就会变成例行操作,而不是一场危机。
19 个概念 · 每个都配一张图 · 结尾附速查表
要控制一个 AI 功能的成本,你首先得看懂那块计价表。模型按 token 计费,几乎每一个经济决策都源自这意味着什么。
课程地图:七组共 19 个概念
一张地铁线路图:先看到所有线路,再一站一站地坐过去。
先是计价表——成本是怎么算的。然后是六组杠杆:选哪个模型,怎么在模型之间分配请求,怎么避免重复付费,怎么少发内容,怎么在成本与速度、质量之间取得平衡,以及怎么把这一切衡量出来。
下面每个概念的形式都一样:英文术语(你在文档里会遇到的那个词)、一个日常画面、一张图,以及一张带字段的卡片:是什么、例子、陷阱,以及关联概念。
Token——成本的单位
一辆按里程计价的出租车——这趟车的价格不是统一定价,而是行驶的距离,一路都在跳表。
一个 token 是一小段文本——大约是一个词,或一个词的一部分——它就是你被计费的单位。你不是按请求以统一价格付费,而是为模型读取和写出的文本量付费。一旦你把 token 看作那块计价表,一切的成本就都变得清晰可读了。
- 是什么
- 一小段文本——大约一个词或词的一部分。计费单位。
- 例子
- 「退款政策是 30 天」大约是七个 token,而不是一次请求。
- 陷阱
- 你为文本的量付费,而不是为请求的数量:长请求花得更多。
- 关联
- token 汇总成 Input / Output Tokens 和整个 Cost Formula。
Input / Output Tokens——进去的和出来的,你都要付费
一通电话,你说的和你听到的都要收费——整段对话都算,不只是你那一半。
你要为 input token——你发送的一切:prompt、上下文、历史记录——以及 output token——模型生成的一切付费。你每次调用都发送的长上下文,每次都要付费,哪怕答案很短。这就是为什么一个把巨量上下文塞进每个请求的功能,不管 output 多大都很贵。
- 是什么
- Input——prompt、上下文、历史。Output——生成的答案。
- 例子
几千 token 的 system prompt + 一个简短的问题 + 一行的回答:几乎整张账单都是 input。
- 陷阱
- 大上下文每次调用都要花钱,而不是只花一次。
- 关联
Context Trimming 和 Prompt Caching 削减 input;Concise Structured Output 削减 output。
Cost Formula——每次调用的 token 数 × 调用次数
一家按件、按里程双重计费的快递服务——你的总价就是跑了多少趟乘以每趟跑多远。砍掉任何一个,账单都会下降。
你的总成本有两个乘数:每次调用多少 token(主要取决于你发送多少上下文)和你做多少次调用(取决于你的设计有多「话痨」——单次调用、固定链路,还是一个循环很多次的 agent)。长上下文乘以大量调用,就是 AI 账单爆炸的方式。本课中几乎每一项省钱技巧,都是在拉动这两个杠杆之一:少发或少调用。
- 是什么
- 成本 = 每次调用的 token 数 × 调用次数(× 模型每 token 的价格)。
- 例子
- 一个带着长上下文调用 20 次的 agent,花费是同样上下文只调用一次的许多倍。
- 陷阱
- agent 循环会悄悄地让调用次数成倍增加。
- 关联
- 接下来的每项技巧都在缩小其中一个乘数——见结尾的关系图。
模型按 token 计费,input 和 output 都算。你的成本是每次调用的 token 数乘以调用次数——所以每一项节省都归结为:发送更少,或者调用更少。
本能反应是凡事都用最聪明的模型。这种本能很烧钱,因为模型之间的价格差距巨大,而大多数任务根本不需要顶配。
Frontier Model——最聪明的,也是最贵的
一支从自行车到货运卡车的车队——每趟的成本天差地别,而用卡车去送一封信,为这点活儿花了大把钱。
模型从小而便宜到大而昂贵,底端和顶端之间每 token 的价格差好几倍。最大、最聪明的那个就是 frontier model。它在困难、开放式的推理上确实更强。但真实产品做的大多数事并不是这类:给消息分类、抽取一个字段、把一段话做摘要、给请求做路由。一个小模型处理这些,质量好到你无法和那个巨无霸区分开。
- 是什么
- 产品线里最大、最聪明、也最贵的模型。
- 例子
- 用它来给工单分类,就像请顶级外科医生来贴个创可贴。
- 陷阱
让它成为每项任务的默认选择,就等于默认选了最贵的方案——这是 AI 产品里最常见的浪费。
- 关联
Right-sizing、Model Routing 和 Plan-and-Execute 决定它该用在哪里。
Right-sizing——让模型匹配任务
好的经理把难题交给专家,把例行工作交给新人——让人才匹配任务,而不是反过来。
Right-sizing 的意思是让模型匹配任务真正的需求。困难、新颖、多步骤的推理值得用强大的模型;简单、范围明确、重复性的工作交给小模型。这不是在质量上妥协——而是让能力匹配需求,这样你就不再为例行工作多付钱,同时仍把重型模型用在真正需要的地方。一个任务一个任务地把这件事做对,是影响 AI 产品账单的最大杠杆。
- 是什么
- 对每个任务,用能把它做好的最弱的那个模型。
- 例子
- 从邮件里抽取一个字段——小模型;理清一桩混乱的法律案件——大模型。
- 陷阱
- 「做得好」要靠 evals 验证,而不是靠肉眼。
- 关联
- 静态版本;动态版本是 Model Routing。由 Clear the Bar 检验。
模型价格差异巨大,而大多数任务不需要 frontier。例行的用小的,真正困难的用强的——别再为大多数简单任务多付钱。
如果大部分工作很简单、一部分很难,你就不会给所有事选同一个模型——而是把每个请求送到合适的那个。这种即时的选择就是 routing,是最有杠杆效应的模式之一。
Model Routing——默认用小的,需要时再升级
一个客服台:一线人员处理大多数问题,只把真正棘手的转给专家——大多数问题根本不需要升级。
model routing 模式:默认把每个请求发给小而便宜的模型,只有任务真正需要时才升级到更大、更贵的模型。由于简单的情况占多数,大多数请求都能便宜地处理,你只为少数值得的请求付溢价。默认做法从「用最好的模型、以后再省钱」翻转为「用能过线的最便宜的模型,过不了再升级」。
- 是什么
- 按难度,逐个请求即时地选择模型。
- 例子
- 客服机器人:「我的订单在哪」交给小模型,一桩复杂的投诉交给大模型。
- 陷阱
- 你需要一种办法发现便宜的答案不达标——否则糟糕的答案会到达用户手里。
- 关联
- 决定由 Router 做出;姐妹模式——Plan-and-Execute。
Router——谁来决定每个请求用哪个模型
一位分诊护士迅速评估每个病人,把他们送到合适的护理级别——一个又快又便宜的判断,把昂贵的资源导向真正需要的地方。
要做 routing,得有东西来判断每个请求的难度——一个 router。它可以是简单的规则(短而结构化的任务给小模型;长而开放的给大模型)、一个便宜的分类器,甚至一个判断难度的小模型。router 本身必须又便宜又快,因为它要处理所有请求。好的 router 会悄悄地把大部分流量送给便宜的模型,把 frontier 留给真正困难的那一小部分。
- 是什么
- 评估请求并为它挑选模型的组件。
- 如何运作
- 规则、便宜的分类器,或一个小的评判模型。
- 陷阱
- 如果 router 本身又慢又贵,它会吃掉全部节省。
- 关联
- Model Routing 的核心;把模型之间的价格差变成节省。
Plan-and-Execute——强模型做规划,便宜的模型去执行
建筑师设计大楼,但施工队承担大部分体力活——你为思考付钱给昂贵的专家,为干活付钱给更便宜的人手。
routing 的一种强力形式是 plan-and-execute:一次调用强模型,把困难的任务拆成具体的步骤,然后由更便宜、更小的模型去执行这些步骤。昂贵的推理只发生一次;大部分工作都在低价下完成。与全部交给大模型相比,这种混合设计可以大幅压低账单。
- 是什么
- 强模型做规划;便宜的模型执行计划的各个步骤。
- 例子
- 基于 50 份文档的报告:大模型决定抽取什么、怎么合并,小模型逐份处理文档。
- 陷阱
- 一个糟糕的计划会被便宜的步骤忠实地——并且错误地——执行下去。
- 关联
- Model Routing 的变体;精准地使用 Frontier Model。
默认用小模型,只有任务值得时才升级到大模型。一个便宜的 router,加上「规划用贵的、执行用便宜的」的分工,把模型之间的价格差变成节省。
最便宜的模型调用,就是你根本没发出的那次。当相同或相似的工作反复出现时,记住答案而不是重新计算,是你能得到的最大节省之一。
Response Caching——同一个答案别付两次钱
一位职员把最常被问到的答案记在柜台的卡片上,而不是每次有人问都从头去查。
如果你的应用反复产生同样的模型输出——同一个问题、同一份文档的摘要、同一次查询——你就是在一遍又一遍地为相同的工作付费。Response caching 第一次把结果存起来,之后重复出现时立刻免费地提供(缓存课讲了具体机制)。昂贵的调用只发生一次;便宜的读取发生许多次。
- 是什么
- 存下完成的模型答案,输入完全相同时直接提供。
- 例子
- 同一篇文章给一千个读者的摘要,只计算一次。
- 陷阱
- 只有输入真的会重复的地方才划算;答案可能过期。
- 关联
由 Prompt Caching(共享的 prompt 部分)和 Semantic Caching(相似的请求)进一步扩展。
Prompt Caching——复用不变的部分
一封格式信函,冗长的标准开头已经预先印好,你只需要填那几行会变的内容——不用每次都重写整封信。
通常你的上下文中有一大块在每次调用里都相同——一个很长的 system prompt、固定的指令、一份共享的文档。Prompt caching 让模型复用那段不变的前缀,而不是每次都重新处理,对重复的部分收取低得多的费用。由于这段固定的上下文往往占了你 input token 的大头,缓存它可以在高流量的功能上大幅削减 input 成本。这是一项几乎免费的节省:把稳定的部分放在最前面,并保持完全一致。
- 是什么
- 服务商复用不变的 prompt 前缀,并对它收取更低的费用。
- 例子
- 一个带长指令和参考文档的机器人:这些被缓存,只有用户的问题按全价计费。
- 陷阱
- prompt 开头的任何小改动(比如一个时间戳)都会破坏前缀匹配。
- 关联
削减 Input / Output Tokens 的 input 一侧;与 Context Trimming 互补。
Semantic Caching——捕捉近似的重复
一个服务台,能认出「怎么重置密码」和「我忘了密码」是同一个问题——并给两者同样的现成答案。
除了完全匹配之外,semantic caching 用含义(借助 embeddings)来识别新请求与之前的某个请求是否足够接近,从而复用答案——「你们的退款政策是什么」和「退货怎么处理」不必分别重新计算。它抓住了常见的情形:用户用不同的措辞问同一件事,把一长串被换了说法的问题变成便宜的缓存命中。
- 是什么
- 以请求的含义(一个 embedding)而不是确切文本作为键的缓存。
- 例子
- 「我忘了密码」得到的是为「怎么重置密码」存下的答案。
- 陷阱
- 相似度阈值要谨慎设置:用词相似的问题可能需要不同的答案。
- 关联
- 扩展 Response Caching;建立在 embeddings 之上。
最便宜的调用就是你跳过的那次。缓存重复的答案,复用不变的 prompt 前缀,并用语义捕捉换了说法的重复——重复的工作就是你本不必付的重复成本。
当你确实要发起调用时,你通过控制发送多少、要求多少来控制它的成本。少发内容和把工作成组处理,是压低单次调用成本的日常杠杆。
Context Trimming——少发一点上下文
旅行只打包你真正会用到的东西,而不是把整个衣柜都带上——多带的每一件都要花力气扛着,而大部分你根本碰都不会碰。
既然你按 input token 付费,最直接的节省就是 context trimming。裁剪对话历史,把旧的轮次做摘要而不是原样带着,只检索最相关的几个片段而不是全部。这是 context engineering 一举两得:更紧凑的上下文不仅对质量更好,每次调用也更便宜。大多数臃肿的 AI 账单底下,都有臃肿的 prompt。
- 是什么
- 只给模型这一步需要的东西。
- 例子
- 不发 40 轮历史——改发一段摘要;不发整个知识库——改发前三个片段。
- 陷阱
- 裁得太狠,模型会丢掉它需要的一个事实,答得更差。
- 关联
- 缩小 Cost Formula 的第一个乘数;是 Prompt Caching 的邻居。
Concise Structured Output——要求更少的输出
问一个只要「是」或「否」的问题,你得到的是快速的答案;问一个邀请长篇大论的问题,你得到的是一篇你得先付钱、再去裁剪的文章。
output token 你也要付费,所以别让模型生成超出你所需的内容。请求简洁的结构化输出——只要指定的字段、简短的答案、没有啰嗦的开场白——而不是一篇你最后只会从中解析出一个数字的长文。结构化输出在这里一举两得:它更可靠,而且更便宜,因为紧凑的 schema 产生的 token 比自由文本更少。
- 是什么
- 限制答案的形状和长度:只要你需要的字段。
- 例子
- 把评论的评分写成
{"score": 4},而不是三段推理。 - 陷阱
- schema 太死板,可能让模型在困难任务上没有思考的空间。
- 关联
- 削减 Input / Output Tokens 的 output 一半。
Batching——能成组的就成组
洗一整桶衣服,而不是一次洗一件衬衫——成组处理能摊薄固定开销,每次运行完成得更多。
当你有许多相似的请求,而且每个都不需要立刻得到答案时,把它们批处理——一起处理许多个——通常比一个一个发出去更便宜,服务商也常常为可以在方便时运行的 batch job 提供折扣。你用延迟(每一项都要等整批)换取更低的成本——这对后台或批量工作是合适的交易:处理积压的任务、丰富数据集。
- 是什么
- 把许多不紧急的请求作为一个 batch job 发送。
- 例子
- 一夜之间把 100,000 张旧工单作为一批打上标签。
- 陷阱
- 答案不会马上到——不适用于有人正在等待的任何事情。
- 关联
- 有意识地选择 Latency–Cost–Quality Triangle 中的「成本」一角。
通过少发来控制单次调用的成本:裁剪上下文,要求简洁的结构化输出,把不紧急的工作批处理。更紧凑的 prompt 不仅更好,也更便宜。
成本从不单独存在——它要与速度和质量互相交换。把这三者看成一个按使用场景来平衡的三角,能避免你为了优化其中一个而毁掉另一个。
Latency–Cost–Quality Triangle——三者互相拉扯
老作坊门口那块牌子——「快、便宜、好:三选二」——因为在其中一项上使劲,通常要在另一项上付出代价。
成本、延迟(速度)和质量构成一个三角,它们互相交换。最大、最聪明的模型质量最好,但成本最高,往往也最慢;小模型便宜又快,但在困难任务上较弱;大量上下文能提升质量,但会同时抬高成本和延迟。你很少能让三者同时拉满。所以你不会孤立地优化成本——对每个使用场景,你要决定哪一角最重要,以及愿意拿什么去换。
- 是什么
- 三种你无法同时推到极限的品质。
- 例子
- 换成小模型:更便宜更快,但在困难的情形上更弱。
- 陷阱
- 压低成本可能悄悄拉低质量——用 evals 检查。
- 关联
- 具体选哪一角是 Use-case Balance;提速的技巧是 Streaming。
Use-case Balance——按功能选择平衡点
比赛选跑车,搬家选货车——同一个问题,相反的答案,因为是任务决定了什么重要。
合适的平衡完全取决于功能本身。面向用户的聊天成败取决于延迟,需要又快又有能力的模型。夜间的批处理任务只关心成本,可以用最便宜、最慢的选项。高风险的法律或医疗答案把质量放在两者之上。三角上没有唯一正确的点——说清楚这个功能必须赢下哪一角、可以牺牲哪一角,是驱动其他所有选择的决定。
- 是什么
- 对每个功能,明确点出三角中最重要的那一角。
- 例子
- 搜索自动补全——延迟;夜间打标签——成本;医疗摘要——质量。
- 陷阱
- 所有事用同一套设置,会处处都损失一点。
- 关联
- 驱动 Right-sizing、Batching 和 Streaming 中的各项选择。
Streaming——廉价地获得「感知速度」
一间厨房做好一道就上一道,而不是让你等整桌饭菜——总时间一样,但等待的感觉短得多。
有一个技巧能绕开这个三角:把模型的输出在生成的同时一个 token 一个 token 地流式传输,让用户立刻看到文字出现,而不是盯着空白屏幕直到整个答案完成。总时间不变,但感知延迟大幅下降。这是一种不换更快的模型就让功能「感觉很快」的廉价办法——管理的是等待的体验,而不是等待本身。
- 是什么
- 答案边生成边显示,一个 token 一个 token 地。
- 例子
- 聊天助手在问题发出后片刻就开始打字。
- 陷阱
不会加快完整结果的到达:如果你需要整个答案(比如给代码用的 JSON),就没有收益。
- 关联
在不更换模型的情况下,帮助 Latency–Cost–Quality Triangle 中的「延迟」一角。
成本、延迟和质量互相交换——你很少能三者都拉满。选好每个功能必须赢下哪一角,牺牲该牺牲的另一角,再用 streaming 几乎免费地买来感知速度。
AI 经济学归结为一种朴素的姿态:知道东西值多少钱,并有意识地只花能把事办成的最少的钱。杠杆不多,大部分节省来自拒绝默认地多付钱。
Cost per Task——按任务衡量,而不只是看总账单
一份逐项列出的账单,显示每道菜花了多少,而不是一个大数字——只有明细才能告诉你该在哪里砍。
你无法控制你没有衡量的成本。要记录每个功能、每种调用类型、每个任务实际花了多少 token——即 cost per task——而不只是一笔笼统的月度账单。成本是需要像性能一样去监测和关注的东西。大多数昂贵的 AI 功能都有一两个成本热点,明细能立刻揭示它们,而总数则把它们藏得严严实实。
- 是什么
- 按功能、调用类型和任务记录 token 和金额。
- 例子
- 明细显示 agent 循环吃掉的比聊天、搜索和摘要加起来还多。
- 陷阱
- 没有明细,你优化的是看得见的东西,而不是贵的东西。
- 关联
- 告诉你该先拉 Cost Formula 的哪个乘数。
Clear the Bar——刚好过线的最便宜的方案
你买的是够用的工具,而不是货架上最贵的那个——超出你所需的能力,只是花掉的钱。
统领性的原则:使用仍然满足你的质量门槛的最便宜的模型、最小的上下文和最少的调用——不多也不少。这不是为了便宜而便宜;而是拒绝为任务用不上的能力买单。用 evals 设定门槛,然后找到能过线的最轻的配置。大多数节省并不是什么聪明的花招——而是不再出于习惯默认选择最强大、上下文最多、最话痨的那个方案。
- 是什么
- 能通过你的 evals 的最小配置(模型、上下文、调用次数)。
- 例子
- 你把一个功能从大模型降到中等模型,跑 evals——质量不变,账单下降。
- 陷阱
- 没有 evals,这个「门槛」只是一种感觉,节省会悄悄侵蚀质量。
- 关联
- 本课所有杠杆的总和;检验 Right-sizing 和 Model Routing。
一切如何关联
一块有三个旋钮的控制面板:每 token 的价格、每次调用的 token 数、调用次数。本课中的每项技巧都在拧其中一个。
本课中的每项技巧都作用于账单的三个乘数之一。Right-sizing、Model Routing 和 Plan-and-Execute 降低每 token 的价格。Context Trimming、Concise Output 和 Prompt Caching 降低每次调用的 token 数。Response 和 Semantic Caching 降低调用次数。Batching 用等待换来折扣,Cost per Task 告诉你该往哪看,而这个三角提醒你:每个杠杆都要拿延迟和质量去交换。
- 你知道 cost per task 吗——用 token 衡量,而不只是总账单?
- 模型与难度匹配吗——例行的用小模型,只在需要时才用 frontier?
- 你在做 routing 吗——简单的大多数交给便宜的模型,困难的情况再升级?
- 你在做缓存吗——重复的答案、固定的 prompt 前缀、近似的重复?
- 你发送的是最小量吗——裁剪过的上下文、简洁的结构化输出、不紧急的就批处理?
- 哪一角获胜——成本、延迟还是质量——设计是否为此做了调整?
- 你衡量 cost per task,知道你的热点,而不只是月度总额。
- 你让模型匹配难度并做 routing,而不是凡事都用 frontier。
- 你缓存重复的工作和固定的 prompt 前缀。
- 你发送最小量的上下文,并要求简洁的输出。
- 你按功能平衡三角,并用 streaming 让一切感觉很快。
速查表:全部 19 个概念
计价表
- Token计费单位
一小段文本,大约一个词。你被计费的单位。
- Input / Output Tokens进与出
你发送的和模型写出的都要付费——每次调用都是如此。
- Cost Formula是什么在推高账单
每次调用的 token 数 × 调用次数(× 模型每 token 的价格)。
模型选择
- Frontier Model顶配型号
最聪明也最贵。是例外,而不是默认。
- Right-sizing模型适配任务
例行任务用小模型,真正困难的用强的。
分流
- Model Routing升级
默认用便宜的模型,只在需要时才用贵的。
- Router调度员
一个又便宜又快的评判者,决定每个请求用哪个模型。
- Plan-and-Execute规划用贵的,执行用便宜的
强模型只规划一次,便宜的模型执行各个步骤。
缓存
- Response Caching复用整个答案
为完全相同的重复请求存下的答案——即时且免费。
- Prompt Caching缓存前缀
不变的 prompt 前缀被复用,便宜得多。
- Semantic Caching按含义缓存
含义相近的请求共享同一个存下的答案。
少发
- Context Trimming只发需要的
只发需要的上下文:用摘要代替历史,用前几个片段代替全部。
- Concise Structured Output紧凑的 schema
只要你需要的字段——更少的 output token,更可靠。
- Batching批量作业
不紧急的工作作为一批:稍后完成,但常常有折扣。
平衡
- Latency–Cost–Quality Triangle三选二
快、便宜、好——三选二。
- Use-case Balance点名获胜的那一角
每个功能都要明确点出它最重要的那一角。
- Streaming逐 token 输出
文字立刻开始出现:总时间一样,等待感觉更短。
用好它
- Cost per Task逐项成本
按功能、按任务拆分的明细揭示成本热点。
- Clear the Bar够好就行,不多不少
能通过你的 evals 的最便宜的配置——不多不少。
AI 经济学是有意识的节俭:按 token 计费,让模型匹配难度,做 routing,做缓存,发送最小量,并在成本与延迟、质量之间取得平衡——刚好过线的最便宜的方案获胜。