Transcription
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/skill` 文件夹创建我们的 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。