Claude Code 的额度今天缩水了17%——官方公告上写的是"永久提高25%"

文章来源声明: 原文作者:kyriewen; 来源站点:掘金; 原文链接:https://juejin.cn/post/7685224015707701298; 本文基于上述来源整理/加工,觅优补充点评,仅供技术学习交流。版权归原作者所有。
觅优短评

把「升25%还是降17%」的口水战拉回真实账单:瓶颈在哪、缓存前缀怎么用、启动开销多肥,三笔账拆得清楚,自查表可直接照做。适合重度 Claude Code 用户。

先把三个数字摆出来。

以原始标准周额度为 100 算:

  • 5月14日起,官方加了一轮临时 +50%,你手里能用的是 150
  • 这轮临时加量,昨天(9月13日)到期
  • 从今天起,标准周额度永久提高 25%,也就是 125

150 → 125。降了约 17%。

这不是我算的,是 Anthropic 自己在公告里写的原话:"和目前相比,Claude Code 每周额度实际上将减少 17%。" 公告标题写的却是"永久提高标准周额度 25%"——因为那个 25% 是拿五月之前的旧基准算的。

同一件事,两种算法都成立:跟最初比涨了 25%,官方没说谎;跟你昨天手里的比,少了六分之一。评论区当时有人给 Anthropic 起了个外号叫"A割"。

但骂完之后有个更实际的问题:这 17% 到底会不会影响到你? 我把这件事的账拆了一遍,结论有点反直觉——对相当一部分人来说,答案是不会,因为卡住你的压根不是周额度。

先说这轮临时加量的完整时间线

这个 +50% 是一部连续剧:

时间动作
5/14首次宣布周额度 +50%,写着到 7/13
7/13延期到 7/19
7/19延期到 8/19
8/19延期到 8/31
8/29宣布 9/14 起改为永久 +25%,临时 +50% 延到 9/13

8月中那次延期,官方顺带说了句"希望以后能把这 50% 永久保留"。当时社区最扎眼的回复是:"那你倒是永久啊。"

现在确实永久了,只永久了一半。

官方同时给的两个数字值得记一下:Claude Code 用户平均每周使用 20 小时,这个产品已经带来超过 25 亿美元的年化收入。20 小时/周意味着什么——这是一个准全职的使用强度,产能是真扛不住。

反转:多数人的瓶颈不是周额度

Claude Code 的付费套餐上有两把锁,很多人只盯着其中一把:

管什么这次改了吗
**5 小时滚动窗口**你一次能连续干多久❌ 公告没提,没动
**每周额度**你一周能攒出多少长任务✅ 从 150 降到 125

这次动的只有周额度。

社区里有人统计过自己连续 7 天高强度使用的消耗:在 5 小时窗口的限制下,周额度最多只用到六成多——也就是说那个 +50% 他根本用不完,原话是"提升了个寂寞"。也有人说自己大半年没用完过 5 小时窗口,周额度还剩 84%。

所以先花两分钟搞清楚自己被哪把锁锁住:

  • 平时报错是"5小时窗口已用尽,X 点后重置" → 这次调整跟你无关,17% 一分钱没影响你
  • 平时报错是"本周额度已用尽" → 你是被砍的那批,往下看

判断方法很土但有效:翻一下最近两周你实际撞上的是哪个提示。如果两个都撞过,那周额度对你就是硬约束。

真正影响账单的那条,那几天没人提

9月1日 Fable 5.1 上线,通稿被引用最多的是"Terminal-Bench 4.0 编码基准比上一代提高 13%"。但对天天用 Claude Code 干活的人,真正会改变账单的是另一条,报道里往往只占一行:

项目Fable 5Fable 5.1
输入$10 / 百万 token$10(未变)
输出$50 / 百万 token$50(未变)
**缓存读取****$1 / 百万 token****$0.25(降 75%)**

基础价一分没降,降的是缓存读取

这一条对不同的用法差别极大,关键在于缓存命中的条件:请求前缀必须逐字节一致。命中了走 $0.25,没命中就按原价重新算。

而每次开新会话最先塞进去的那一坨——CLAUDE.md、Skills 的元信息、MCP 工具定义、自定义斜杠命令——正好就是这个"前缀"。它稳定不动,你就一直吃 0.25 的价;你每改一次 CLAUDE.md,这段前缀就失效一次,下一轮全额重算。

所以周额度砍 17% 之后,最划算的动作不是少干活,是别让那段固定前缀又肥又爱变。

那段固定前缀到底有多肥

这里有个数字挺吓人的:有人做过启动开销审计,自己装了 82 个技能(他在维护一个插件库),新会话光启动就吃掉约 25000 token——一行代码还没写。

