跳到主要内容
Lydia 这篇省 token 指南,读完发现我一直在烧缓存

Lydia 这篇省 token 指南,读完发现我一直在烧缓存

书签客
书签客

· 阅读约 4 分钟

Lydia Hallie 昨天那篇讲 Claude Code 省 token 的指南,出处是她自己的博客。

我读完第一遍,最直接的感受不是"学到了",是发现自己过去两周一直在烧缓存。烧得心安理得,因为缓存这东西 Claude Code 管得太静默了。

她说的第一件事是:session 开头把 model 和 effort level 定死,中途别动。切换任何一个,prompt cache 整个失效,之前攒下的上下文按全价重新 prefill。

我读到这里,手边正好有一个开了两个多小时的 session。中途我干过两件事:把 effort 从 high 调到 medium,想看看输出质量掉多少;然后又换了一次 model,sonnet 卡在一个重构上,想试试 opus 能不能绕过去。按她的说法,这两次切换等于把那个 session 的缓存各废了一次。后面再发的每条消息,都在为重新装载之前的上下文付全价——那个任务上下文已经不小了。省下来的 effort 差价,跟重新 prefill 的损失一比,大概率是亏的。

最烦人的是它没有任何提示。Claude Code 不弹警告说"你刚换了 model,缓存没了,接下来每条要贵几倍"。它只是继续跑,看起来什么都没发生。所以我之前从没觉得这是问题,甚至觉得中途调参数是"灵活"——现在知道这灵活是计费的。

/rewind 和 /compact 那条也让我愣了一下。我以前的习惯是 conversation 长了就开始卡,卡了就按 /compact,感觉像"腾地方"的按钮,腾完继续。但她说,如果只是要砍尾部几轮,/rewind 更便宜——它只把尾巴切掉,前面已经进缓存的部分还保持缓存读的低价。

/compact 本身有成本。压缩这个动作如果发生在缓存还活着的时候,相对便宜;如果缓存已经过期了(订阅一小时,API key 五分钟),/compact 就相当于先把整个对话按全价读一遍,再存一个摘要。回来接着聊,还得继续为这个摘要付钱。这就是为什么我每次 /compact 完不久又觉得卡——压缩省掉的 token 抵不上重新装载的代价,甚至不如开个新 session 干净。

缓存过期时间里,API key 那个五分钟最值得单独说。去倒杯水、回条消息,回来缓存就没了。订阅的一小时也短,但好歹够开个短会。我之前对这个时间没概念,老觉得"那个 session 我待会儿再回"没什么大不了。现在知道"待会儿"要看是五分钟还是五十分钟。

读到这里我大概确认了这篇不是那种"10 个 Claude Code 技巧"的罗列。它实际上在讲一件事:缓存是成本结构,所有"省 token"的操作都得围绕缓存展开才有意义。不围绕缓存思考的省法,有时候比不省还贵。

她还写了一条解释为什么有些命令输出"变短":Claude Code 把超过 3 万字符的输出写到文件里,对话里只插一个预览加文件路径。这个我之前注意过,但没往 token 上想,以为只是界面优化。其实也是省——不然大输出堆进 conversation,往后每轮都要重发一次。

@-mention 那条我读完当天就改了,因为零成本。手敲路径会多一次 read 调用,@ 直接把文件内容挂到消息里。差别不小:一次 read 调用占 token,而且作为工具调用会留在上下文里。

有个细节我第二遍重看才注意到:缓存读是输入单价的 0.1 倍,但把 token 写进缓存,最高能到正常输入的 2 倍。写比读贵 20 倍。这个比例我之前脑子里从来没有,因为缓存不是看得见的东西,Claude Code 官方也不怎么摊开讲。现在知道之后,对"为什么有时候第一条消息特别慢"有了新理解。

/context 那条我还没去试。建议是在全新 session 里跑一遍,看看 CLAUDE.md、MCP tool 定义加载了什么,然后删掉不必要的。逻辑我懂,但我的 CLAUDE.md 不大,MCP 也就三五个。不过朋友说过,他们团队一个项目接十几个 MCP 工具,每个带一堆 schema——那些工具不调用,描述也会进上下文。如果真是这样,/context 应该在开新项目时就跑一次。

读完我给自己定了四条:开 session 先把 model 和 effort 定死,中途不改;能 /rewind 就不 /compact,/compact 只留在缓存还活着的时候做;离开超过五分钟的 API key session 回来直接开新的,不接着聊;跑大输出的活儿丢给 subagent,主 session 只收答案。现在看着都心疼之前烧掉的那些 token。

不点链接也能带走的一句,我放在最后。原文里有一句我特意记下来过:「Claude Code 其实是自动管缓存的,不需要你手动去操作」。但"自动管"不等于"不会破"——切换 model、改 effort,就是手动把它破了,然后它只能按全价重新预填充。不是缓存不工作,是你主动把它废了。

书签客
书签客

只推真读过的、顺手跑个实验贴完整记录——link-blog 策展 + 实验笔记。

查看主页 →

更多「Claude Code」的实战

评论

还没有评论,写下第一条讨论。

请文明交流;发布时会进行内容安全检测,未通过的文字会原样保留供你修改。