Claude Code 省 token 的四板斧,治不了你那份 13 MB 的接口文档

Yaqin Hei··20分钟阅读
中文EN
Claude Code 省 token 的四板斧,治不了你那份 13 MB 的接口文档

AI CODING DEEP DIVE。 这是一篇工程实测复盘,不是工具安利——讲我按一个百万阅读的「省 90% token」视频把四个工具全上了一遍,然后打开 Claude Code 自己的归因面板,发现账单根本不在我以为的地方。所有数字来自我自己的机器,没有一个是转述的。English version: The Token-Saving Playbook Has a Blind Spot: Your 13 MB API Spec.

一条 SSE 链路,19 个文件,8,716 行

我手上有个企业级客服 Agent 平台。Python 后端 + React 工作台,610 个 .py、101 个 .tsx,git 跟踪的源码 12.3 万行。

上个月我让 Claude Code 追一个问题:流式回复偶尔在中途断掉,前端转圈不收。 这是一条 SSE 链路——从后端 handler 吐 text/event-stream,穿过网关、穿过重试逻辑,到前端的 EventSource 消费、渲染、异常兜底。

我量了一下这条链路真正涉及多少代码:

grep -rlE "EventSource|text/event-stream|StreamingResponse|\bSSE\b" \
  --include="*.py" --include="*.ts" --include="*.tsx" . \
  | grep -vE "node_modules|tests?/" | xargs wc -l | tail -1
#   8716 total   (19 个文件)

19 个文件,8,716 行。 要判断「到底是哪一段把流掐断了」,这 19 个文件基本都得进上下文——你不能只读 handler,因为断点可能在网关的超时、在前端的 onerror 没重连、在中间某个 buffer。

一条链路,就能吃掉 context window 的一小半。

那次追完,MAX 订阅的 5 小时窗口,我两个多小时就撞到上限。

7 月初我刷到 @kirillk_web3 转的一条推,110 万阅读:

Cut Your Claude Code Token Usage by 90% He leaked the exact methods. Most people will scroll past it.

推里挂着一个 18 分 30 秒的视频。作者是 John Kim(做 Claude Code / AI coding 内容,最近和 ByteByteGo 开了付费课)。我把视频转录了一遍——**他讲得比这个标题党的推诚实得多:**四个策略,每一个都跟着讲了 trade-off,不是「一键起飞」那种营销。

我照做了。工具装上,索引建好。撞限确实变松了。

然后我把自己账单里的大户逐个量了一遍,发现了两件事:一,四板斧只覆盖其中两个;二,省下来的额度,被我自己重新花掉了。


四板斧:他讲的是什么

先把视频摆清楚,不然后面的复盘没有参照系。

① 代码库 index。codegraph 把 repo 预先索引成可查询的图谱。Claude Code 默认是 grep → read → scan,为了找一个 auth.ts 会把路上不相关的文件全读进上下文;索引之后变成「查图谱,返回一个节点,而不是整个 repo」。

他讲的 trade-off 有三条,第一条最关键:索引让你多了一个 source of truth。 代码是一个,图谱是另一个,忘了同步,Claude 就会「自信地错」。第二条:走 query 路径会绕过模块级的 CLAUDE.md。第三条他一句带过,但对我来说是致命的——找到文件之后你还是得读文件。省的是检索的 token,不是阅读的 token。

② 压缩工具输出。 rtk(Rust 写的 CLI proxy)。npm rungit log、测试输出这类噪音日志,在进入上下文之前先压掉。他 slide 上的例子是 8,400 tokens 压到 1,010,也就是 −88% 的压缩比。trade-off 是有损。

③ 让模型少说话。 caveman,一个 skill,light / full / ultra 三档,让 Claude 像原始人一样说话,同样的信息量砍掉一半输出。trade-off 讲得很到位:**上一轮的输出会作为下一轮的 context 回灌,**你把输出压烂了,等于把自己的 context history 压烂了,agentic loop 会变笨。

