AI 编程额度怎么用才不浪费?

1 阅读7分钟

大家好,我是飞哥,一个Java转AI应用的开发者。

下午三点多,一个线上 bug 改到一半,Claude Code 停住了:额度用完,几晚上8点恢复。

回想上午:读了一遍没看过的模块,跑了两轮测试,顺手整理了几次提交说明。单看都不重,加起来,把下午最要紧的那一小时赔进去了

这事碰多了,我干脆把它当成一个工程问题来拆:额度是怎么算的,怎么提前知道要撞,撞了以后怎么走代价最小

最忙的时候,刚好撞上


服务方只给你三个数

据我理解,常见的额度有三种算法,各有各的撞法:

计量方式怎么重置什么时候容易撞据我理解谁在用
短窗口(如 5 小时)从第一条消息起算,到点整体清零连续密集调用两三个小时后Claude Code、Codex 的会话窗口
长周期(周、月)固定周期清零,有的还按模型单独限前几天用狠了,后面干等Claude Code、Codex 的周限额;Cursor 按月
按请求数(日)每天固定次数,按模型分桶一句一问、小步快跑Gemini CLI

短窗口常被叫作「滚动窗口」,但它和限流里的滑动窗口不是一回事:滑动窗口的起点每秒都在挪,这里的起点在你发第一条消息时就定了。记住这一点,后面的预热就靠它

服务方能告诉你的,少得可怜:

// 示意:一个额度窗口,各家字段名不同,内容大致就这几样
interface UsageWindow {
  kind: 'session' | 'weekly' | 'monthly' | 'daily'
  model: string | null      // 按模型单独限额时才有
  usedPercent: number       // 已用百分比
  windowMinutes: number     // 窗口长度
  resetsAt: number | null   // 下次重置的时间
}

没有 token,没有钱,只有百分比和时间。后面所有判断,都只能靠这两个量


节奏:比两个比例

判断偏快只要比两个数:窗口时间过去了多少,额度用掉了多少

先看节奏,别等撞墙

用掉的明显跑在时间前面,就是偏快:照这个速度外推,耗尽点落在重置之前,中间那段就是你要干等的时间。反过来,窗口只剩四分之一、额度还剩一大半,这部分到点清零,等于白扔

落到代码里,我用的是这几条阈值,可以按自己的习惯调:

  • 预计用到 110% 以上,算偏快
  • 剩不到四分之一的时间、预计至少 25% 用不上,算用不完
  • 窗口过去不到 10% 不判断:开头读个大模块,10% 的时间用掉 30% 很正常

还有个更隐蔽的坑:外推要用最近的速度,别用整个窗口的平均

按最近的速度外推

上午两小时闲着,最近一小时在猛跑。平均速度告诉你刚好够,最近的速度告诉你 48 分钟后就没了

那能不能干脆让模型来判断?

不划算:问它一句「我还剩多少」本身就花额度,同样的输入两次回答还可能不一样。这种事,写死的规则就够了


偏快时:先换模型,别急着换 Agent

偏快还有操作空间,最便宜的动作是换模型。按模型分限额的服务上,大模型的周限额往往先到头,而起标题、写提交说明、翻译注释这类轻活,本来就用不着它

会话不动,上下文不动,只是下一轮换个脑子

换 Agent 最贵。Claude Code 这个会话里读过的文件、聊过的方案,Codex 一概不知道,得重新喂一遍


撞了以后:等、换号、换 Agent

先等,再换号,最后换 Agent

  • 等:短窗口离重置不到一小时,就等。别干等,把消息预约到额度恢复后自动发出去,人去干别的
  • 换号:同一个 Agent 的第二个订阅。两个账号共享会话历史的话,换过去原会话原样恢复(后面讲怎么做到)
  • 换 Agent:任务不依赖原来的上下文,或者几句话能说清,就移交过去。移交时上下文怎么带,系列第 3 篇单独讲

最容易误判的是这个场景:5 小时窗口撞了,离重置只剩四十分钟,人一急就移交给了另一个 Agent,上下文丢了一半。等四十分钟能原样接着的事,变成了重讲一遍前因

撞的是周窗口,才需要动换号和换 Agent


预热:把重置挪到饭点

短窗口从第一条消息起算,那窗口什么时候开始,其实由你定

把重置挪到饭点

10:00 才开工,窗口是 10:00 到 15:00,重置落在你正干活的时候。8:00 先发一条最小请求,就有两个完整窗口:上午一个,下午一个,重置落在午饭

另一种是「窗口一重置就预热」:上一个窗口到期就发一条,让下一个窗口立刻计时,首尾相接,不用等你坐下来才开始

几个提醒:

  • 预热不加总量,只挪边界。作息不固定的人,预热只是多花一条请求
  • 对周、月限额和按请求数的额度没用,它们跟「什么时候开始」无关
  • 据我理解,有的服务方会给闲置的窗口挪重置时间,预热之后要留冷却期,不然会反复触发,白白花额度

多账号:只换钥匙,不换屋子

Claude Code、Codex 这类 CLI 把登录态和会话历史放在同一个配置目录里,用哪个目录由环境变量决定(CLAUDE_CONFIG_DIR、CODEX_HOME)。所以换号,就是换它启动时读的目录

凭据分开,历史共用

麻烦在于两个目录各管各的,会话历史不互通,换过去等于换了个不认识你的人。办法是把历史目录软链到同一处,只让凭据各自独立

这里有两处容易撞墙:

  • settings.json 不能软链:CLI 写它是先写新文件再改名,软链会被换成普通文件。只能每次启动前复制一份
  • 路径要一字不差:Claude Code 2.1 起在 macOS 钥匙串里按配置目录路径的原文给凭据起名,同一个目录换个写法,就找不到登录了

另外,一个人开多个订阅号符不符合服务方条款,得自己核对


落成了什么

这篇讲的做法,我放进了自己在做的 Antumi:状态栏常驻各 Agent 的用量和恢复时间,按上面的规则判断偏快还是用不完,没号可换就等恢复后自动继续;预热可以按每日时点或窗口重置后触发。

它是一个开源的多 Agent 工作台,Agent 照常用,窗口之间复制粘贴的活交给它:

Github :𝗳𝗹𝘆𝗵𝗲𝗿𝗼/𝗮𝗻𝘁𝘂𝗺𝗶