跳到主要内容

对话中途耗尽的 Token 预算:为什么免费用户觉得你的模型变笨了

· 阅读需 12 分钟
Tian Pan
Software Engineer

我认识的一位产品经理,花了两周时间排查公司 AI 写作助手的流失激增。免费用户的会话长度骤降 30%,客服收件箱挤满了"你们的模型以前很聪明,现在变懒了"的各种变体,团队第一反应是把锅甩给同一周上线的模型升级。模型其实没有变。变的是财务在季度中途悄悄收紧了按用户分配的 Token 预算,应用在用户跨过新阈值时,正在静默截断系统提示词、丢弃工具调用、缩短回答。从用户的座位看,AI 退化了。从仪表板看,一切正常。两边都对,这就是失败模式。

这种模式现在到处都是。ChatGPT 免费版触达上限后会切到一个更小的模型,产品里除了"接下来一段时间回答可能会短一点"之外没有任何标识。Anthropic 的免费层行为类似。你在任何一家之上做功能,再叠加一层自己的按用户 Token 预算用来控成本,于是你串联了两道隐形悬崖——平台的,加上你的——而用户只看到一个聊天框,无从分辨自己刚才到底踩到了哪一道。

修复办法不是把预算改大。修复办法是把预算本身当成用户界面的一等公民——可见、可预测、公平——这样上限就不再被读成质量退化,而是被读成它本来的样子:一个用户可以采取行动的定价信号。

为什么"静默降级"看起来像是模型变笨了

用户没有 Token 经济学的心智模型。他们有的是产品质量的心智模型。上周二还能产出四段答案的同一句提示词,到这周四只剩两句话,他们唯一可用的解释就是 AI 出了什么问题。他们不会想到系统提示词被压短了以节省 Token;不会想到上周给答案打底的检索步骤这次因为预算先于检索耗尽而被跳过;不会想到本该查实时数据的工具调用被抑制了;也不会想到模型本身在会话半途被换成了更小的同族。

这不是一个假想的认知鸿沟。Reddit 上一个关于 OpenAI 静默砍半实际上下文窗口的长帖在 2025 年获得了将近 2,000 个赞,"ChatGPT 是不是变笨了?"这种论坛体裁至少从 2024 年初就连续不断地刷新。其中大多数其实根本不是关于模型退化的。它们是关于宣传页承诺的(N 个 Token 的上下文窗口)和运行时真正分配给那次具体会话的(N 的某个分数,由负载、套餐等级、会话长度和静默回退共同决定)之间的差距。模型在做它被吩咐去做的事。用户在对他们被承诺会拿到的东西做出反应。

一个有用的框架:每一条"AI 变笨了"的投诉,都是一次泄漏的实现细节。用户在用非技术语言报告:他们撞上了一道他们不知道存在的预算边界。如果你的产品从未告诉他们边界存在、从未给他们看自己离边界多近、从未给他们一个采取行动的方式,那么留给他们的唯一叙事就是退化。

一次对话中途悬崖的解剖

一个典型的 AI 功能并不只有一道上限。它有好几道,层层叠加,每一道都不可见。

系统提示词预算。现代 Agent 栈在用户的第一条消息落地之前就已经吃掉上下文窗口的 30% 到 60%——系统指令、人设、安全护栏、工具 schema(一个中等文档化的工具大约 200 个 Token,五个工具就是每次调用都要交一千个 Token 的过路费)、检索回来的 RAG 片段、对话历史。一旦有成本压力,最容易砍的就是用户看不见的那部分。于是系统提示词被压缩、人设被消融、安全样板话被缩短,模型的行为可观测地发生了变化——而原因对聊天另一端的人完全不可见。

对话历史预算。当跑动中的历史超过它的分配额,总得有什么要让位。最朴素的实现会先丢最老的对话轮次,这意味着用户在会话早段说出的偏好悄悄消失了;Agent 忘了他们要求简短回答,忘了他们是初学者,忘了二十分钟前纠正过一次误解。用户现在体验到的是一个"不听人话"的 AI,而事实上,它是被命令去遗忘的。

工具调用预算。工具调用花真金白银——每次调用都跑一次推理,且常常要把完整对话重新编码。注重成本的网关会按每用户每小时设上限。一旦达到,Agent 静默降级为无工具模式,于是实时数据通路停了,模型回落到训练数据里的答案上——往往细节微妙地错,且永远没有标签。用户看到的是一个看起来很自信、实际上已经过时的答案。

回复长度预算。输出 Token 比输入 Token 贵,通常贵三到五倍,所以预算吃紧时回复就会变短。三段变一段。要点列表被截尾。流式输出被截断,UI 隐藏了"已截断"的后缀。产品感觉很赶,用户感觉很赶。

模型档位预算。最有后果的一道:当用户跨过自己的人头上限,网关在会话半途把前沿模型换成更便宜的那一个。对话继续。品牌没变。答案以一种难以言说但很容易感受到的方式明显变差。ChatGPT 已经文档化的行为——免费版和 Plus 触达上限后回退到 mini 模型——是这种模式的标准范本;每一个在它之上做产品的团队都继承了同样的模式。

这些都不是 Bug。每一条单看都是合理的工程决策。合在一起,它们形成一条分级降级曲线,用户把它感知为一次单一的、神秘的、不断加剧的质量退化。每一层同时也是一个独立的计费面,所以最后是财务在不同时刻分别去拧紧它们,结果是没有任何一个团队拥有"产品在预算边缘上到底感觉如何"的完整画面。

悬崖 vs. 斜坡

处理用户跨过预算边界,本质上有两种设计哲学。

