Claude Code Skill 和 Subagent 哪个更省 Token
Skill 和 Subagent 都是 Claude Code 的"任务封装"机制——但它们的 Token 消耗结构完全不同。Skill 一直在主上下文里,Subagent 是隔离上下文。这篇拆解什么场景用哪个更省。
Claude Code 的两个高级特性——Skill 和 Subagent——经常被混着说。但它们对 Token 消耗的影响完全不同。
简短结论:
- Skill 让主上下文变重,每次 input 都涨
- Subagent 让 input 变轻,但产生独立的 output 成本
什么场景用哪个能省钱?这篇拆开讲。
Skill 的本质
Skill 是 Claude Code 在 1.x 后引入的特性——把一段 prompt 模板封装成一个"工具",每次会话开始时注入主上下文。
举例:你写一个 "code-reviewer" skill,里面是 30 行 prompt 描述 review 规则。Claude Code 启动时这 30 行就被加进系统提示里。
优势:高度可复用,所有会话都能调用。 代价:每次 input 都包含所有 skill 的描述,input token 永久涨。
如果你装了 5 个 skill,每个 30 行(约 1500 token),那就是 7500 token 加进每次 input。一个月 1000 次调用 = 750 万 token 增量。按缓存价 0.3 美元/百万算,2.25 美元。看起来不多,但累计起来不忽略。
Subagent 的本质
Subagent 是另一种"任务委托"机制——主 Claude Code 把一个子任务派给一个独立的子上下文,子上下文跑完返回结果给主线程。
举例:你让主 Claude Code 修一个 bug,它说"我先派一个 reviewer subagent 检查代码风格"——subagent 启一个新 context,读相关文件、给出 review 意见、返回。主线程拿到 review 结果继续下面的工作。
优势:子任务有独立上下文,不污染主上下文。 代价:每个 subagent 是一次完整 LLM 调用——input 包含 subagent 的系统提示 + 它要看的文件,output 是它的回复。
Skill vs Subagent 的成本对比
我做过一个对照实验。同一个任务(让 Claude Code 写一个组件,并自动跑 code review):
方式 A:Skill
把 code-reviewer 当 skill 装进去。任务跑完后 skill 在主上下文里产生 review。
- 主 session 累计 input:220K token
- 主 session output:6K token
- 总成本:约 0.69 美元
方式 B:Subagent
写完代码后 spawn 一个 reviewer subagent。
- 主 session 累计 input:180K token(少了 skill 的描述)
- 主 session output:5K token
- subagent input:35K token(独立上下文 + 它读的文件)
- subagent output:800 token
- 总成本:约 0.58 美元
Subagent 总成本比 skill 低 16%——因为它把 review 任务隔离了,主上下文不再被污染。
但场景不同结论会变
实验里 subagent 赢,是因为 review 是个只跑 1-2 次的事。如果是高频调用——
Skill 在高频调用下赢:因为 skill 描述被缓存(命中率 90%+),实际单次成本极低。每次调用复用同一份 skill 描述,缓存命中率几乎 100%。
Subagent 在高频调用下亏:每次 spawn subagent 都是一次完整新调用,每次都要重建上下文。
我自己的规则:
- 每天调用 < 5 次:用 Subagent,独立上下文更干净
- 每天调用 > 20 次:用 Skill,缓存命中下基本免费
- 5-20 次:看任务复杂度,复杂的 Subagent 隔离更稳
一个常见误用
最常见的反模式:装了一堆 skill,但 80% skill 一个月用不到一次。
我自己有过一段时间装了 12 个 skill。看 Vibe Usage 数据发现,其中 7 个一个月调用次数为 0。但它们一直在每次 input 里占位——每次会话多花 5-10K token 给我"我用不到的能力"。
清理之后我只留 3 个高频 skill,每月 input 减少 30%。
Subagent 的另一个隐性成本
Subagent 看似省钱,有个容易忽略的代价——它独立 context 意味着没有继承主线程的"记忆"。
如果你的 review 需要知道"主线程刚才讨论了什么设计原则",subagent 拿不到——你必须显式把这部分背景塞进 subagent 的初始 prompt。
塞背景就是 Token——主线程历史可能 80K,你只需要传 5K 关键信息。如果你不精挑细选,反而塞进去 40K,subagent 就贵了。
怎么测自己的成本结构
把 Vibe Usage 装上看 Claude Code 的会话结构,能看到:
- 每个 skill 实际被调用的次数
- 每个 subagent 调用的 token 消耗
- 主线程 vs 各 subagent 的成本占比
我看自己数据时发现:装了 12 个 skill 但 9 个用不到,subagent 调用其实非常少。删掉 9 个 skill 之后单次会话 input token 直接砍 30%。
简单决策表
| 场景 | 推荐 |
|---|---|
| 每天必用、高度可复用 | Skill |
| 偶尔用、需要独立 context | Subagent |
| 复杂、需要带主线程上下文 | 主线程直接做(不抽象) |
| 用不到 1 个月一次 | 删掉 |
用 Vibe Usage 收集数据后再决策,比凭感觉抽象更精准。