
文章目录前言一、第一个误区SKILL.md不是一次性全塞进context的二、那SKILL.md写一堆内容token不就爆了吗三、Claude凭什么靠description就决定加不加载第一要用第三人称、客观陈述的口吻写第二要把用户真实会说出口的触发短语列进去第三触发过度时要加负面条件四、SKILL.md里引用的脚本和资源是怎么进context的五、面试怎么答SKILL.md的加载机制第一步先纠正全量加载这个前提30秒第二步讲清三级分别是什么、各自什么时候加载1分钟第三步讲description怎么决定触发30秒第四步讲资源是读不是注入30秒写在最后P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01前言上周有个学员去滴滴面试回来跟我说老师我凉了。我说怎么了他说前面聊得挺顺自己写过一个Claude Code的Skill吹得天花乱坠。面试官点点头问了一个看起来特别基础的问题“你这个Skill装上之后SKILL.md是一次性全部读进context的吗”学员想都没想“对啊装上就加载进去了Claude才知道这个Skill是干嘛的。”——各位这就是典型的我觉得我对了。就像你追女神人家回你个嗯你觉得你们有戏了。面试官没接话停顿了两秒然后笑了一下把笔放下“那我问你——我装30个Skill每个写两三千字是不是开局还没说话context就被塞满了”学员愣住了。他确实没想过这个问题。他下意识答“那……那可能会占用挺多token的吧。”——这回答就像你女朋友问你错哪了你说我哪儿都错了看似诚恳实则啥也没说。面试官摇摇头拿出手机翻到Anthropic官方文档转过来给他看“人家不是全量加载的是progressive disclosure渐进式披露。分三级启动时只加载metadata正文按需加载资源文件让模型自己用工具去读。你连第一步都搞错了。”学员后背一凉。他说那一刻他突然意识到自己用了一个月的Skill居然从来没搞懂它最核心的机制是什么。就像你用了一个月洗衣机突然有人告诉你“其实那个桶不用每次都装满水。”面试官还没停接着追了三连问。这三个问题下去学员一个都没答利索。这场面试在他走出会议室的时候基本就凉了。他回来问我这几个问题到底怎么答。我说这正好是一条特别好的追问链——从加载机制一路问到触发设计再问到资源读取层层往下挖挖的就是你到底有没有真正理解Skill这套东西是怎么跑起来的。今天我把这条链从头到尾拆一遍。一、第一个误区SKILL.md不是一次性全塞进context的先把面试官那句话掰开。很多人对Skill的理解停留在装上加载进上下文这是把Skill当成了一段固定的system prompt。如果真是这样那面试官的反问就成立了装30个Skill每个两三千字光这些文件就能把上下文窗口吃掉一大块模型还没开始干活token预算先没了一半。Anthropic的设计显然不会这么蠢。它的核心机制叫Progressive Disclosure渐进式披露官方文档里把它列为Skill的第一条设计原则。一句话概括按需加载谁用到谁加载没用到的内容根本不进上下文。具体分成三级第一级 MetadataYAML frontmattername description启动时永远加载进上下文但极小第二级 InstructionsSKILL.md正文Claude判断该Skill与当前任务相关时才触发触发了才进第三级 Resourcesreferences/、scripts/、assets/里的文件Claude主动用工具去读时读了才进这张表是整篇文章的骨架。先记住一个判断**任何时候你的上下文里都不会同时塞着所有Skill的全部内容。**平时躺在上下文里的只有每个Skill那几十个token的metadata。就像你去KTV包间里不会同时放着所有歌的完整音频只有歌单。你想唱《孤勇者》的时候系统才给你放这首歌。二、那SKILL.md写一堆内容token不就爆了吗这是面试官的第二问也是最容易暴露理解深度的地方。答案是不会爆因为正文第二级平时根本不在上下文里。我们顺着启动流程走一遍。当你在Claude Code里装了一堆Skill启动的瞬间进入系统提示的只有每个Skill的第一级metadata——也就是SKILL.md文件最上面那段YAML frontmatter里面就两个核心字段---name:pdf-extractordescription:Extract tables and text from PDF files. Use when the user uploads a .pdf and asks to pull out tables,parse invoices,or convert PDF content to markdown.---这段东西有多大官方给的量级是每个Skill大约100 token。你装30个也就3000 token左右对于动辄20万token的上下文窗口来说几乎可以忽略。所以Anthropic反而鼓励你装很多个细分的Skill而不是把功能全堆进一个臃肿的大Skill——因为多装几个的成本仅仅是多几段metadata而已。就像你微信好友列表有5000人但你的大脑不会同时想着5000个人的全部人生故事你只会记得他们的备注名。真正的大头——SKILL.md正文停在硬盘上没进上下文。只有当用户发来的请求命中了某个Skill的descriptionClaude判断这个任务跟这个Skill相关它才会去把那个SKILL.md的正文读进来。所以这里有一个特别关键的认知**metadata是常驻的、廉价的正文是按需的、一次只进一两个的。**一次对话里通常只有一到几个Skill的正文会被真正加载。哪怕你装了50个Skill写得再长只要这次任务只触发其中一个进上下文的也就那一个的正文。算笔账就更直观了。假设你装了50个Skill每个SKILL.md正文都写满到5000词的上限。如果是全量加载那套理解光这些文件就是几十万token直接把上下文撑爆。但在渐进式披露下常驻的只有50段metadata大约5000 token这次对话触发了2个Skill再加进去两份正文也就一万出头token。两种算法差出几十倍——差距全在按需这两个字上。这就是为什么面试官敢断定你连第一步都搞错了把机制搞反token预算的量级估计能差一个数量级。就像你去饭店吃饭全量加载是把所有菜都端到你面前按需加载是你点啥上啥。你要是点了50道菜那确实桌子放不下但你只点了两道老板非要摆50道你是不是觉得老板有病这也顺带解释了官方为什么对两个地方有体积限制description限制在1024字符以内——因为它是metadata常驻系统提示每个字符都在持续占用窗口SKILL.md正文建议控制在5000词以内——因为它一旦触发就整个进上下文太大照样拖慢推理、挤占预算。换句话说token会不会爆取决于你有没有踩中体积红线而不取决于你装了多少个Skill。机制本身已经帮你把装得多这件事的成本压到了最低。就像你买房物业费是按面积算的不是按你买了多少套房算的。你买50套小户型平时只住一套物业费只交一套的钱。三、Claude凭什么靠description就决定加不加载到这里面试官的第三问就接上了既然metadata里就name和description两个字段Claude凭什么靠这么点信息就能准确判断该不该加载正文关键全在description怎么写。Claude在每次收到用户请求时会拿这次请求去和上下文里所有Skill的description做匹配——本质上是一次语义判断这个Skill描述的能力跟用户现在想干的事是不是同一件事“description写得准它就触发得准description写得糊它要么该触发不触发undertriggering要么瞎触发overtriggering。就像你相亲介绍人跟你说这人挺好的”你去了发现对方是个道士——介绍人没骗你但描述太模糊匹配出了偏差。官方给的description公式是做什么 何时使用触发条件 关键能力。三个要素缺一不可而新手最容易漏掉的是中间那个何时使用。对比一下就很清楚# 不好的写法 —— 太泛Claude不知道什么时候该用description:Helps with documents.# 不好的写法 —— 只说了做什么没说何时用description:Creates sophisticated multi-page documentation systems.# 好的写法 —— 做什么 何时使用 具体触发短语description:Analyzes Figma design files and generates developer handoff docs. Use when the user uploads a .fig file or asks for design specs,component documentation,or design-to-code handoff.这里有三个很多人不知道的细节第一要用第三人称、客观陈述的口吻写description是写给Claude看的这个Skill是什么、什么时候用它不是写给用户的广告语也不是第一人称的自我介绍。“Use when the user asks to…“这种句式就是标准写法——它在帮Claude建立用户说了X我就该调用这个Skill的映射。就像你给室友留便条写当你看到冰箱空了就去买菜”而不是我看到冰箱空了我去买菜”——后者是日记前者才是指令。第二要把用户真实会说出口的触发短语列进去不要写处理设计文件要写用户实际会说的话“设计规格”“组件文档”“设计转代码”。Claude匹配的是语义但你给的短语越贴近真实表达命中率越高。这也是为什么官方建议description尽量用英文——Claude对英文触发短语的匹配更稳定中文有时会有识别偏差。就像你教老外说中文你说我想吃饭他能懂你说俺寻思整点吃的他就懵了。第三触发过度时要加负面条件如果你的Skill老是在不相关的场景被误触发可以在description里直接写明边界比如仅用于在线支付工作流不适用于一般金融查询或者不适用于简单的数据探索请改用data-viz Skill“。把不该触发的场景也告诉Claude它的判断就会收敛。就像你告诉导航我要去机场但别走高速”导航就知道该怎么绕了。调试description还有个很实用的技巧官方文档里也提到了**直接问Claude你什么时候会用这个Skill**它会把它理解的description复述给你听。如果它复述出来的触发场景跟你预期的不一样那就说明description没写到位照着它的反馈改就行。就像你让朋友复述你的意思他说出来的跟你想的差十万八千里那肯定是你的表达有问题。四、SKILL.md里引用的脚本和资源是怎么进context的这是最后一问也是把渐进式披露理解透了才答得上来的一问。很多人会想当然地以为既然SKILL.md触发后会被加载那它references/、scripts/目录里的文件是不是也跟着一起被加载进来了**不是。第三级资源的加载方式和前两级有本质区别——它不是被注入的而是被Claude主动读取**的。这是什么意思SKILL.md正文被加载进上下文后Claude看到的只是文字。如果正文里写了一句在编写查询前请查阅references/api-patterns.md其中包含速率限制和分页模式那么Claude此刻并没有把那个文件读进来——它只是知道有这么个文件、在那个路径、讲的是这些内容。只有当任务真的推进到需要那份文档时Claude才会调用工具在Claude Code里就是Read或Bash把那个文件的内容读进上下文。读进来的也只是它当下需要的那一个文件而不是整个目录。就像你去图书馆管理员给你一张书单书单在桌上书在书架上。你需要哪本自己去拿而不是管理员把整层楼的书都搬到你的桌上。这个差别在工程上极其重要它带来两个直接的好处**第一资源文件的体积几乎没有上限。**因为它们不常驻、不自动加载你可以在references/里放很长很详细的API文档、几百行的示例、大段的错误码表。它们躺在那里不占任何上下文只在被点名读取的那一刻才花token。这正是官方反复强调的那条最佳实践——**SKILL.md正文只放核心指令详细内容全部下沉到references/正文里用链接引用。**就像你写论文正文只写结论参考文献里塞满各种资料评委不会要求你把参考文献全背下来。**第二scripts/里的脚本是被执行的不是被理解的。**这是Skill设计里一个很精妙的点对于确定性的逻辑比如数据校验、格式转换与其用自然语言在SKILL.md里描述一堆规则让模型去理解和执行——语言解释是不确定的——不如直接写成一个脚本让Claude用工具去运行它。官方原话是代码是确定性的语言解释不是。所以你会看到很多成熟的SkillSKILL.md里只写一句运行python scripts/validate.py --input {文件名}来校验数据真正的校验逻辑全在那个脚本里。Claude读到这句就去执行脚本拿回结果而不需要把脚本的几百行代码读进上下文逐行理解。就像你让助理去办事你说把这份文件复印一份助理自己去操作复印机你不会跟助理描述复印机的每一个齿轮怎么转。把这一层想明白你就理解了Skill的完整图景**metadata负责让Claude知道有这个能力正文负责告诉Claude怎么用这个能力资源和脚本负责在需要时提供确定性的细节和执行力。**三级各司其职每一级只在恰当的时机花恰当的token。这就是渐进式披露的全部精髓。就像一家餐厅前台负责接待metadata厨师负责做菜正文仓库负责提供食材资源。前台不会把仓库所有食材都搬到厨房厨师也不会把仓库钥匙挂在脖子上——各干各的按需调用。五、面试怎么答SKILL.md的加载机制如果面试官问到这条链我建议你按下面这个节奏答层层递进把四个点都覆盖到第一步先纠正全量加载这个前提30秒开口就说SKILL.md不是一次性全部读进context的Anthropic用的是Progressive Disclosure渐进式披露分三级按需加载。一句话就把基本盘立住了面试官会知道你懂机制而不是背概念。就像你打架第一拳就要把对方打懵后面才好发挥。第二步讲清三级分别是什么、各自什么时候加载1分钟Metadatanamedescription启动时常驻、每个约100 token正文在Skill被判断相关时才加载、建议5000词以内资源文件由Claude主动用工具读取。顺手抛出结论“所以装很多Skill也不会爆token常驻的只有那点metadata。”第三步讲description怎么决定触发30秒公式是做什么 何时使用 触发短语第三人称写列用户真实会说的话触发过度就加负面条件。能补一句可以直接问Claude什么时候会用这个Skill来调试是加分项。就像你考试答完标准答案再补一句我还实测过老师立马觉得你是个实干派。第四步讲资源是读不是注入30秒强调资源文件和脚本是Claude主动调用工具读取/执行的所以体积没上限确定性逻辑应该写成脚本而不是写进正文。这一步答出来面试官基本就确认你是真做过了。就像你去面试厨师你说我不仅会炒菜还知道冰箱里的食材是怎么拿出来的——这就不只是会做菜了你是懂厨房管理的。写在最后回头看滴滴那位面试官的追问链它其实没有一个问题是刁难——从是不是全量加载到token会不会爆到description怎么触发再到资源怎么读取每一问都是上一问的自然延伸。你只要真正写过一个Skill、被它的触发机制坑过几次这四个问题是连在一起的、是一口气能答完的。答不上来恰恰说明只是把SKILL.md当成了一个写指令的文件没去想它背后那套加载逻辑。就像你开车你会踩油门但你不一定会换轮胎真正懂车的人两者都会。背答案的人和真正做过的人说话方式完全不一样。前者说SKILL.md会按需加载用了progressive disclosure后者会说我装了二十多个Skill实测过常驻上下文的只有每个约100 token的metadata正文一次对话通常只触发一两个有一次我的description写得太泛Claude在不相关的请求里反复误触发我加了一句负面条件、把触发短语换成用户真实说法之后才收敛。面试官三句话就能听出来你是哪种人。就像你相亲一个人说我挺会照顾人的另一个人说我上周刚给发烧的女朋友熬了三天粥还学会了怎么挑梨——你觉得哪个更可信P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01