Re-pace:当额度提前用超之后,”平均线”该怎么重画

给 AIUsage 加了一个叫 Re-pace 的功能:7 天额度提前用超以后,按一下"从现在开始平均",把已用的视为沉没,只把余量平均分到剩余时间。记录一下这个想法、公式和为什么不做拖动。

背景:一条永远不原谅你的线

AIUsage 是我在做的一个 macOS 菜单栏小工具,显示 Claude 订阅的 5 小时 / 7 天额度,核心是一个叫 pace 的概念:假设你想在窗口重置那一刻正好用到 99%,那么”匀速”到现在应该用了多少,和实际用了多少差多少。菜单栏里就是一个 7d 42% ▲9 这样的东西——42% 用掉了,比匀速预算高 9 个点。

用了几周之后发现这条线有一个毛病:它永远不原谅你。周二就把一周额度烧掉 60%,菜单栏会显示 7d 60% ▲32,然后一直到周日都差不多是这个数——不管你后面怎么省。数字是对的,但它在几天前就已经不再是”建议”了:你没法回到周一重来,而它也不回答你现在最想知道的问题——从此刻起,剩下的 39% 撑到周日够不够?

想法:从现在开始平均

解决办法其实是财务里很老的做法:re-forecast。已经花掉的算沉没成本,只对剩下的钱和剩下的时间重新做预算。

落到产品上就是 7 天那一行多一个按钮 Re-pace from now / 从现在开始平均。按下去的瞬间记一个检查点 (t₀, used₀)——当前时间和当前用量——之后:

  • 预算线不再从 (0, 窗口开始) 出发,而是从 (used₀, t₀) 出发,匀速走到 (99%, 重置时刻)。
  • 差值、预计到达、耗尽时间、菜单栏的 ▲▼ 标记、超速通知,全部改成相对这条新线。
  • 进度条上留下三条刻度:一条淡的,是原预算线现在应该在的位置(整体上超了多少还看得见);一条虚线,是检查点,不动;一条实线,是新预算,随时间前进。
  • 检查点绑定在这一个窗口实例上,窗口重置自动失效;也可以手动清除。

按下之后菜单栏会从 7d 60% ▲32 变成 7d 60% ○(刚开始,还看不出节奏),一小时后变成 7d 63% ● 或者 ▲2——一个你真的可以照着调整的数字。

公式

好处是数学上什么都没变,只是把原点挪了一下。原来的 pace:

elapsed   = (now − start) / (reset − start)
budget    = 99 × elapsed
delta     = used − budget
projected = used / elapsed
runsOut   = start + (now − start) × (99 / used)

Re-pace 之后,把 (0, start) 换成 (base, origin):

origin    = checkpoint.time
base      = checkpoint.used
remaining = 99 − base
progress  = (now − origin) / (reset − origin)
consumed  = used − base

budget    = base + remaining × progress
delta     = used − budget
projected = base + consumed / progress
runsOut   = origin + (now − origin) × (remaining / consumed)

“刚开始不投影”的规则也跟着原点走:刚按下按钮的时候 consumed ≈ 0,除以一个很小的 progress 没有意义,所以头一段时间只显示差值,不显示预计。这个等待时间按窗口定:5 小时窗口 15 分钟,7 天窗口 1 小时(最初用的是”窗口长度的 5%”,对 7 天窗口就是八个多小时,自己用了一下发现等不了那么久,改成了固定时长)。

一个退化情形要处理:检查点在重置之后、或者按下时已经 ≥ 99%,这时候”余量”是零或负数,直接忽略检查点回退到普通 pace,而不是算出一堆奇怪的数。

为什么不做拖动

最初的设想还包括让用户拖那条线,选”从哪一刻开始平均”。想了一下放弃了,原因不是难做,是没有语义:AIUsage 只有当前快照,没有用量历史。把线拖到”周二中午”的时候,我不知道周二中午用了多少,凑不出一个 (t₀, used₀);拖百分比也一样,缺时间那一半。“现在”是唯一一个同时知道时间和用量的时刻。等以后攒了用量历史(那本身也在计划里,可以画趋势),拖动就顺理成章了。

顺便:它是通用的

实现上检查点挂在 PaceWindow 这个抽象上,而不是 Claude 的 7 天窗口上。5 小时窗口、DeepSeek 的月预算都是同一个类型,加个按钮就能用。目前只在 7 天那一行放了按钮——那是”早期用超会折磨你好几天”的地方;5 小时窗口反正很快就过去了。

Leave a Reply

Your email address will not be published. Required fields are marked *