第一种是悬崖。用户拿到完整产品,直到没有为止;到了阈值,硬付费墙或限流错误冒出来。这种实现简单、接收方残酷。它还有一个反直觉的属性——比另一种更可被理解,至少用户知道发生了什么——但这种可理解性的代价是:在用户陷入任务最深的时刻给他最大摩擦。悬崖把一小部分用户转化掉,激怒其余的人,并从那些撞过墙一次、永远记住的人那里源源不断地漏走流失。

第二种是斜坡,这是大多数 AI 产品逐渐滑过去的方向。质量在许多小维度上优雅地退化:更短的输出、丢掉的工具、换掉的模型、压缩掉的记忆。没有任何一个时刻是用户可以指出来的。产品只是随时间感觉越来越糟。这避免了悬崖的摩擦,但制造了一个更糟糕的问题——用户把退化归因于产品本身,而不是一个他们可以采取行动的定价信号。斜坡把升级对话整个搞丢了,因为用户根本没有意识到曾经有过这么一个对话。

第三条路,也是设计得更好的产品正在汇聚到的那条,是诚实的斜坡:优雅降级配上明确的、上下文相关的可见度。用户依然比悬崖软着陆,但他们在降级的那一刻被告知:他们撞到了上限、拿到的是替代品、要恢复完整质量需要什么。降级因此变成了一项功能,而不是一个缺陷,因为用户被拉进了回路。

第三种模式之所以重要,是因为升级对话正是转化发生的地方。免费增值 SaaS 的数据是一致的:与具体功能边界绑定的上下文升级提示,转化率比通用提示高数倍,而机会窗口很短——大多数转化发生在触发时刻之后的四十八小时内。静默降级把这个窗口扔掉了。用户感到挫败,把它归因于产品,产品再也没机会把这份挫败重新框定为一个选择。

为预算可见度做设计

这里的翻译工作不光鲜,但杠杆很高。几个在实践中行得通的模式。

把配额作为实时信号呈现,而不是事后错误。一个小指示器,显示"今日回复:14/20"或者"高级工具还剩 8 条消息可用",把不可见的约束变成可导航的。用户可以给自己定节奏,把深度查询留到关键时刻,理解稀缺存在却不会感觉被偷袭。距离配额耗尽的时间是这个信号的分析版本;面向用户的版本更重要。

在降级发生的那一刻给它打上标签。"这条回复因为你的免费版上限被缩短了"是用户可以采取行动的句子。"这是你的回复"——而这条回复实际上是降级版的——是一个会破坏信任的句子。标签的成本是两行 UI。不打标签的成本是用户得出结论:你的产品比昨天差了。

让升级提示匹配用户刚刚跨过的那条边界。一个泛泛的"升级到 Pro"横幅转化很差。一个写着"为了让 20 轮以上的对话继续用完整模型"的升级提示,转化能高一个数量级,因为它在卖的正是用户刚刚失去的那项能力。上下文的具体性就是转化机制。你系统里每一道预算边界都是一个候选触发点;把它们当成触发点来埋点。

把系统已经替用户做出的选择交还给用户。如果 Agent 因为便宜的那个模型能塞进预算而要切换模型,在赌注足够大时先问一句:"这个问题正常会用完整模型——切到轻量模型以留在今日额度内,还是升级?"大多数用户会选轻量模型并保持愉快。少数本来会升级的人,现在在最对的时刻看到了报价。少数本来会静默流失的人,现在出现在了你的漏斗里。

把系统提示词预算和工具调用预算也当成产品面。如果你在负载下压缩了系统提示词,把它记成一条产品事件,不只是后端指标,并把它暴露给产品和设计——不是因为用户需要看到"系统提示词已压缩"(他们不需要),而是因为它造成的行为差异是可观测的,产品需要去拥有这份差异,而不是从客服工单里发现它。丢掉的工具调用、被裁短的历史也是同理:任何改变用户可见行为的东西都是一条产品事件,无论上线那道预算决策的团队是否这么看。

把预算纳入 eval 套件。大多数 eval 跑的是无约束上下文、无限工具调用。真实免费用户体验到的产品版本,是被悄悄压缩和降级过的版本。跑一档针对降级配置的 eval。如果降级版没能通过完整版能通过的某个 eval,你就量化出了你免费层在出货的体验落差——而那个数字,就是你正坐在上面的转化压力(或者流失风险)的大小。

工程拥有什么、产品拥有什么

大多数团队卡住的对话是:这是谁的问题?工程拥有预算执行:限流器、网关逻辑、回退链、按租户配额。产品拥有用户对预算的体验。陷阱是把它们当成两条工作流。它们是同一条工作流,失败模式就是它们不被这么对待时发生的事。

一条有用的内部规则:任何改变用户可见行为的预算决策——模型切换、工具丢弃、回复截断、历史压缩——必须连同一个为这个变化命名的 UI 形态一起上线。如果工程想增加一个新的预算维度,"用户怎么知道这件事发生了"这个问题必须在预算上线之前回答,而不是在客服工单到达之后。这听起来像额外成本。它正好相反。它是把"模型变笨了"挡在你收件箱外的唯一可靠方式,因为模型没有变笨。你的运行时变便宜了,而你忘了告诉任何人。

免费增值 AI 产品只有在免费体验和付费体验之间的差距清晰可见时才可持续。让差距不可见,你就在漏斗的两端同时输:免费用户因为觉得产品差而静默流失,付费用户从来没出现因为他们从未被给过一个理由出现。让差距可见,同一道预算上限就变成了一个定价论证、一次用量教育、一个转化事件——三件事一起做,全部来自工程以为是一句客套话、而产品以为是一项苦差的同一句 UI 文案。

Token 预算不是后端的事。它就是产品本身——每次它咬人的时候。

References:Let's stay in touch and Follow me for more thoughts and updates