2025 年 10 月 16 号,Anthropic 正式推出了 Agent Skill。起初官方对它的定位相当克制,只是希望用它来提升 Claude 在某些特定任务上的表现。但大家很快发现,这套设计实在是太好用了,因此行业里很快就跟上了节奏,包括 VS Code、Codex、Cursor 等工具都陆续加入了对 Agent Skill 的支持。在这样的背景下,12 月 18 日 Anthropic 做出了一个重要决定:正式将 Agent Skill 发布为开放标准,支持跨平台、跨产品复用。这意味着 Agent Skill 已经超越了 Claude 单一产品的范畴,正在演变为 AI Agent 领域的一个通用设计模式。

那么这个让大厂纷纷跟进的 Agent Skill,到底是解决了什么核心痛点?它和我们熟悉的 MCP 又有着怎样的区别和联系呢?今天这期视频,我们就分几个部分彻底讲清楚这个 Agent Skill。首先从 Agent Skill 的概念出发,给大家讲明白它到底是个什么东西;接着给大家演示一下它的基本使用方法。在了解了基本用法之后,我们再来看看它的高级用法:高级用法一共包含两块,分别是 Reference 和 Script。最后我会把 Agent Skill 和 MCP 做个比较,告诉你到底应该选哪一个。好了话不多说,让我们直接开始——哦,不好意思,只是想证明自己不是 AI,那我们现在真的要开始了。

那什么是 Agent Skill 呢?用最通俗的话来讲,Agent Skill 其实就是一个大模型可以随时翻阅的说明文档。举个例子:比如你想要做一个智能客服,可以在 Skill 里面明确交代“遇到投诉得先安抚用户的情绪”、“而且不得随意承诺”。再比如你想要做会议总结,可以直接在 Skill 里面规定“必须要按照参会人员、议题、决定这个格式来输出总结的内容”。这样一来,就不用每次对话都去重复粘贴那一长串的要求了。大模型自己翻翻这个说明文档,就知道该怎么干活了。

当然,“说明文档”只是一个为了方便理解的简化说法,实际上 Agent Skill 能做的事情要远比这个强大,它的高级功能我们待会儿就会讲到。不过在目前的起步阶段,你就把它当成是一个说明文档就行。下面我就用“会议总结”这个实际的场景,带大家看看它到底是怎么使用的。这里我们使用 Claude Code 来演示如何使用 Agent Skill。要想使用 Agent Skill,那当然是要先创建一个了。根据 Claude Code 的要求,我们需要在用户目录下的 .claude/skills 文件夹创建我们的 Agent Skill。

所以就让我们先进入到这个文件夹中,然后执行 mkdir 会议总结助手来创建一个文件夹。这个文件夹的名字就代表了我们 Agent Skill 的名字。然后使用 VS Code 来打开这个文件夹,这样的话我们编辑文件会更方便一些。打开这个文件夹后,我们在里面创建一个叫做 skill.md 的文件,然后填好这个文件的具体内容。就是这样了:每一个 Agent Skill 都需要有这么一个文件,它用来描述这个 Agent Skill 的名称、能干什么事以及怎么干这个事情。

比如我们这里要创建的 Agent Skill,就是用于总结会议录音内容的。它的 skill.md 一共分为两部分:头部的这几行被两段短横线包起来的是叫做元数据(英文叫做 Metadata)。这一层就只写了 name 和 description 这两个属性。name 是 Agent Skill 的名称,必须与文件夹的名字相同;name 的下面是 description,它代表这个 Agent Skill 的描述,主要是向大模型说明这个 Agent Skill 是用来干什么的。

再看下面剩余的部分,这个就是具体的 Agent Skill 的说明了。官方把这一部分叫做指令(对应的英文是 Instruction)。这一部分就是在详细描述模型需要遵循的规则。比如说你看这里,我规定了它必须要总结参会人员、议题和决定这几个方面的内容。为了确保它真的理解了,我这里还举了一个例子:输入的是会议的录音内容,然后输出的就是我们所需要的格式了。好,现在我们的 Agent Skill 应该是做好了——对,就是这么简单,就是一个说明文档。

