前端 Token 节省实战心得

从前端转向 AI Native 开发已经有一段时间了,现在基本全程使用 Cursor 或 CodeBuddy 写代码。

刚开始的时候,3k 刀的预算真的感觉随便用。直到有一天 Token 预算突然开始打折,额度肉眼可见地往下掉,我才被迫认真思考:平时到底有哪些 Token 是花在了真正有价值的地方,哪些只是被浪费掉了?

今天就分享一下我最近总结的几条 Token 节省心得。

Token 不是用得多,而是浪费得多

一开始我以为,节省 Token 的方法就是少用 AI。但实际用下来发现,这个方向完全搞反了。

很多时候,Token 不是因为任务太复杂才消耗得多,而是因为上下文不断膨胀、重复信息反复传输,导致每一轮真正用于解决问题的内容只占很小一部分。

以 Cursor 为例,每轮对话有相对固定的基础成本,会话越长,历史上下文带来的额外消耗越明显。到了后期,一轮输入可能是前期的很多倍,但真正解决问题的内容并没有增加多少。

第 5 轮:上下文较短,主要处理当前问题
第 50 轮:开始反复携带前面的大量历史
第 100 轮:输入规模明显膨胀,真正有效的信息占比下降

很多 Token,其实花在了重传历史、重复解释和重新读取文件上。

我项目里的 Token 消耗分布

回头检查项目消耗之后,我发现最主要的开销集中在三个地方:

  • Figma UI 还原:约 30%
  • 长会话后期的对话:约 25%
  • Mock 数据反复修改:约 15%

这三块加起来已经占了大约 70%。也就是说,只要先解决这三个问题,就能节省掉大部分不必要的消耗。

后来我主要摸索出了三个动作,实际使用下来效果比较明显。

一、会话拆分:一个会话只做一件事

以前我很喜欢在一个会话里持续追加任务:先让 AI 写页面,再让它接接口,然后改一个交互,最后顺便修几个无关的 Bug。

这样做一开始很方便,因为上下文都在。但随着会话变长,前面所有功能的历史也会被不断带入后续对话。AI 需要在一大段旧内容里寻找当前问题,Token 消耗和理解成本都会上升。

现在我的做法是按功能点拆分会话:

会话 A:还原登录页面
会话 B:接入登录接口
会话 C:处理登录失败状态
会话 D:单独调试某个 Bug

每个会话尽量只解决一个明确问题。遇到 Bug 时,也会单独开一个调试会话,不把排查过程污染到主开发会话里。

另外,一个会话如果已经超过较多轮次,我通常不会继续往里面加新任务。长会话的历史收益会越来越低,重新开一个会话,重新提供必要上下文,往往更便宜,也更容易让 AI 保持清晰。

这部分是我感受到最明显的节省方式,大约可以减少 20% 到 40% 的消耗。

二、上下文精准化:引用真正需要的内容

上下文越多不代表效果越好。很多时候,给 AI 的内容太多,反而会让它在大量无关代码里寻找重点。

我现在会有意识地区分不同场景使用不同的上下文方式:

用精准文件代替全库扫描

如果已经知道问题发生在哪个组件,就直接引用具体文件或目录,不随手使用全库上下文。全库扫描适合探索未知问题,但不适合每一轮都使用。

优先:@src/components/UserCard.tsx
其次:@src/components/user/
谨慎使用:@codebase

用搜索结果代替重复阅读

需要查找某个函数、接口或配置时,先用 Grep 定位关键位置,再把相关片段交给 AI,而不是让它反复读取整个项目。

Figma 使用精准 node-id

做 UI 还原时,我会尽量直接提供需要实现的节点,而不是让 AI 反复探索整个 Figma 页面。节点越精准,布局信息、样式信息和组件关系就越集中。

方案可以贴链接,就不要重复描述

如果已经有设计稿、接口文档或技术方案,就直接提供链接或文件位置。反复用自然语言描述同一份内容,既浪费时间,也会产生不同版本的理解。

调研和编码分开

跨模块调研时,可以让 explore 子 Agent 先完成探索,只返回结论、关键文件和风险点。调研完成后,再开一个新的会话写代码。

探索会话:找到相关模块、依赖关系和风险
↓ 只保留结论
编码会话:根据结论完成实现

上下文精准化的改动成本很小,但效果通常很明显,大约可以减少 15% 到 30% 的 Token 消耗。

三、Mock 延迟生成:协议没定不要急着造数据

这部分是我踩坑最深的地方。

以前接口协议还没有完全确定时,就先让 AI 根据当前理解生成一套 Mock 数据。后端接口一改,前端字段就跟着改,之前生成的大段 JSON 也要重新修改。

更麻烦的是,AI 需要反复读取旧 Mock、对比新协议、修正字段,再重新检查页面。这相当于同一份工作做了两遍,甚至更多遍。

现在我会把顺序调整成:

确认接口协议
↓
冻结 DTO / 类型定义
↓
根据 DTO 生成 Mock
↓
填充少量有代表性的示例值

先确认 proto 或接口协议,再生成 DTO,最后根据 DTO 填充示例数据。这样 Mock 只需要做一次,后续接口变化也更容易定位。

这部分大约可以减少 15% 的消耗,更重要的是能减少很多没有价值的返工。

两个止损小技巧

Figma 同一个问题不要无限重试

如果 Figma 还原连续几轮都没有达到预期,我现在会把重试次数控制在三轮以内。三轮之后,如果 AI 还是无法理解具体偏差,就直接自己写 CSS,把精确的尺寸、间距和颜色值告诉它。

让 AI 继续猜,通常只会重复消耗 Token,并不会自动产生新的信息。

根据任务选择模型

如果任务可以用一两句话描述清楚,而且执行路径比较明确,我会优先使用 Auto 或成本更低的模型。

需要“帮我想怎么做”、分析复杂架构、排查跨模块问题时,再切换到更强的模型,并且尽量在新会话中开始。

模型选择不是越强越好,而是要和任务的不确定性匹配。简单任务用强模型,很多时候只是用更贵的方式完成相同结果。

最后总结

现在我把节省 Token 总结成四句话:

会话要短,引用要准,Mock 要晚,模型要选对。

节省 Token 并不是抠门,也不是刻意少用 AI。真正的目标是让每一轮推理都花在该花的地方,减少无意义的历史重传、重复解释和返工。

当 AI 的执行能力越来越强之后,开发者需要做的可能不是减少使用它,而是更好地组织任务、控制上下文,并且知道什么时候该继续交给 AI,什么时候应该自己做决定。