前端 Token 控制与成本优化:把上下文、模型与预算一起管起来

HTMLPAGE 团队
13 分钟阅读

面向前端 AI 产品,系统讲清 token 成本到底花在哪、如何压缩上下文、如何做模型分层和预算治理,以及常见的浪费场景怎么修。

#Token 控制 #成本优化 #AI 产品 #上下文管理 #模型治理

前端 Token 控制与成本优化

很多团队第一次做 AI 产品,盯的是模型效果;做了两周之后,盯的就变成账单。

Token 成本真正难管的地方,不在单次调用,而在这三个连锁问题:

  • 上下文越来越长,历史消息舍不得删。
  • 小任务也用大模型,模型分层没建立。
  • 没有预算口径,账单只能事后看。

如果不把这三件事一起治理,成本问题迟早会变成产品问题。

1. 先搞清钱花在哪,不然优化没有方向

一个 AI 请求的总成本,通常由四部分决定:

成本来源典型表现优化方向
输入 token 过长把完整聊天历史全带上摘要与裁剪
输出过长要求“尽量详细”且没有长度约束限制输出目标
模型选型过重分类、改写也走大模型分层用模
重试与重复请求用户多次点击、前端自动重发幂等与去抖

所以成本治理的第一步不是“换便宜模型”,而是建立这张账本。

2. 上下文压缩,要保留任务状态,不是保留所有原文

最常见的误区是:为了“保证模型懂上下文”,把所有历史消息原样带上。

更有效的方法是分层保留:

  1. 当前任务必须保留的信息。
  2. 对后续判断有影响的摘要。
  3. 可以随时回查、但不必每次都发给模型的原始全文。

一个前端应用最小可行的上下文策略可以这样分:

interface ContextLayer {
  currentTask: string
  stableFacts: string[]
  rollingSummary: string
  rawHistoryRefIds: string[]
}

也就是说,模型每次看到的应该是“任务状态”,不是“完整聊天录像”。

3. 模型分层决定了成本结构,不要把一个模型当万能入口

很多团队的隐性浪费来自一句话:先都用最强模型,后面再优化。

更稳的做法是按任务类型分层:

  • 高复杂决策:规划、架构、风险分析。
  • 中复杂生成:页面文案、摘要、方案比较。
  • 低复杂处理:分类、提取、格式化、改写。

如果低复杂任务占总调用量 70%,那成本优化的主战场不在最复杂的 30%,而在高频任务的默认模型。

4. 前端最容易忽略的浪费,是“无意识重复请求”

这些情况很常见:

  • 输入框每次改动都触发重新生成。
  • 用户连续点两次“生成”。
  • 页面切换回来再次自动请求。
  • 同一任务在不同组件里各发一次。

推荐至少加三层防护:

const inflightRequests = new Map<string, Promise<unknown>>()

export async function runDedupedRequest(key: string, task: () => Promise<unknown>) {
  if (inflightRequests.has(key)) return inflightRequests.get(key)

  const promise = task().finally(() => inflightRequests.delete(key))
  inflightRequests.set(key, promise)
  return promise
}

这不是性能小技巧,而是直接的成本控制手段。

5. 一个失败案例:把聊天历史越堆越长,结果越聊越贵、越聊越慢

很多 AI 应用在早期都经历过这个阶段:

  1. 为了保持上下文,所有消息永久保留。
  2. 每次请求都把历史全部发给模型。
  3. 结果响应越来越慢,费用越来越高。
  4. 最后不得不靠“清空聊天”粗暴止损。

问题根因有两个:

  • 没有把“长期记忆”和“当前会话”分开。
  • 没有把“摘要信息”和“原始内容”分开。

修复方式通常是:

  1. 超过阈值后自动做阶段摘要。
  2. 原始内容只做检索引用,不再全量拼接。
  3. 对不同功能设置独立上下文窗口。

6. 成本治理要落到预算策略,而不是每月看账单

最小预算体系至少要有 3 层:

  • 日预算:防止异常暴涨。
  • 功能预算:识别哪个入口最费钱。
  • 用户预算:防止个别用户无限消耗。
层级例子作用
全局预算每日 300 元防止账单失控
功能预算页面生成每日 120 元看功能 ROI
用户预算单用户每日 30 次控制滥用

如果预算命中了,不一定要直接报错。更实用的策略是:

  • 大模型降级到轻模型。
  • 流式生成降级为非流式摘要。
  • 免费用户进入排队或频率限制。

7. 上线前 Checklist

  • 已统计输入 token、输出 token、模型名与功能名。
  • 已建立上下文裁剪或摘要规则。
  • 高频低复杂任务已从大模型拆出。
  • 前端已做重复请求去重与取消。
  • 已设置全局、功能、用户三级预算。
  • 命中预算阈值时有降级策略,而不是直接崩溃。
  • 已能区分“效果问题”和“成本问题”。
  • 已监控取消率、重试率、平均 token 与单次请求成本。

FAQ

Token 控制是不是会损害效果?

会,但关键在于你裁掉什么。裁掉重复历史和低价值上下文,通常只会减少浪费;裁掉任务状态,才会真正影响质量。

前端怎么知道一次请求花了多少钱?

不要在浏览器硬算账单。更稳的是由服务端记录模型、token 与费用,再返回聚合后的统计结果给前端后台面板。

什么情况下要做摘要而不是截断?

只要历史内容里有“之后仍会影响判断的事实”,就优先做摘要,而不是简单截断。

延伸阅读