🐒 大家好,我是阿衡,一年经验用了十次的游戏后端开发,辞职后成为自由职业、独立游戏开发者。
非专业 AI 玩家,日常关注 AI 编程方向的内容。
🎯 这是 Claude Code Skills 系列的第二篇,这篇文章主要介绍:Claude Code Skills 的底层加载机制和 token 经济学,搞懂为什么能装 100 个 Skills 却不卡。
最近折腾 Claude Code 的 Skills,看了不少资料,发现一个反直觉的数据——
100 个 Skills,启动时只消耗 3,000-5,000 tokens。
等等,这不对劲啊。一个 Skill 动辄几百行指令和代码,100 个加起来怎么可能这么少?
带着这个疑问,我把 Anthropic 官方文档和几篇技术博客翻了一遍,总算搞明白了 Skills 的底层机制。分享一下,希望对同样好奇的朋友有帮助。
Skills 到底是什么?
先说技术本质。Teng Yan 在推特上有一句话说得特别精准[1]:
"Skills are plain files with instructions and code. Claude loads, uses, then drops them per task."
翻译一下:Skills 就是包含指令和代码的普通文件。Claude 按需加载、用完就扔。
这个"用完就扔"很关键。Skills 不是常驻内存的插件,不是后台运行的服务,而是一种"即取即用"的能力模块。
打个比方:传统的软件插件像是装在电脑里的 APP,一直占着内存;而 Skills 更像是你手边的工具书——需要的时候翻开看,用完就放回书架。
这个设计带来一个好处:你可以装一大堆 Skills,但不会拖慢 Claude Code 的启动速度。
渐进式加载:为什么 100 个 Skills 只消耗几千 tokens?
这就要说到 Skills 的"渐进式加载"机制了。
Anthropic 官方的 skill-creator 文档里,把 Skills 的加载分成了三个级别[2]。
第一级是 Metadata,也就是 SKILL.md 文件开头的 YAML frontmatter——name 和 description 两个字段。这部分大概 100 个词左右,始终在上下文里。
第二级是 SKILL.md 的正文内容。官方建议控制在 5000 词以内,但这部分只有在触发 Skill 之后才会加载。
第三级是打包的资源文件,比如脚本、参考文档、模板等等。这部分按需加载,用到哪个读哪个。
所以答案就清楚了:启动时,Claude 只读取每个 Skill 的 YAML frontmatter,而不是完整内容。
Ali Moradi 在他的技术文章里算过一笔账:单个 Skill 的 frontmatter 大概消耗 30-50 tokens[3]。100 个 Skills 加起来,也就是 3,000-5,000 tokens——对 Claude 的上下文窗口来说,毛毛雨。
这就解释了为什么 Claude Code 可以支持大量 Skills 而不影响性能。它不是把所有东西都塞进上下文,而是维护了一个"目录",需要的时候再去"翻书"。
description 字段:触发的关键
说到这儿,有一个细节值得单独拎出来讲。
官方文档里强调:所有"when to use"的信息必须放在 description 里,而不是 SKILL.md 的正文里。
为什么?因为正文只有触发后才加载。Claude 判断"要不要用这个 Skill",靠的全是 frontmatter 里的 description。
这就像写简历的"一句话介绍"——HR 扫一眼这句话决定要不要看你的完整履历。description 写得不好,你的 Skill 可能永远不会被触发。
官方给了一个 docx Skill 的例子:
---
name: docx
description: "Comprehensive documentcreation,editing...WhenClaudeneedstoworkwithprofessionaldocuments(.docxfiles)for:(1)Creatingnewdocuments,(2)Modifyingoreditingcontent,(3)Workingwithtracked changes..."
---
注意看,description 里明确列出了触发场景:创建文档、修改内容、处理修订标记……这些关键词就是 Claude 判断"该不该加载这个 Skill"的依据。
热重载:开发体验的巨大提升
今年 1 月,Claude Code 从 v2.0.76 升级到 v2.1.1,带来了几个重要更新。对 Skill 开发者来说,最实用的是热重载。
Eric Wang 在推特上介绍了这个特性[4]:
"Hot-reload skills - no restart needed when creating / modifying skills"
以前改一个 Skill,要重启 Claude Code 才能生效。现在改完直接生效,不用重启。
听起来是个小功能,但实际开发中体验差别很大。一个 Skill 从初版到好用,可能要迭代几十次。每次迭代省 30-60 秒,累计下来节省的时间相当可观。
同一个版本还带来了另一个特性:Fork 上下文支持[4]。
简单说,就是 Skills 可以在一个隔离的子代理环境里运行,不会污染主会话的上下文。这对测试 Skill 来说很有用——你可以放心地跑各种实验,不用担心搞乱当前的工作。
设计哲学:"Skills > Agents"
聊完技术细节,说说我从这些资料里感受到的设计哲学。
elvis(Omar Sanseviero)分享过 Anthropic 关于"Skills > Agents"演讲的笔记,有一句话让我印象很深[5]:
"The more skills you build, the more useful Claude Code gets."
你构建的 Skills 越多,Claude Code 就越有用。
这其实是一种"持续学习"的设计思路。传统的 AI 模型,能力是固化在训练里的;而 Skills 把能力外部化了,变成了可以动态加载、演化、甚至遗忘的模块。
Teng Yan 有一个更激进的判断:
"Retraining moats shrink. The skills marketplace becomes the new OS."
重训练的护城河在缩小,Skills 市场才是新的操作系统。
不管这个判断对不对,有一点是确定的:Anthropic 在 Skills 上投入了大量设计心思,它不只是一个"插件系统",而是 Claude Code 持续进化的底层机制。
写 Skill 的几个实用建议
最后分享几个从官方文档和实践中学到的经验。
SKILL.md 保持精简。官方建议正文控制在 500 行以内。超过的内容拆到 references/ 目录,按需加载。上下文窗口是公共资源,每一行都要值得它占用的 token。
description 写清楚触发场景。不要只写"这个 Skill 能做什么",要写"用户说什么话、遇到什么情况时应该触发这个 Skill"。
善用三个目录:scripts/ 放可执行脚本,references/ 放参考文档,assets/ 放模板和资源。分类清晰,按需加载。
迭代优化。Skill 不是写完就完事了。在真实任务中用它,注意卡顿和低效的地方,持续改进。现在有热重载,迭代成本低了很多。
小结
折腾了一圈,我对 Skills 的理解可以概括成一句话:
Skills 是 Claude Code 的"能力书架"——平时只看书脊(frontmatter),需要时才翻开(body),用完就放回去。
这个设计既保证了扩展性(你可以有很多 Skills),又保证了性能(不会拖慢启动和响应)。渐进式加载 + 热重载,让开发和使用都变得更顺畅。
如果你也在用 Claude Code,不妨试试写一个自己的 Skill。从一个简单的项目记忆系统开始,体验一下这套机制的精妙之处。
参考资料
1: @tengyanAI. "Skills 技术本质与市场生态."
2: Anthropic. "Official Skills Repository - skill-creator."
3: Ali Moradi. "Claude Code Skills: The Engineering Handbook for Production-Grade Agentic Systems."
4: @ericwang42. "Claude Code v2.0.76 → v2.1.1 更新."
5: @omarsar0. "Skills > Agents 演讲笔记."
💬 你平时是怎么扩展 Claude Code 能力的?欢迎在评论区分享你的方法!
👍 觉得有用的话,记得点赞收藏,让更多人看到这篇文章!
- #公众号:阿衡的AI日常 - #小红书:阿衡的AI日常
- #CSDN:DebugEve
- #掘金:阿衡Eve