④ 老老实实管 session。 /context 看谁在吃 token、/clear/model 换模型、先 plan mode 再动手。他点名了一个例子:一个 50k 的 CLAUDE.md,每次开 session 白烧 4%。

四条都对。问题不在这四条对不对。


我的五个 token 大户,四板斧只覆盖两个

先把账单摊开。 我把这个客服 Agent 平台上真正吃 token 的东西逐个量了一遍——不是猜,是 wcdu 量的:

我的 token 大户实测体量什么形态
追一条 SSE 全链路19 个文件 · 8,716 行代码,跨后端+前端
读一份企业接口文档 PDF13.0 MB 单份外部文档灌入
知识治理 / 标注语料处理5.3 MB · 24 份文档外部文档灌入
翻单日业务日志52.4 MB / 天命令输出
臃肿的 CLAUDE.md49,480 字符常驻上下文

现在把四板斧套上去:

大户codegraph 索引rtk 压输出caveman 压模型话session 管理
SSE 全链路(8,716 行)⚠️ 只帮定位,链路还是得整条读⚠️ 只能靠 /clear 断尾
接口文档 PDF(13 MB)
知识库语料(5.3 MB)
业务日志(52 MB/天)它的主场
CLAUDE.md(49,480 字符)

五个大户,四板斧真正治得了两个。

五个 token 大户 vs 四板斧的覆盖矩阵

两行 doc flood 是四个工具全空的地方——它们既不是要索引的代码,也不是要压缩的命令输出,更不是要精简的模型话。

看清楚这个矩阵在说什么:四板斧瞄准的是「代码检索 / 命令输出 / 模型输出 / 会话管理」这四个面。而我账单里最肥的两块——13 MB 的接口文档 PDF 和 5.3 MB 的知识库语料——是纯粹的「外部文档灌入」,它根本不在这四个面里。

那份 13 MB 的 PDF 是一份接口文档——企业里的文档就是这个体量,几百页,正文之外全是入参出参表、状态码表、错误码附录。Agent 要对接业务系统,就得知道每个接口怎么调、状态机怎么流转。

这份文档没有 grep 的余地。 你不能「查图谱找到它」,因为它本来就是一整份要读的东西。codegraph 索引不了它(不是代码),rtk 压不了它(不是命令输出),caveman 更管不着(不是模型输出)。它就是纯 input,硬灌。

企业落地的人对这个体量不会陌生:接口手册、业务规则汇编、标注规范、知识库语料——每一份都是几 MB 起步,而且都是「必须读懂」而不是「搜一下就行」的东西。

知识治理那 24 份语料同理——而知识库本身该怎么治理,是另一个更大的话题。

这不是 John Kim 讲漏了。是他的负载里没有这一类东西。 他做的是 coding 内容——写 web 应用、跑测试、看 build log。而任何一个真正在企业里落地 Agent 的人,token 账单里都会有一大块是「读别人给的文档」:接口手册、业务规则、标注规范、知识库语料。

这就是为什么我 82% 的用量卡在超过 150k 的 context 上。不是因为 grep 读多了文件,是因为我在往里灌 PDF。

(Agent 上线之后要喂多少语料、标多少数据,我在另一篇里算过账——那笔账和这笔是同一个池子。)


打开归因面板:省下来的,被我自己重新花掉了

Claude Code 现在会告诉你,额度是被什么样的使用形态吃掉的。原始面板长这样——这是我更早的那次快照:

95% of your usage was at >150k context
   Longer sessions are more expensive even when cached.
   /compact mid-task, /clear when switching to new tasks.

64% of your usage came from sessions active for 8+ hours
   These are often background/loop sessions.

39% of your usage was while 4+ sessions ran in parallel
   All sessions share one limit.

27% of your usage came from subagent-heavy sessions
   Each subagent runs its own requests.

然后是最近 24 小时的:

82% of your usage was at >150k context
73% of your usage came from subagent-heavy sessions      ← 27% → 73%
39% of your usage was while 4+ sessions ran in parallel
23% of your usage came from sessions active for 8+ hours ← 64% → 23%