技能这东西不像普通 IDE 插件装完就躺着。每个技能的名称和描述,每次开新会话都要全量加载——模型得靠这些描述判断什么时候该调用它。装 30 个技能的效果不是"30 个技能的力量",是上下文窗口被描述文本挤掉一大块。MCP 服务器同理,它的工具定义(每个工具的名字、说明、参数 schema)也是每次都进上下文。

这笔账不用猜,几十行 Node 就能自己扫一遍。我把估算脚本贴出来,存成 startup-cost.mjs 直接 node startup-cost.mjs 跑:

<span>#!/usr/bin/env node</span>
<span>// startup-cost.mjs —— 估算每次开新会话的固定开销</span>
<span>import</span> { readFile, readdir } <span>from</span> <span>'node:fs/promises'</span>;
<span>import</span> { homedir } <span>from</span> <span>'node:os'</span>;
<span>import</span> { join } <span>from</span> <span>'node:path'</span>;

<span>const</span> <span>ROOT</span> = <span>join</span>(<span>homedir</span>(), <span>'.claude'</span>);

<span>// 粗估:纯中文约 1 字 1 token,纯英文约 4 字符 1 token,中英混排取 2.5</span>
<span>const</span> <span>est</span> = (<span>s</span>) => <span>Math</span>.<span>round</span>(s.<span>length</span> / <span>2.5</span>);

<span>const</span> <span>read</span> = <span>async</span> (<span>p</span>) => {
  <span>try</span> { <span>return</span> <span>await</span> <span>readFile</span>(p, <span>'utf8'</span>); } <span>catch</span> { <span>return</span> <span>''</span>; }
};

<span>// 1. CLAUDE.md:全文进上下文</span>
<span>const</span> claudeMd = <span>await</span> <span>read</span>(<span>join</span>(<span>ROOT</span>, <span>'CLAUDE.md'</span>));

<span>// 2. Skills:只有 frontmatter 的 name + description 进上下文,正文是按需加载</span>
<span>async</span> <span>function</span> <span>skillsCost</span>(<span></span>) {
  <span>let</span> dirs = [];
  <span>try</span> {
    dirs = <span>await</span> <span>readdir</span>(<span>join</span>(<span>ROOT</span>, <span>'skills'</span>), { <span>withFileTypes</span>: <span>true</span> });
  } <span>catch</span> { <span>return</span> { <span>total</span>: <span>0</span>, <span>rows</span>: [] }; }

  <span>const</span> rows = [];
  <span>for</span> (<span>const</span> d <span>of</span> dirs) {
    <span>if</span> (!d.<span>isDirectory</span>()) <span>continue</span>;
    <span>const</span> md = <span>await</span> <span>read</span>(<span>join</span>(<span>ROOT</span>, <span>'skills'</span>, d.<span>name</span>, <span>'SKILL.md'</span>));
    <span>const</span> fm = md.<span>match</span>(<span>/^---\n([\s\S]*?)\n---/</span>)?.[<span>1</span>] ?? <span>''</span>;
    <span>const</span> desc = fm.<span>match</span>(<span>/description:\s*([\s\S]*?)(?=\n[a-z-]+:|$)/i</span>)?.[<span>1</span>] ?? <span>''</span>;
    rows.<span>push</span>({ <span>name</span>: d.<span>name</span>, <span>cost</span>: <span>est</span>(d.<span>name</span> + desc) });
  }
  rows.<span>sort</span>(<span>(<span>a, b</span>) =></span> b.<span>cost</span> - a.<span>cost</span>);
  <span>return</span> { <span>total</span>: rows.<span>reduce</span>(<span>(<span>s, r</span>) =></span> s + r.<span>cost</span>, <span>0</span>), rows };
}

<span>// 3. MCP:工具定义每次全量进上下文,这里只能按配置体积粗估</span>
<span>const</span> settings = <span>await</span> <span>read</span>(<span>join</span>(<span>ROOT</span>, <span>'settings.json'</span>));
<span>const</span> mcpCount = <span>Object</span>.<span>keys</span>(
  <span>JSON</span>.<span>parse</span>(settings || <span>'{}'</span>).<span>mcpServers</span> ?? {}
).<span>length</span>;

<span>const</span> skills = <span>await</span> <span>skillsCost</span>();
<span>const</span> mdCost = <span>est</span>(claudeMd);

<span>console</span>.<span>log</span>(<span>`CLAUDE.md        <span>${mdCost.toLocaleString()}</span> tokens`</span>);
<span>console</span>.<span>log</span>(<span>`Skills (<span>${skills.rows.length}</span> 个)   <span>${skills.total.toLocaleString()}</span> tokens`</span>);
<span>console</span>.<span>log</span>(<span>`MCP 服务器       <span>${mcpCount}</span> 个(工具定义需实测,一般每个 300-2000)`</span>);
<span>console</span>.<span>log</span>(<span>`\n固定开销合计约 <span>${(mdCost + skills.total).toLocaleString()}</span> tokens(未含 MCP)\n`</span>);
<span>console</span>.<span>log</span>(<span>'最贵的 5 个技能描述:'</span>);
skills.<span>rows</span>.<span>slice</span>(<span>0</span>, <span>5</span>).<span>forEach</span>(<span><span>r</span> =></span>
  <span>console</span>.<span>log</span>(<span>`  <span>${<span>String</span>(r.cost).padStart(<span>5</span>)}</span>  <span>${r.name}</span>`</span>)
);