下面我们打开 Claude Code 来验货。首先随便找一个空目录,打开 Claude Code,然后输入下面这个问题:“你有哪些 Agent Skill?”Claude Code 给我们回答了。可以看出它已经发现了我们写好的 Agent Skill。然后我们来看看 Claude Code 是怎么使用这个 Agent Skill 的:我们输入请求“总结以下会议的内容”,然后粘贴一段会议录音文本,回车。让我们看看 Claude Code 会如何应付我们这个问题?

好,Claude Code 有反应了。大家注意看屏幕这里:Claude Code 并没有直接开始瞎编,它根据我的指令意识到了这事归我们刚才上传的那个 Agent Skill 管。所以它是在向我询问:能不能使用这个 Agent Skill?那我们当然是同意了。同意之后,它就开始读取我们写的那个会议总结助手了——主要就是读取其中的那个 skill.md 文件。让我们稍作等待……好,结果出来了:参会人员、议题、决定三点都清清楚楚!这完全符合我们在 Skill 里面定的规矩。这个就是 Agent Skill 的基础用法了,是不是很简单?

现在你知道了如何创建和使用 Agent Skill,那不妨让我们想想刚才到底发生了什么。首先整个流程中一共有三个角色:用户、Claude Code 以及 Claude Code 背后所使用的大模型(在我们的例子里,这个就是 Claude 模型)。流程一开始的时候,用户会输入请求。此时 Claude Code 会把用户的请求连同所有 Skill 的名称和描述一起发给大模型——注意,这里只带了名称和描述(也就是我们前面所说的 Skill 元数据层)。

虽然说我们之前只演示了一个 Skill,但是你可以想象一下:哪怕你装了十几个 Skill,此时的大模型也只是在看一份轻量级的目录。因为毕竟只有名称和描述嘛!在接到了用户请求和每一个 Skill 的名称描述后,大模型会发现用户的请求可以使用“会议总结助手”这个 Agent Skill 来解决。此时它就会把这个信息告诉 Claude Code。

Claude Code 接到大模型的响应之后,会去“会议总结助手”那个目录里面读取完整的 skill.md 正文。对,这个时候读取的才是 skill.md 的全部内容(之前就只是名称和描述)。而且要注意:它只读取了“会议总结助手”这一个 Agent Skill 的内容。在拿到了“会议总结助手”的 skill.md 内容后,Claude Code 会把用户的请求和完整的 skill.md 内容发给大模型。

大模型会根据 skill.md 的要求来生成响应,并且把响应发给 Claude Code。Claude Code 进而会把这个响应发回给用户——这样用户就可以看到结果了。这就引出了 Agent Skill 的第一个核心机制:按需加载!虽然 Skill 的名字和描述是始终对模型可见的,但具体的指令内容只有在这个 Skill 被选中之后才会被加载进来给模型看。这就节省了很多的 Token 了!

前面我们讲了,一开始 Claude Code 会把所有 Agent Skill 的名称和描述都给到模型(比如说什么爆款文案 Skill、会议总结 Skill、数据分析 Skill,等等)。模型呢会从中选择一个。之后只有选中的那个 Skill 的 SKILL.md 文件才会给到模型。说白了呢就是按需加载——这个呢已经很省 Token 了,但是它还不够极致!

大家试想一下:我们的会议总结助手可能会越来越高级。我们希望它不仅是简单复述,而是能够提供更有价值的补充说明:比如说当会议决定要花钱时,它能直接在总结里标注是否符合财务合规;当涉及到合同时,它能够提示法务风险。这样大家在看会议总结的时候就不需要再去翻规章制度一眼就能看到这些关键的补充信息,这就非常方便了。

但问题在于:Skill 能做这些事情的前提是它要把相关的财务规定和法律条文都写到 skill.md 文件里。这些文件可能会非常长,都写进去的话 skill.md 文件就会变得无比的臃肿。哪怕只是开个简单的早会,都要被迫加载一堆根本用不上的财务和法律废话,浪费模型资源。那能不能做到“按需中的按需”呢?