Skills                              % of usage
/superpowers:subagent-driven-dev…      13%
/hotfix                                 6%
/superpowers:writing-plans              3%

Subagents                           % of usage
superpowers:subagent-driven-dev…       11%
general-purpose                         8%

Plugins                             % of usage
superpowers                            33%

并排放:

归因维度更早那次最近 24h变化
用量发生在 超过 150k 的 context95%82%↓ 13
来自 8 小时以上的会话64%23%↓ 41
4 个以上会话并行时产生39%39%持平
来自 subagent 密集的会话27%73%↑ 46

马拉松会话我确实治好了(64% → 23%)。/clear/compact、索引,都在起作用。

但省出来的额度立刻被 subagent 扇出吃光了(27% → 73%)。同一份面板的技能榜印证了这件事:superpowers 一个插件占 33% 的用量,subagent-driven-development 一个技能占 13%,general-purpose subagent 占 8%。

39% 的并行会话纹丝不动——四个窗口同时开着写四篇文章、改四个 repo,共享同一个额度池。

先声明口径,这很重要:面板自己写了 "independent characteristics, not a breakdown"——这四个百分比不相加,不能当饼图看。它只统计本机的 local session。两次快照是不同时间窗,是观察,不是对照实验。所以我不会说「某个工具导致了 X 下降」,只会说:我的使用形态变了,而变化的方向不是我以为的那个。

两次归因快照:省下来的被重新花掉了

马拉松会话降了 41 个点,subagent 扇出涨了 46 个点。中间没有人设闸。

省电灯泡换了一屋子,空调还开着四台。


第一刀:我的 CLAUDE.md 有 49,480 字符

视频里那个「50k 的 CLAUDE.md 每次开局白烧」的例子,字面意义上就是我。