几点说明,别把它当精确账单看:

  • length / 2.5 是粗估。中文比英文吃 token,混排取 2.5 是个折中值,误差在 ±20% 量级,看数量级足够了
  • 技能的正文不算在启动开销里——只有 frontmatter 的名字和描述常驻,正文是命中时才加载的。所以技能写得长不是问题,描述写得又长又多才是问题
  • MCP 的工具定义体积得看各家 server 实现,脚本里只数了个数

跑完你大概会发现一件事:真正把窗口吃掉的往往不是那个 500 行的 CLAUDE.md,是几十个"平时压根不用、但每次都要报到"的技能描述。

一个常被误解的省法:Agent Teams 不省 token

Agent Teams 是 7 月上线的实验特性,把默认的单线程子代理改成多实例并发。开关是一个环境变量,写进 ~/.claude/settings.json

<span>{</span>
  <span>"env"</span><span>:</span> <span>{</span> <span>"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS"</span><span>:</span> <span>"true"</span> <span>}</span>
<span>}</span>

效果很直观,有实测是 5 个任务从 12 分钟降到 2.5 分钟。但它优化的维度得看清:

维度Agent Teams普通子代理
执行方式并行串行
适用前提子任务互相独立子任务有依赖
完成时间取决于最慢那个所有时间累加
**Token 消耗****和串行完全一样**

它压缩的是墙上时钟,不是 token。 它不会让模型少想少算,只是把几个独立的计算在时间轴上重叠起来。这两件事经常被混着说,指望靠开它来对冲那 17% 的,方向错了。

顺手一条:/model opusplan 是让 Opus 出方案、Sonnet 写实现的分工指令。有实践者说能省下四成左右的 token,但这个数字跟项目规模强相关——一个"帮我写个正则"的小需求,先让 Opus 出方案反而更费。它适合的是"你已经知道要做什么、但需要把设计拆细再动手"的模块。

顺带说一句退路

如果你恰好是被周额度卡死的那批,同期还有两条可以摆在桌上比:

Kimi K2.8 Preview 9月11到12日全量上线 Kimi Code,Model ID 保持 kimi-for-coding 不用改配置。这次动作最大的是 1M 上下文向全体档位开放,含免费档——此前这是 199 元/月以上才有的。思考强度分 low/high/max 三档,默认 max。

GLM-5.3-Flash 就是前段时间匿名霸榜 OpenRouter 的那个"Ox Alpha",320B 开放权重,官方称接近 Opus 4.8,且完全跑在国产芯片上。

不是让你现在就搬家。是说当一家开始"明升暗降"的时候,手里有第二条能跑通的通道,比在评论区骂街有用。

额度自查速查表

症状 / 场景判断该做什么
报错总是"5小时窗口用尽"这次调整与你无关不用改任何东西
报错总是"本周额度用尽"被砍的就是你往下逐条过
装了 20+ 个技能启动开销可能上万 token跑一遍 `startup-cost.mjs`,删掉半年没用过的
CLAUDE.md 三五百行每次会话全量加载项目无关的挪去技能,按需加载
每天都改 CLAUDE.md缓存前缀反复失效攒着一次改完,别边干边改
挂了一堆 MCP server工具定义每次全进上下文只留当前项目真用得上的
指望开 Agent Teams 省额度❌ 方向错了它只省时间,token 一样多
大模块要动手前全程压在顶配模型上很贵试 `/model opusplan` 分工
一个会话从早开到晚上下文越滚越大,每轮全量重算任务切换就开新会话
常撞高峰时段变慢高峰配额更紧长任务挪到非高峰跑

最后

这次调整最让人不舒服的地方,不是那 17%,是同一个数字被挑了一个更好看的基准来讲。跟旧标准比是涨,跟你昨天手里的比是降,公告选了前者当标题、把后者写在正文里。

但情绪价值归情绪价值,账还是得自己算。周额度这东西的分母从来不是"官方给了多少",是"你每一轮请求带了多少无关的东西进去"。同样的 125,有人能干完一个模块,有人光开场就烧掉两万 token。

去跑一遍那个脚本吧。多半会发现,你自己手里能抠出来的,比官方这次拿走的多。


你被 5 小时窗口卡得多,还是被周额度卡得多?跑完脚本的话,评论区报一下你的启动开销是多少 token——我想看看大家的真实分布。

觉得有用,点个赞👍让更多正在被额度折磨的人看到。