比如说只有当会议内容真的聊到了钱,Claude Code 才会把财务规定加载给模型看?其实这个也是可以的!Agent Skill 提供了 Reference(参考)的概念,干的就是这个活。让我们来试一下:首先我们来给它加一个文件——也就是 Agent Skill 术语里面的 Reference,我们把这个文件叫做“集团财务手册”,里面写明了各种费用的报销标准(比如说住宿补贴 500 一晚、餐饮费人均 300 之类的)。

然后在原来的 skill.md 文件里面新增一个“财务提醒规则”,里面写明:仅在提到钱、预算、采购、费用的时候触发。触发的时候需要读取“集团财务手册.md”这个文件,根据文件内容指出会议决定中的金额是否超标并明确审批人。这就可以了!我们回到 Claude Code 这里再试一下:这次我们的请求仍然是“总结下这个会议的内容”,不过这次使用的会议内容稍微换了一下。

这段对话我们就不是看了,你只需要知道在这段对话里面:老陈让小李订 1200 一晚的酒店,这涉及到了钱。按道理来说 Claude Code 应该触发我们刚才新增的财务提醒规则。让我们看看 Claude Code 能不能意识到这一点?首先,Claude Code 意识到了这个请求跟我们的会议总结助手相关联,请求使用这个 Agent Skill——我们同意。

然后它意识到了这个会议跟钱相关:根据 skill.md 文件的指示,它请求读取“集团财务手册”这个文件用于查看里面的财务合规信息——我们也同意。最后它根据实际的会议内容生成了总结。可以看出,总结中不仅包含参会人员、议题、决定等基本信息,还包含了财务提醒!这完美符合我们的需求。这个就是 Reference 的核心逻辑了:在 Agent Skill 的体系里面,“集团财务手册.md”这个文件就是个典型的 Reference。

请大家记住它的特性:它是条件触发的!在刚才的例子里面,只有当 Claude Code 读取完 skill.md 文件判断出需要查账时才会去加载这个文件。反过来说,如果这是一个跟钱无关的技术复盘会,那么这个财务文件就只会躺在硬盘里面绝不会占用哪怕一个 Token 的上下文。好,讲完了 Reference,接下来我们来讲讲如何让 Agent Skill 跑代码——毕竟查资料只是第一步,能直接动手运行代码帮我们把活干了这才是真正的自动化。这就用到了 Agent Skill 的另一大能力:Script(脚本)。

让我们在文件夹里面创建一个 Python 脚本,文件名就叫做 upload.py,用于上传文件。之后我们填好这个代码文件的内容。然后我们来到 skill.md 这个文件里,再加上一段关于上传规则的描述:“如果用户提到了‘上传’、‘同步’或者是‘发送到服务器’这样的字眼,你必须运行 upload.py 脚本将总结内容上传到服务器。”

然后我们来到 Claude Code 这边输入请求:“总结下这个会议的内容并把它上传到服务器中。”然后我们粘贴会议内容。跟之前一样,Claude Code 意识到了这个请求与我们的“会议总结助手”相关,所以它请求使用这个 Agent Skill——我们同意。然后它把会议的总结内容输出了出来,并准备上传到服务器中:它请求执行 upload.py 文件来实现这个功能——我们也同意。

好,上传成功!而且 Claude Code 还把上传相关的一些信息也展示了出来,非常棒。这里面有个小插曲大家注意一下:我这次所使用的会议内容跟钱其实没什么关系,所以 Claude Code 也并没有去读取“集团财务手册”那个文件。结果中也没有财务提醒相关的内容:这正好印证了我前面所说的观点——Reference 是按需加载的。如果用户没有提到与 Reference 相关的内容,那 Claude Code 是不会去读取它的——这样就达到了节省上下文 Token 的目的。

好让我们再回到代码执行部分:注意看这里,Claude Code 申请执行这个 upload.py 文件。它并没有去读取这个文件!没错,Agent Skill 里面的代码只会被执行不会被读取——这就意味着哪怕你的脚本写了一万行复杂的业务逻辑,它消耗的模型上下文也几乎是零。Claude Code 只关心脚本的运行方法和运行结果;至于这个脚本的内容,它可以说是毫不在意。

