我前几天参加了一场面试,岗位是AI应用开发。前面聊得还算顺畅,到了技术环节,面试官突然瞥了一眼我简历上写的个人项目,冷不丁来了一句:“你一天烧几十个token也好意思面AI应用开发?”
说实话,那一瞬间我脑子是有点空的。不是因为被问住了,而是这个问题本身太有“杀伤力”了——它既像在质疑项目含金量,又像在试探我对成本和效率的态度。我定了定神,回了一句:“我烧的不是token,是我的热情。”
面试官愣了一下,然后笑了:“明天二面。”
这句回答当然有抖机灵的成分,但回过头细想,这场对话其实戳中了AI应用开发这个岗位最核心的命题:在模型能力严重同质化的今天,一个合格的AI应用开发者,到底靠什么拉开差距?我的答案是:对token成本的掌控力,以及对模型行为的理解深度。这篇文章就把我这段时间做AI应用开发攒下的经验,结合这次面试的复盘,一次性聊透。
1. 面试官问“token消耗”,到底在问什么
先把面试题本身拆开看。面试官没有问“你会不会调API”,没有问“你用过哪些模型”,而是精准地拿“token消耗”来试我。这个问题表面上在聊成本,实际上背后藏着三层考察意图。
第一层,考察你是否真的做过端到端的AI应用。只跑过几个Demo的人,对token通常是没有概念的,因为Demo跑几次就扔了,根本不会去看账单。真正上线过应用的人,一定被token账单教育过,会在意每一次请求的输入输出长度,会在意上下文窗口被撑爆的瞬间。
第二层,考察你对模型边界和成本结构的理解。AI应用开发和传统软件开发最大的差别在于,你的每一行代码都在消费外部资源,而这个资源的单价并不透明。不同模型的定价可以相差几十倍,同一模型在不同上下文长度下的耗时也不一样,你是否能基于成本模型做技术选型,这决定了你做的应用能不能活过测试期。
第三层,考察你的人格特质。面试官说“一天烧几十个token”,其实是在用一个略带挑衅的方式来观察你的反应。技术不过硬的人在受到质疑时容易慌乱,要么急着辩解,要么开始自我怀疑;而有底气的人会把问题接住,把它变成一个展示自己技术判断力的机会。我那句“烧的是热情”之所以有效,是因为它先承认了成本问题,同时暗戳戳表明“我愿意为正确的事情投入资源”。
关于这一点,多说一句。后来二面的时候面试官跟我坦白,他说前后面了十几个候选人,有一半人连token成本怎么估算都答不上来,还有几个一听这个问题就开始红脸辩解,搞得场面很僵。他说他要的不是一个能把API文档背得滚瓜烂熟的人,而是一个真正在开发过程中围绕成本、效果、稳定性做过取舍的人。
所以,如果你正准备面AI应用开发岗,记住这句话:token消耗是表象,成本意识和系统思维才是考察的实质。
2. token是什么,以及为什么必须对它精打细算
想真正回答好这种问题,得先把token这个底层概念吃透。token是模型处理文本的最小单元,它可以是一个单词的一部分、一个汉字、一个标点,或者一段代码片段。不同模型的分词器不一样,同样一段文字在不同模型里的token数也各不相同。
有个粗略但好用的估算方法:英文文本平均1个token约等于4个字符,中文文本平均1个汉字约等于1.5到2个token。这句话听起来简单,实际算账的时候会发现水深得很。
我用一个真实例子来说明。给某公司做的那个客服问答系统,系统每天处理大约5000次会话,每次会话平均包含三轮问答。不做任何优化的时候,每次会话要消耗的token构成大致是:
- 系统提示词(System Prompt):1200 token,固定消耗,我在里面写了详细的角色设定、回答规范、格式要求
- 历史对话记录:三轮问答,每轮约400 token,总计1200 token
- 用户当前输入:平均350 token
- 模型回复:平均450 token
这样粗算下来,单次会话大约消耗3200 token。如果按模型的输入输出分开计价,假设输入单价是每百万token约14元,输出单价约28元,那么单次会话成本大概是:
输入部分:(1200 + 1200 + 350) / 1000000 × 14 ≈ 0.0385元 输出部分:450 / 1000000 × 28 ≈ 0.0126元 单次会话总成本约0.051元,一天5000次会话就是大约255元,一个月光这一项就要烧掉七千多块。这还没有算增量部署、模型微调、失败的请求重试。
很多人在开发阶段感受不到这种压力,是因为测试期间的用户量小,一个月也就几千次请求,咋看都便宜。但一旦应用真实上线,用户量是百万级的,token成本瞬间就从小数目变成了能决定项目生死的大问题。
我自己在项目上线初期就踩过这个坑。当时没有预估成本,结果上线第二周,模型账单直接干到整个项目预算的40%,我这才意识到没有成本意识的技术方案就是在给公司烧钱。
所以,现在每接一个项目,我都会先算一笔账:目标用户量是多少,交互轮次大概多少,单轮会不会生成长文本,这决定了我在方案里怎么设计缓存、怎么压缩上下文、要不要做路由分流。这些细节直接决定一个AI应用是赚钱还是赔钱。
3. 从“乱烧”到“克制”:我的token优化实战方法论
从被成本教育过之后,我整理了一套自己的token优化方法,几乎每个AI应用项目都用得上。这套方法的核心不是单纯的“少用token”,而是把每一分token都用在能让模型表现更好的地方。
3.1 能做预压缩的,不要带着全量历史跑
上下文窗口是AI应用最宝贵的资源,也是最容易被浪费的资源。很多初涉AI开发的人习惯把全部历史记录一股脑塞给模型,看起来“上下文丰富”,实际上模型在超长上下文里不仅推理速度变慢,还特别容易“迷失”。
我现在的做法是三级历史策略。第一级,最近三轮对话完整保留,这是模型回答当前问题的核心依据。第二级,更早的对话做摘要,用一个轻量模型或者规则脚本,把每轮对话压缩成一句话主题。第三级,超出窗口承载能力的内容直接丢弃,或者归档到外部存储里,需要时再按关键词检索出来。
这个做法最直接的收益是:上下文长度从平均3000 token降到了1200左右,模型响应时间减少了将近一半,账单费用直接降了六成。更关键的是,回答质量反而提高了,因为模型不再被冗余信息干扰,能更精准地聚焦在与当前问题最相关的信息上。
3.2 缓存那些“永远不变”的内容
系统提示词(System Prompt)和静态知识库内容,是token消耗里面最“冤大头”的部分。每次请求都重复带相同的系统提示词,就像每次写信都把自我介绍抄一遍,浪费却不产生任何新价值。
目前几个主流模型厂商都提供上下文缓存能力。简单说,就是如果你连续传相同的前缀内容,这部分token会以极低的价格计费,有的甚至直接打一折。我实际验证过,同样的系统提示词加上一份说明文档,一旦启用缓存,这部分费用从每小时若干元的水平直接降了一个量级。
关键是这个缓存机制需要你主动开启,并在代码层面保持前缀的一致性。我见过不少项目,代码里每个请求的提示词都动态拼接,前缀看着相似实际每次都有细微变化,结果缓存根本命中不了。所以如果你发现自己的token账单没降,先检查一下前缀是不是真的“稳定”。
3.3 用结构化输出,减少无效生成
在跟模型交互时,一个容易被忽视的token浪费场景是“模型输出了一堆屁话”。比如你问它一个简单问题,它非要先用一大段文字铺垫背景,再给结论,最后再加一段注意事项。这在开放式闲聊里没问题,但在生产级应用里就是纯成本。
我的方案是强制使用结构化输出。现在主流模型都支持JSON Schema约束输出,让模型只返回一个符合约定的JSON对象,不要任何多余文字。我做过对比测试,同样一个查询任务,开放输出时回复经常在1000 token左右,加了结构化约束后直接压到不足200 token,而且解析和提取信息的代码逻辑也更稳定。
这里有个小技巧:结构化约束模板里也可以顺便带上目标格式示例。给模型一个完整示例,往往比写十句描述性规定更有效。模型是基于预测的,给它一个“标准答案”长什么样,它就更容易照着来。
3.4 该省的地方省,该花的地方绝不能抠
说了这么多省token的策略,有一点我要停下来专门强调:token优化绝对不等于无脑压缩。如果你的上下文压缩得太多,模型缺失了必要的背景信息,回答质量一定会下降,用户感知到的是“这AI怎么变笨了”,这种损失远大于省下的那点钱。
以那个客服系统为例,用户问售后政策时,我需要把完整的政策原文发给模型,一字不落,绝不能压缩成摘要。因为政策条文是交付给用户的法律事实,摘要可能导致模型给出含糊甚至错误的回答。而用户只是随口问一句“你们有什么产品”,这种问题就不值得把整个产品手册都塞进上下文。
我的一个经验法则是:让模型做精确生成时,输入信息要还原原始细节;让模型做归纳总结时,输入信息可以大胆压缩。这个“还原与压缩并存”的思路,也是我后来面试二面时重点讲的案例。
4. 不只是省钱:Prompt设计与上下文管理的进阶细节
如果把token优化比作“节流”,那么Prompt设计就是在同等的token预算下“提质”。这两个东西是强耦合的——高质量的Prompt能让每一条记录在输入里的信息发挥更大价值,也能让模型输出更稳定,减少因为回答不对而被迫重试的额外消耗。
4.1 少样本示例比规则描述更管用
在写提示词的时候,我发现一个规律:给模型几条“范例”,效果远好于给它写十条“须遵守”。原因是模型本身是语言模型,它对“模式”比对“命令”更敏感。每给一条高质量示例,就相当于帮模型锁定了一种输出模式。
比如我想让模型做用户评论分类,分类维度包括投诉、建议、咨询、无关四类。最初的提示词写得很规范,加了大量“请务必按照以下规则”的描述,效果一般,划分边界模糊。后来我把方案改成两三个完整的“输入样例+理想输出样例”,模型的表现立刻不一样,几乎没有再出现分类不明确的情况。
这个写法的额外好处是:少样本示例还能顺便控制输出格式。只要示例里展示的是精炼、直接的回答风格,模型大概率会照着这个风格走。输出长度自然就短了,token消耗跟着就下来了。
4.2 温度参数也可以帮你们省钱
温度(Temperature)这个参数经常被忽略,但它在成本和效果之间做平衡时挺好用的。温度调得越高,模型的输出越不确定,越容易写出多余的话甚至跑偏;温度调低,输出就更稳定,更贴近既有模式。
如果你的应用是任务型的,比如信息抽提、总结、分类,温度可以大胆地往0到0.3这个区间调。我自己实测,这类任务在低温度下,答案准确率更高,输出也更精简。而如果你做的是文案创作、头脑风暴这类开放任务,才需要把温度调到0.7以上,让回答显得更自然更多样。
从我接手过的几个项目看,大部分人的默认设置都是直接用厂商给的默认值,这个默认值通常偏均衡,并不适合每一个应用场景。养成一个习惯:每次接新项目,先花时间把温度、Top P这些参数跑一遍对比,选择最适合你这个应用场景的。有些参数组合能让单次成本下降三分之一,而且效果更好,属于典型的“便宜有好货”。
4.3 上下文管理:避免“记忆幻觉”
上下文管理是AI应用开发里最微妙、也最容易被忽视的部分。很多人以为把更多历史信息给模型,模型会更“懂你”,但真实情况是,模型不会像人一样区分“重要信息”和“边角料”。上下文里塞的东西越多,模型越容易在回答问题的时候,捡了芝麻丢了西瓜,甚至回忆起不存在的细节,一本正经地编造。
在客服系统里我们遇到过这样的事:用户前面问了一句跟订单无关的闲话,模型在后面的回答中居然把这句话当成了背景,产生了一个完全错误的回答。那之后我把历史上下文按“事实型内容”和“闲聊型内容”做了分离,闲聊内容不参与后续所有决策,问题马上就解决了。
我的做法是把上下文划分成四个槽位:用户基础信息(静态)、当前会话目标(动态)、核心业务规则(静态)、相关历史结论(摘要型)。每个槽位有独立的刷新和清理策略,不会因为一次对话过长就把所有槽位全部塞满。
这套上下文槽位管理方案,在我参加的几次技术分享中讲出来时,很多人都说“原来还能这样分”。但其实就是回到一个朴素的原则:把模型的注意力放在它该关注的地方,而不是把整个对话记录都无脑丢给它。这算是所有AI应用开发里值得反复打磨的地方。
5. 模型选型与评估:烧token也要烧得明白
做AI应用开发,避不开的一个环节是选模型。市面上的模型五花八门,有人选择最强大最贵的旗舰模型,有人选择最便宜的小参数模型。我的经验是,选模型不能靠名气,也不要靠直觉,一定要靠数据,而这个数据就是你自己真实场景下的评测结果。
5.1 先想清楚场景到底需不需要“最强模型”
这里有一个我在项目里反复验证过的事实:大部分AI应用场景,用不上目前能力最强的旗舰模型。什么意思?如果你的任务是情感分析、实体抽取、关键词提取、简单客服问答,一个中等大小的模型完全够用,旗舰模型多出来的那部分“聪明”用不上,但价格可能是十倍以上。
反过来,如果你的应用是复杂的多步推理、长文深度理解、代码生成,那么旗舰模型的能力才值得你掏钱。这里面的判断标准很简单:你的任务对“推理深度”的要求有多高。高就花大价钱,低就果断用小模型。
有一次我做了一个知识库问答系统,为了保险起见,最开始所有请求都走能力最强的旗舰模型。实测平均每轮对话40万token的单价比普通模型贵得多,但准确率并没有显著提升,反而因为超长上下文让响应速度变慢。后来我把任务分流:简单查询走中小模型,复杂推理才走最强模型,总成本立马降了一半还多,用户体验还更好了。
所以当你面对模型选型的时候,不要问“哪个模型最强”,要问“哪个模型在我的场景下,能够在成本可接受的范围内给出合格的结果”。这个思路用到面试沟通里,也能帮你避开“唯参数论”的陷阱,毕竟模型能力和应用效果之间从来不能画等号。
5.2 用小而准的评测集来“定档”
既然要做基于数据的选型,就得有一个好用的评测集。很多人做选型的时候拿一两条测试用例试试就跑路了,这完全不靠谱。你自己问一条样例可能都不能覆盖真实场景的十分之一,选出来的模型自然没有说服力。
我的方法是:花半天时间构建一个20到50条输入样例的评测集。这几十条样例要尽可能覆盖应用的全部关键场景,包括正常问题、边界情况、无标准答案的问题、以及恶意或危险输入。我在每个样例上提前标注好“理想答案”和“可接受答案”,评测模型时按两个维度打分:答案准确率和格式符合度。
这个小评测集带来的直接收益是:我可以在一小时之内,把四五个候选模型的“性价比”横向对比出来。比一张嘴争论哪个模型好靠谱多了。而且这套评测集在后续产品迭代中也持续复用,新模型一发布,跑一遍就知道值不值得替换。
我在一个模拟项目中把评测集跑完,发现某中小模型在90%的样例上表现接近旗舰模型,只有10%的高难度推理样例有差距。但它的价格是旗舰模型的十分之一不到。那我还有什么好犹豫的?肯定用它跑主要流量,旗舰模型只做兜底。
5.3 成本监控和配额预警是AI应用开发的“仪表盘”
选完模型、做完优化,成本控制还没有结束。生产环境里的AI应用,时刻都在产生token消耗,如果你没有一个监控和预警机制,成本失控往往是悄无声息的。
我现在做每一个项目,都会在日志系统里记录每次请求的输入token数、输出token数、模型名称、任务类型、耗时这些核心指标。然后做一张简单的汇总报表,按天查看总消耗、平均单次消耗、按任务类型的消耗分布。
用这些数据,我能非常快地发现异常情况。比如某天某个任务的token消耗突然飙升,我马上就能定位到是上下文缓存失效了,还是有人改了提示词导致前缀不匹配。又比如某个用户的行为模式特别奇怪,频繁触发长上下文调用,我就能针对性地做熔断或者额外限流。
这块很多人不太在乎,但实际上它是决定AI应用能否长期健康运行的关键。你想想,如果连你都不知道你的应用每天烧多少钱、烧在哪里,你怎么向老板汇报?怎么跟客户谈利润率?这个“成本仪表盘”意识,是我认为的AI应用开发者和单纯算法工程师之间最大的分界线。
6. 面试中如何聊透“token消耗”这个话题
回到开头那次面试。面试官问完了token消耗,紧接着又追问了几个问题。我把我认为有价值的问答复盘一下,你会发现,把token这个话题聊透,比背一百道八股文有用得多。
他问的第一个问题是:“你说你优化了token成本,那你怎么证明你的优化有效?”这个问题其实在考察你有没有体系化的评估手段。我的回答是拿出一套对比数据:优化前的平均每次会话消耗,优化后的对应值,以及准确率的对比情况。我特别强调了一点,优化必须在效果不降的前提下才有意义,所以我把准确率这个指标摆在成本前面。这个回答让面试官明显点头了。
他问的第二个问题是:“如果一个新模型的价格只有原来的一半,但推理准确率下降了5%,你会怎么选?”这个问题很经典,本质是考察你的决策框架。我说我会先看这5%发生什么场景里。如果这5%的准确率损失全发生在极端复杂的推理任务里,而这类任务只占流量的5%,我可能用路由分流的方式,让简单任务用新模型,复杂任务继续用旧模型,这样平均成本能降不少,用户感知几乎没变。
他问的第三个问题是:“你怎么判断提示词里的信息是对模型有用的?”这个问题其实是在考察你对模型工作机制的理解。我的回答是,我自己总结了一套简单的信息价值判断标准:一条信息能否被当前问题直接引用,如果能,就保留原始形态;如果不能,压缩成摘要;如果既不能被直接引用又不能提供背景,直接删掉。核心思路是,提示词的每一段文字都要能让模型的注意力更聚焦。
面试结束后我复盘了一下,我之所以能在“一天烧几十个token”这种略带挑衅的提问下稳住不慌,本质上不是因为我的口才好,而是因为我对token这个话题从原理到实操都有完整的方法论。所以我能在心里快速预判他接下来会追问什么,以及我该怎么把回答往自己最擅长的方向上引。
如果你的面试也遇到类似的提问,记住这条经验:不要让问题停留在“你烧了多少钱”这个表层,而是主动把它迁移到“我怎么控制成本、怎么评估效果、怎么做选型决策”这些你能深入展开的方向上。这种“主动定义话题”的能力,是我认为的AI应用开发面试里的最强加分项。
7. 常见踩坑与排查经验速查
最后把我在多个AI应用项目里遇到的问题和排查方法整理成一个速查表,每一个坑都是真实踩过的,希望能帮你少走一些弯路。
| 现象 | 常见原因 | 排查与解决 |
|---|---|---|
| token消耗突然暴涨 | 系统提示词或前缀动态拼接,导致缓存失效 | 检查前缀稳定性,固定不变部分为常量,并确认缓存开关已开启 |
| 上下文一长,回答质量急剧下降 | 无关历史信息堆积,干扰模型注意力 | 引入三级历史策略,只保留近期关键信息,老内容转摘要或入库 |
| 模型输出大量“废话” | 未明确输出格式,温度参数偏高 | 启用结构化输出约束,加入少样本示例,把温度降到0到0.3 |
| 小模型与大模型效果差异极小 | 任务本身推理难度低,浪费了溢价 | 基于评测集重新做任务分流,简单场景走小模型,复杂场景走大模型 |
| 同日同一前缀的请求费用不平滑 | 缓存未命中,或同一用户请求分散在不同并发实例上 | 提前核对缓存触发条件,尽量让相同请求收敛到同一服务实例 |
| 监控系统看不到token消耗明细 | 日志没记录模型返回的usage字段 | 在调用模型后补全usage记录,落库做按日/按任务聚合报表 |
这些排查经验的价值在于,AI应用开发过程中90%的“玄学问题”,最后都能落到token、上下文、提示词、参数这几个变量里。养成顺藤摸瓜的习惯,基本不会有查不出来的问题。
写在最后
关于那场面试的最终结果——我拿到了二面邀请,后来也顺利拿到了offer。但比起offer本身,那场对话让我真正想明白了一件事:AI应用开发这个岗位,技术固然重要,但决定你能走多远的,是你对成本和效果之间动态平衡的感知力。
而我那句“烧的不是token,是热情”,也不全是一句抖机灵。热情在这件事里的含义是:愿意为做一个好用的AI应用,反复打磨提示词,反复跑评测,反复压成本,愿意把那些别人觉得“差不多得了”的细节较真到底。这种热情,最后会一点一点变成你真正的专业优势。
所以,如果你也准备走AI应用开发这条路,建议从今天开始,给自己正在做的每个小项目都记一份token账本,算一算每天烧了多少,烧在了哪里,哪些地方该省,哪些地方不该省。这份账本,就是你未来面试场上最大的底气。