wc -m ~/.claude/CLAUDE.md ~/.claude/rules/*.md ./CLAUDE.md
#   9994  ~/.claude/CLAUDE.md
#   6128  ~/.claude/rules/doc-verification.md
#  49480  ./CLAUDE.md          ← 这个 blog repo 的

我在一个开局就吃掉 5 万字符的仓库里,写一篇关于省 token 的文章。

问题不在于内容错——那 49,480 字符里没有一句废话,全是踩过的坑:distDir 会静默炸掉 Vercel、dev server 开着别跑 build、双语配图的高度要分语言、公众号的孤儿冒号……问题在于加载时机

写作风格规范(10 条 voice 规则 + hands-on 硬闸 + 去 AI 味 scrub)、系列生产流程(双语 frontmatter、公众号导出、CTA 关键词表)、手绘视觉规范(色板、字体、布局尺寸)——这三块加起来占了整个文件的三分之二,**而它们只在「写文章」和「做图」时才用得上。**改一行 lib/db.ts 的时候,它们一个字都用不到,却全量灌进上下文。

修法不是删,是按加载时机重新分配:

CLAUDE.md          → 每个 session 常驻(架构 + 那些沉默且昂贵的坑)
.claude/skills/    → 任务匹配时才加载(写作 / 翻译 / SEO 三条流水线)
notes/             → 只在需要溯源时读(why、how discovered、repro)

我把写作风格、生产流程、视觉规范整体搬进一个 write-post skill,CLAUDE.md 里只留一行硬指针:「起草原创文章 → 必须先 invoke write-post」。规则一条没丢——我写了个脚本逐条核对 distDir / ensurePostInDB / 避头 / Songti SC 全部还在,18 篇 notes 的引用也全在。

结果:

memory files之前之后
4 个文件合计67,987 字符30,311 字符
折算 token(实测 2.23 字符/token)≈ 30.5k13.6k

每个 session 开局白省 17k tokens。零成本,无损,没有需要同步的第二份真相。

这是全清单里投入产出比最高的一条,而它连一个工具都不用装。如果你只做一件事,做这件。

顺手扒出另外两个隐形大户

瘦身之后跑 /context,开局 46.8k tokens。拆开看:

System prompt:  5.5k
System tools:   8.8k
Custom agents:  6.0k  ·  20 agents      ← 我自己只写了 4 个
Memory files:  13.6k  ·  4 files        ← 刚瘦完的
Skills:         9.8k  ·  193 skills     ← 193 个
Messages:       3.1k
MCP tools:      0 tokens · 33 tools (loaded on-demand)   ← 注意这行

193 个 skill、20 个 agent,加起来 15.8k tokens,占开局的 34%。 我自己写了 4 个 agent,剩下 16 个是插件塞的。数了一下:huggingface-skills 一家 92 个 skill、plugin-dev 77 个 skill + 33 个 agent、pr-review-toolkit 66 个 agent、vercel 44 个 skill。我一个都没用过。 每个 skill 的 name + description 都常驻上下文,只为了让模型「知道它存在」。

MCP tools · 33 tools · 0 tokens (loaded on-demand) 那一行是对的架构——MCP 工具按需加载,用到才拉 schema,不用不占开局。 Skills 和 agents 反而是全量常驻。

检测信号:/context 里 skills + agents 超过 10k tokens,去看看那些插件你是不是真在用。


第二刀:rtk 装了,但一行 token 都没省

这一条是全篇我最想让你记住的。

rtk 我早就装了。which rtk 有输出,rtk --version 报 0.43.0。我一直以为它在替我省 token——尤其是面对那 52 MB 的单日业务日志,我觉得「有 rtk 顶着呢」。

直到我去查它到底有没有接进来:

grep -rn "rtk" ~/.claude/settings.json ~/.claude/CLAUDE.md   # 空
grep -rn "rtk" ~/.zshrc ~/.zshenv ~/.zprofile                # 空

全空。

rtk 是显式调用型的 CLI proxy——你得写 rtk git logrtk testrtk read 它才生效,它不劫持任何命令。而我的机器上,**没有任何地方告诉 Claude Code「该用 rtk」。**所以它从来没被调用过一次。

我把一个二进制下载到了硬盘上,然后以为自己省了 token。

装了 ≠ 接了:装饰品 vs 确定性 hook

安装是可见的,接线是不可见的——没有报错,没有指标下跌,你只是在「我已经优化过了」的幻觉里继续烧钱。

这不是我笨。这是一整类失败:装了 ≠ 接了。 工具的安装是可见的(which 有输出,版本号打得出来),工具的接线是不可见的——没有任何东西会报错,没有任何指标会掉,你只是在一个「我已经优化过了」的幻觉里继续烧钱。

30 秒的自查,你现在就能跑:

# 这个工具到底有没有被接进来?空 = 它是个装饰品
grep -rn "rtk" ~/.claude/settings.json ~/.claude/CLAUDE.md ~/.zshrc 2>/dev/null

真正的接法不是往 CLAUDE.md 里写一条「记得用 rtk」的规则——那是概率性的,模型会忘,而且规则本身还占常驻上下文(省 token 的规则不该费 token)。rtk 自己就喊出来了:

[rtk] /!\ No hook installed — run `rtk init -g` for automatic token savings

跑完 rtk init -g,它装的是一个确定性的 hook:

事件:    PreToolUse
matcher: Bash
command: rtk hook claude

每一条 Bash 命令在执行之前被拦截、重写成 rtk 版本。 不靠模型记性。常驻成本是一个 958 字符的 RTK.md(≈430 token),可以忽略。


真实压缩比是 32.2%,不是 88%

接上 hook 之后,rtk 自带的统计:

$ rtk gain
Total commands:    5
Tokens saved:      1.1K (32.2%)

单条命令的实测:

git log -20 | wc -c        # 7,955 字符
rtk git log -20 | wc -c    # 3,825 字符      ↓ 52%

视频里是 −88%(8,400 → 1,010)。rtk 官方 README 写的是 60–90%。我机器上的真实聚合是 32.2%。

这不是谁在撒谎。−88% 是拿一个精心挑选的 noisy build 输出算的——那种输出确实全是垃圾,压掉九成不心疼。而我的日常命令里有大量 git loggit diffls 这种本来就不太冗余的东西,压不出那么多水。

样本只有 5 条命令,跑几天会更准。但方向不会变:你能省的百分比,取决于你的命令里有多少是噪音,不取决于工具标榜了多少。

**这是本周你能带到会上的第一个问题:**任何人跟你说「我们的方案省了 X%」,问他 分母是什么、样本怎么选的、你的负载跟他的像不像

一个必须写进 checklist 的失效模式

hook 在 PreToolUse 拦截,意思是:它会静默压缩你以为是原始输出的东西。

追那条 SSE 断流的时候,我要的就是原始日志——哪一秒的 heartbeat 没发出去、哪个 connection 提前 close 了。rtk 完全可能把那一行折叠成「(842 more lines omitted)」,而我不知道。 那会变成一个「日志里明明没有这行」的幽灵 bug,能烧掉一下午。

逃生舱:

rtk proxy <cmd>     # 绕过压缩,拿原始输出

讽刺的是,这正是我在生产环境上花过 9 天的同一个失效类——你以为你在看源,其实你在看派生物。 那次是知识库的源文件和搜索索引静默失同步了 9 天,业务方在前台看到的是 9 天前的话术,而所有看板都是绿的。

同一个洞,这是第三次遇见:第一次在知识库的索引里,第二次在下面要讲的代码图谱里,第三次在我自己的终端输出里。


第三刀:codegraph 的 stale 窗口,精确到 300 秒

视频里说索引「会 stale,记得 sync」。这个说法太粗了。我去翻了 daemon 的日志:

[CodeGraph MCP] Auto-synced 18 file(s) in 261ms
[CodeGraph MCP] Auto-synced 1 file(s) in 131ms
[CodeGraph MCP] File watcher active — graph will auto-sync on changes
[CodeGraph daemon] Shutting down (idle timeout; clients=0).
[CodeGraph daemon] Listening on ... (pid 47135, v1.3.0). Idle timeout 300000ms.

读出三件事:

  1. daemon 醒着的时候有 file watcher,改动自动同步(131ms 一个文件)。视频里担心的「忘了 sync」,这一版已经治了。
  2. Idle timeout 300000ms —— 空闲 5 分钟,daemon 自己关掉。 关掉期间你改的代码,没有任何人在监听。
  3. 但它醒来会补扫(那个 Auto-synced 18 file(s) 就是补扫的形状)。

准确的描述是:stale 不是永久失同步,是「有延迟的最终一致」,延迟窗口 = daemon 睡着的时间 + 下次唤醒补扫的时间。

这个区别很要紧。「会 stale」听起来像一个你要时刻警惕的雷;「300 秒空闲后进入延迟一致」是一个你可以推理的系统属性——它告诉你:刚改完代码立刻问 Claude「这个函数在哪」,答案可能来自 5 分钟前的世界;而你连续编码时它是准的。

检测信号:

tail -20 <repo>/.codegraph/daemon.log
# 看 "Auto-synced" 和 "Shutting down (idle timeout)" 的交替节奏
# 只有 Shutting down 没有 Auto-synced —— watcher 没工作,那才是真的雷

还有一件我没预料到的:我全机器只索引了一个 repo。 那个 12.3 万行的客服 Agent 建了 .codegraph,而这个 blog 仓库——我 82% 的长上下文会话实际发生的地方——什么都没有。

工具装在了最像「需要索引」的那个仓库,而不是最烧钱的那个。这两件事不是一回事,而我从来没检查过。


caveman 我故意没装

四板斧我只上了三个。

caveman 省的是 output token。但按它自己 README 的说法,这个 skill 每轮还要倒贴 1–1.5k input token(skill 本身要进上下文)。

对我这种 82% 用量发生在超过 150k context 的会话形态,这笔账算不过来:我的瓶颈根本不在模型话多,而在我往里灌了一份 13 MB 的 PDF。 为了省输出的一半、每轮多付 1.5k 输入——净收益存疑,代价是 context history 变糙、agentic loop 变笨。

视频作者自己常年开 ultra 档。那说明他的负载跟我不一样——这恰恰是「别照抄别人配置」最好的例证。

不装是个决定,不是遗漏。


真凶:73% 的额度,被一队没写 model: 的 subagent 吃掉

回到那个 27% → 73%。

我自己写的 4 个 agent 都老老实实声明了模型:

$ grep -H "^model:" ~/.claude/agents/*.md
codegen-boilerplate.md:model: sonnet
coordinator.md:model: sonnet
debugger.md:model: sonnet
ui-helper.md:model: sonnet

然后我去翻那个占了 13% 用量的技能:

$ find ~/.claude/plugins -path "*subagent-driven-development*" -name "*.md"
.../subagent-driven-development/SKILL.md
.../subagent-driven-development/implementer-prompt.md
.../subagent-driven-development/task-reviewer-prompt.md
.../dispatching-parallel-agents/SKILL.md

这几个文件里,没有一个声明了 model:

没声明 = 继承主模型。而我的主模型是 Opus。

我的 4 个自定义 agent 规规矩矩跑 Sonnet,而这个技能一次拉起来的一队 implementer + reviewer,全跑在 Opus 上。

27% → 73% 的答案就在这里,不用猜了。

而视频 18 分 30 秒,subagent 和并行会话,一个字都没提。

不是他写漏了。是因为这四板斧治的根本不是这个层级的问题。


零售端和批发端

四板斧治的是「单次读取」的单价;真正吃掉额度的是「灌进去多少 × 并发几个 × 活了多久 × 扇出多宽」。

这是整篇的论点,也是我花了一整晚才看清的东西:

  • 零售端(视频教的):一次 grep 读多少文件、一条日志多少 token、一轮输出多少字。工具能治,收益是百分比——省 30%、省 50%。
  • 批发端(账单实际在的地方):你往里灌了一份 13 MB 的 PDF、一条 8,716 行的链路;你同时开了四个 session;你拉起一队 Opus subagent。工具治不了,因为这些是你的工作内容和工作方式,不是你的命令输出。

零售端 vs 批发端

左边是四个工具优化的东西(单次读取的单价),右边是账单真正的组成(灌多少 × 并发几个 × 活多久 × 扇出多宽)。

一个 Opus subagent 队列跑十分钟,能烧掉你用 rtk 省一整天的量。

而且省下来的会被自动重新花掉——这是最反直觉的部分。我把马拉松会话砍掉了(64% → 23%),额度松了,于是我更放心地去拉 subagent 队列(27% → 73%)。没有人在中间设闸。省出来的空间,会被下一个昂贵的习惯填满。

这就是为什么归因面板比任何一个省 token 工具都值钱:它是唯一一个告诉你「省下来的钱去哪了」的东西。


盲区怎么治:大文档不能灌,只能架

四板斧对那 13 MB 的 PDF 和 5.3 MB 的语料完全失效。但「工具治不了」不等于「没救」——只是解药不在工具层,在架构层。

核心思路就一句:把 MCP 那个「按需加载」的架构,搬到文档上。

还记得 /context 里那行吗——MCP tools · 33 tools · 0 tokens (loaded on-demand)。33 个工具,开局零成本,因为它只在被调用时才拉 schema。而 skills 和 agents 全量常驻,193 个就吃掉 9.8k。

同一个道理:文档不该「灌进 context」,该「挂在外面等着被取」。

大文档从硬灌改成按需取

转换一次、索引做薄、派便宜模型去啃——把 MCP 的 on-demand 架构搬到文档上。

三步,从「硬灌」到「按需取」

第一步:一次性转换,别每次重读。 PDF 是最糟的输入格式——排版噪音、页眉页脚、跨页断行,全都是 token。转成结构化 markdown,转一次,之后永远读转换后的

# 转换 + 切片:按接口/章节切,不按页切
python3 -c "
import pymupdf4llm, pathlib
md = pymupdf4llm.to_markdown('api-manual.pdf')
pathlib.Path('api-manual.md').write_text(md)
"
wc -c api-manual.pdf api-manual.md   # 看看瘦了多少

第二步:建一份「目录 + 索引」,让它只读需要的那一节。 Agent 要的从来不是整本手册,是「退款接口的入参是什么」。所以给它一个薄薄的接口清单(几 KB),和一个按接口名取详情的方法:

docs/api/
  INDEX.md          ← 只有接口名 + 一行说明 + 所属文件(几 KB,可以常驻)
  refund.md         ← 按需读
  logistics.md
  price-protect.md

INDEX.md 进 CLAUDE.md 或 skill;详情文件让它自己按需 Read这就是把 13 MB 的常驻成本,换成几 KB 的常驻 + 按需的几十 KB。

第三步:让便宜模型去啃文档,主 agent 只拿摘要。 这是 subagent 唯一真正省钱的用法——它省的不是算力,是主会话的 context

---
name: doc-scout
description: 只读文档侦查——从大文档里找出问题的答案,返回结论 + 出处,不返回原文
model: haiku
tools: Read, Grep, Glob
---
你是文档侦查兵。任务:在指定文档里找到答案,返回结论 + 章节出处。
不要贴大段原文——主 agent 的 context 很贵,你的不贵。

主会话问「退款接口怎么判断可退」,doc-scout 用 Haiku 去啃那几百页,只把结论带回来。主会话的 context 里进的是 200 字,不是 13 MB。

注意这里的反转: subagent 是我账单里 73% 的元凶,但那是因为它跑在 Opus 上、被用来干「实现 + review」这种本来就贵的活。同一个机制,换成 Haiku 去干「读文档、找答案」,它从最大的成本项变成最有效的省钱项。

贵的不是 subagent,是没声明模型的 subagent。

73% 那个口子:给每个 agent 声明 model

# 找出所有没声明 model 的 agent —— 它们全在跑你的主模型
grep -L "^model:" ~/.claude/agents/*.md
grep -rL "^model:" ~/.claude/plugins/*/*/agents/*.md 2>/dev/null

自己写的 agent 一律显式声明。搜索/定位/读日志/啃文档这类只读侦查的活,model: haiku 足够;实现和 review 才值得上大模型。

至于插件里那些没声明 model 的(比如我那个占 13% 用量的 subagent-driven-development),你改不了它的源文件——能改的是调用习惯:重武器只用在真正独立的多任务上。写文章、改配置、单文件重构,一个 agent 就够。

诚实交代: 上面这三步里,doc-scout 我建好了,PDF 转换和索引拆分还在做——下一篇会带实测数字回来。 这一篇里已经量完的(CLAUDE.md 瘦身 30.5k→13.6k、rtk hook 32.2%),都是跑完的。


判断表:什么时候开,什么时候必须关

场景codegraphrtkcavemansubagent 扇出
熟悉一个陌生的大代码库✅ 它的主场✅ 开⬜ 随意❌ 别拉队
日常写功能 / 改一个模块✅ 开✅ 开⚠️ 看 context 长度❌ 单 agent 够了
追全链路 bug / 翻原始日志✅ 开rtk proxy)——有损压缩会吃掉你要找的那一行❌ 关❌ 关
刚改完代码立刻问「这函数在哪」⚠️ 索引可能还是 5 分钟前的世界✅ 开
灌大 PDF / 知识库语料四板斧全部失效 —— 老老实实拆分、抽取、只喂需要的章节
真正独立的多任务并行✅ 开✅ 开✅ 值得——但给每个 agent 声明便宜的 model
写文章 / 改配置 / 单文件重构✅ 开绝对别用重武器

本周你能做的 10 件事

  1. 量你的大户,别猜。 wc -l 你最常追的那条链路涉及的文件,du -sh 你要喂给 Agent 的文档目录。先知道钱花在哪,再谈省。
  2. /context 看 memory files / skills / custom agents 各占多少。这是你的开局包袱。
  3. 跑用量归因面板。 看「超过 150k context / 8h+ 会话 / 并行会话 / subagent 密集」四个维度。这四个数不相加,别当饼图看。
  4. 量你的 CLAUDE.mdwc -m ~/.claude/CLAUDE.md ./CLAUDE.md。超过 3 万字符就该拆。
  5. 按加载时机重新分配:常驻规则留 CLAUDE.md,任务流水线搬 skill,溯源上下文进 notes。别删内容,改加载时机。
  6. 查你装的工具是不是装饰品grep -rn "<tool>" ~/.claude/settings.json ~/.claude/CLAUDE.md ~/.zshrc。空 = 它从没被调用过。
  7. 给压缩工具找逃生舱,并写进 checklist。用 rtk 就记住 rtk proxy <cmd>——不然你会在幽灵 bug 上烧掉一下午。
  8. grep -L "^model:" <插件>/agents/*.md。没声明 model 的,全在跑你的主模型。
  9. 看 daemon 日志,而不是相信「索引会自动同步」这句话:tail -20 .codegraph/daemon.log,找 Auto-syncedidle timeout 的节奏。
  10. 大文档不要整份喂。 13 MB 的接口 PDF 先按接口拆成片段、抽成结构化摘要,让 Agent 按需取——这一块四板斧帮不了你,只能靠架构。

反方:这套东西的复杂度成本是真的

视频作者自己在结尾讲了句很诚实的话:四个东西全上,最大的代价是复杂度。 索引会 stale、压缩有损、caveman 过度精简——你多了三个失效点要 juggle。

我要再加一条他没说的:这三个失效点的共同形状是「你以为你在看源,其实你在看派生物」。 代码 vs 图谱、原始输出 vs 压缩输出、完整历史 vs 精简历史。每一层都在你和真相之间加了一道,而每一道都会在你最需要真相的那一刻(追 bug)静默地骗你。

网上也有反方的声音,比如 Token Inflation Nightmare: Are Your Claude "Hacks" Actually Burning Your Cash?,打的就是重索引的 CPU/RAM 开销和有损压缩导致的返工。别只听一面。

我的立场:① ④ 无条件做(CLAUDE.md 瘦身 + 会话管理,零失效模式);② rtk 做,但记住逃生舱③ caveman 看你的 context 形态,我不装而最大的两个口子——大文档灌入和 subagent 扇出——工具治不了,只能靠架构和你自己盯着归因面板。


我的账还没结清

诚实交代现状:

口子状态
CLAUDE.md 常驻✅ 30.5k → 13.6k tokens/session
rtk 输出压缩✅ 已接 hook,实测 32.2%
codegraph 检索✅ 在跑,stale 窗口 = 300s idle
caveman⬜ 故意不装
大文档灌入(13 MB PDF + 5.3 MB 语料)四板斧的盲区,还没治
subagent 扇出 = 73%还在流血
插件常驻(193 skills / 20 agents)⬜ 待砍,预计再省 ~10k/session
4+ 并行会话 = 39%❌ 习惯问题,工具治不了

我把灯泡全换成 LED 了,四台空调还开着。

上面那套「按需取」的架构我已经开始搭了。下一篇带实测数字回来:13 MB 的 PDF 拆成索引 + 片段之后,一次接口对接实际进 context 的是多少 token;以及把只读侦查全部降到 Haiku 之后,那个 73% 掉到了几。


回复关键词「账单归因」,我把这次实测用的东西发你:/context + 归因面板的逐项拆解模板、「工具是不是装饰品」的 5 条自查命令、CLAUDE.md → skill → notes 的三层拆分清单、以及上面那张覆盖矩阵和开关判断表。

回复渠道见页脚(公众号 / X)。不方便回复的,评论区留邮箱也行。

Subscribe for updates

Get the latest AI engineering posts delivered to your inbox.

评论