所以虽然 Reference 和 Script 都属于 Agent Skill 的高级功能,但是它们对于模型上下文的影响其实是截然不同的:Reference 是“读”,它会把内容加载到上下文里面,所以是会消耗 Token 的;Script 是“跑”,它只会被执行不会占用模型的上下文。讲到这里,我们需要停下来稍微做个总结:聊一聊 Agent Skill 的渐进式披露机制。

Agent Skill 的设计其实是一个精密的“渐进式披露”结构,这个结构里面一共有三层每一层的加载机制都不太一样。第一层是元数据层:这里有所有的 Agent Skill 的名称和描述,它们是始终加载的(相当于大模型里面的目录)。大模型每次回答前都会看一下这一层的信息,然后决定用户的问题是否与某个 Agent Skill 相匹配。

第二层是指令层:对应 skill.md 文件里面除了名称和描述之外其余的部分。只有当大模型发现用户的问题与某个 Agent Skill 相匹配的时候,它才会去加载这一层的内容。所以我们称这一层为“按需加载”。第三层是资源层:这个是最深的一层,它一共包含 Reference 和 Script 两方面的内容。其实按照官方最新的规范应该还有一个组成部分叫做 Asset,不过我看了一下它跟 Reference 的定义似乎有部分重叠,因此我们这里先忽略它。

好,我们刚才例子里面的“集团财务手册”和 upload.py 脚本就属于这一层。只有当模型发现用户问题与财务或者上传相关的时候,它才会去加载这一层的内容。这就相当于是在“按需加载”的指令层基础上又做了一次“按需加载”,所以我们可以称它为“按需中的按需加载”——当然这是我起的名字。Reference 和 Script 的加载方式其实不太一样:Reference 是被读取的,Claude Code 会把对应文件的内容放到模型的上下文中以供回答时参考;而 Script 是被执行的,Claude Code 根本就不会去看代码的内容它只关心代码的执行结果。

当然这个也不是铁律:如果你没有把代码的执行方法说清楚,Claude Code 还是有可能去通过看一下代码的(毕竟跑不下去了嘛)。这样的话就会占用模型的上下文了。所以还是请大家写 Skill 的时候尽可能把一切都解释清楚!那聊完了 Agent Skill 的用法,很多朋友可能会有种似曾相识的感觉:Agent Skill 好像是跟 MCP 有点像啊?本质上都是让模型去连接和操作外部世界。既然功能重叠,那我们到底应该用哪一个呢?

关于这个问题 Anthropic 官方写过一篇相关的文章来解释,核心观点就一句话就在这里:“MCP connects Claude to data. Skills teach Claude what to do with that data.” 这句话可以说是直接点明了 MCP 与 Agent Skill 的区别。它其实就是在说:MCP 给大模型供给数据(比如说查询昨天的销售记录、读取订单的物流状态等等);而 Skill 是教会大模型如何处理这些数据的(比如说会议总结必须要有个议题啊、汇报文档必须要包含具体的数据啊等等)。到这里有些同学可能就会问了:“不对啊!Agent Skill 里面也能写代码……”

我直接在 Agent Skill 里面写连接数据的逻辑不就好了吗?这样就不需要 MCP 了,Agent Skill 就直接把这两个活都给干了。确实,Agent Skill 也能连数据,功能上与 MCP 有所重叠。但是能干并不代表适合干,这就好像是瑞士军刀也能切菜,但没有人会这么干。

我们这个场景其实也是这样。MCP 本质上是一个独立运行的程序,而 Agent Skill 本质上是一段说明文档。它们的本质不同,决定了适合的场景也是不同的。Agent Skill 更适合跑一些轻量的脚本,处理简单的逻辑;在代码执行方面,Agent Skill 的安全性和稳定性都不及 MCP。

所以大家还是要根据场景选择合适的工具。甚至在很多的场景下,我们需要把 Agent Skill 和 MCP 结合起来一起使用,以便尽可能地满足我们的需求。好,今天的视频就到此结束了,我是马克,用最通俗的语言讲最硬核的技术。

如果我的视频对你有帮助,欢迎点赞订阅,我们下次再见。Bye bye。