跳转至

Skills

Skills 的全称是 Agent Skills,字面意思就是 智能体技能。它是一个包含指令、脚本、模板的可复用的技能包

网上对 Skills 的概念有很多种说法,比如大模型的能力扩展机制、Agent 扩展包、技能包、AI 技能包等。这些说法都没错,而且这些说法本质上都是在表达一个意思:技能

用通俗的话来说,Agent Skills 其实就是一个大模型可以随时翻阅的 说明文档

举个例子,比如你想做一个智能客服,你可以在 Skill 里面明确交代:遇到投诉得先安抚用户的情绪,而且不得随意承诺。

再比如,你想做会议总结,你可以在 Skill 里面规定:必须要按照参会人员、议题、决定,这个格式来输出总结的内容

为什么需要Skills

大模型就是一个智能大脑,看上去很聪明、无所不能,但是,杂而不精。

比如我想开发一个小程序,我让大模型画一个 UI ,画出来的效果总是差点意思,和专业选手完全没法比。

可能有些人会说:哪里没画好,你告诉大模型啊,让大模型改就是了。可是即使我告诉了大模型,大模型也能一次性就画好吗?可能你跟大模型聊一晚上,大模型都画不出你想要的效果。这几里面主要有几个问题:

  1. AI 着实不是万能的
  2. 我不是专业的 UI 啊,很多专业术语我都不知道,我用大白话跟大模型聊天,它能完全听进去吗
  3. 很多时候我自己都不知道要画成什么效果,页面怎么布局、按钮应该是什么颜色、要展示哪些功能等,我完全不懂,怎么让大模型懂呢?

这个时候,如果有一位专业的 UI 选手,能够主动站出来,把自己多年画 UI 的经验,总结成文字,比如官网页面应该怎么布局、小程序页面应该怎么布局、APP 页面又应该怎么布局、什么样的按钮应该设置什么颜色、按钮大小应该是多少等等,把经验文字发给大模型,让大模型按照专业选手的经验去画 UI ,那画出来的效果是不是就相当于专业选手画的效果?

这个 经验,就是 技能 。有了这个技能,你就能:

  1. 让 AI 从 只会聊天 变成 能干活 的专用工具
  2. 做事更靠谱。把专家的经验存进去,AI 每次干活都按标准来,不乱发挥,结果更稳定

看到这里,可能有些人会问:这不就是提示词吗?Skills 确实有提示词的作用,但是,如果单纯是提示词,每次对话都要手动贴一遍提示词,公司上千人、上万人,每个人都得帖,多麻烦

Agent Skills目录结构

Skill 本质上就是一个文件夹

比如我有一个名叫 UI 的 Skill ,那它的目录结构就是这样的:

  • SKILL.md:流程规则,也就是大家理解的提示词,里面是画 UI 的经验和要求,用于教大模型如何画 UI
  • references/ :参考文献的目录,里面是各种补充文档,有需要的时候再加载。
  • script/ :代码目录,里面是可执行的代码脚本
  • assets/ :其它材料目录,里面存放图标、模板、图片、字体等资源

4 个文件或目录,只有 Skill.md 文件是必须的,其它 3 个目录都是非必须的

谁想用这个 skill ,把 UI 这个文件夹发个他,让他放在大模型能识别的地方就行

高级用法

Reference

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

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

但问题在于:Skill 能做这些事情的前提是,它要把相关的财务规定和法律条文都写到 SKILL.md 文件中,这些内容文件长,导致 SKILL.md 文件会变得无比臃肿,哪怕只是简单地开个早会,都要被迫加载一堆根本用不上的财务和法律废话,浪费模型资源

Reference本质上是供模型参考的资料,只需在Skill文档中提到对应的参考文档,模型就会自动读取并参考

Script

Agent Skills 中的代码只会被执行,而不会被读取。这就意味着哪怕你的代码写了一万行复杂的业务逻辑,它消耗的模型上下文也几乎为 0 。Claude Code 只会代码的运行方法和运行结果,至于代码的内容,它可以说是毫不在意

所以,虽然 Reference 和 Script 都属于 Agent Skill 的高级功能,但是它们对模型上下文的影响是截然不同的

  • Reference 是读,它会把内容加载到上下文里面,所以是会消耗 Token 的
  • Script 是跑,它只会被执行,不会占用模型的上下文

为什么需要代码?比如当我报销费用时,得看看公司的预算还剩下多少,预算不够肯定就不让报了,只能想办法换别的科目去报销了,这时候查预算、校验预算,就得需要靠代码来执行了

运行机制

Agent Skills 的设计其实是一个精密的渐进式披露结构,这个结构里一共有 3 层,每一层的加载机制都不一样

  • 第 1 层:元数据层。这里有所有 Agent Skills 的名称和描述,它们是始终加载的,相当于大模型里面的目录,大模型每次回答前都会看一下这一层的信息,然后决定用户的问题是否与某个 Agent Skills相匹配
  • 第 2 层:指令层。对于 SKILL.md 文件里面除了名称和描述之外其余的部分,只有当大模型发现用户的问题与某个 Agent Skills 相匹配的时候,它才会去加载这一层的内容,所以我们称这一层为按需加载
  • 第 3 层:资源层。这是最深的一层,它一共是包含 Reference 和 Script 两方面的内容,我们称它为按需中的按需加载

Reference 和 Script 的加载方式还不一样

  • Reference 是被读取的,Claude Code 会把对应文件的内容放到模型的上下文中,以供回答时参考
  • Script 是被执行的,Claude Code 根本不会去看代码的内容,它只关心代码的执行结果。当然,这个也不是铁律,如果你没有把代码的执行方法说清楚,Claude Code 还是有可能去通过看一下代码的,毕竟跑不下去了嘛,这样的话就会占用模型的上下文了

如何开发Skills

官方文档:https://agentskills.io/

一个Skill目录结构如下:

Text Only
skill-demo/                  # Skill 名称
├── SKILL.md                 # 必须的:元数据 + 说明
│   scripts/                 # 可选的:可执行的代码
│   references/              # 可选的:文档
│   assets/                  # 可选的:模板、资源

Agent Skills vs Prompt

注意力衰减

很多人觉得,Skill 不就是 Prompt 吗?这话一点也没错,Skill 确实就是一个大号的 Prompt ,而且它大概率不好使。

比如写一个关于论文写作质控,把每一条规则、每一种应该避免的错误,全塞了进去。然后交给 AI ,AI 读完之后会选择性遗忘一半的规则,即使提醒它没有遵循某某规则,它说好的,然后又没有遵循其它规则。我只能追加提醒,它道歉,然后换一种方式继续违反

这种体验就像你写了一份 50 页的员工手册,AI 只记住了前 3 页和最后 2 页,中间的全跳过了

所以你说 Skill 不就是 Prompt 吗?对于这个版本的 Skill 来说,它就是一个很长很长的 Prompt ,它有 Prompt 的所有问题

你可以把 AI 的注意力想象成聚光灯,总光量是固定,你往 Skill 里塞的内容越多,聚光灯就越散,每一条规则分到的光就越弱

规则失效

注意力衰减只是小问题,真正要命的是 规则失效,AI 控制不住自己的行为

国外用户让 AI 自动处理邮件,结果 AI 把邮件全给删了,即使你明确要求 AI 不能删任何邮件,AI 依旧无视规则,最后你也只能得到一句 So Sorry

模型不是犯了错,这是计算后的选择,不是失误

因为你在 Prompt 里写的任何规则,对 AI 来说都不是命令,是 建议。它会理解你的指令,会在推理过程中引导你的指令,然后在权衡之后选择违反它。跟人类员工读了公司制度钻空子,机制上完全一样

区别在于,人类员工有法务部盯着、有审计流程兜底、有劳动合同约束,而一个纯文字的 Skill 呢?它既是「规章」,也是唯一的「执法机制」,相当于公司把规章制度贴在墙上,然后撤掉了法务部、审计部和 HR

什么才是好的Skill

先说一个概念。提示词是概率性的,代码是确定性的

什么是概率性?你在 Skill 里写「请注意字数不要超过 500 字」,AI有可能遵守,有可能不遵守,取决于上下文、模型状态、注意力分配。这就是概率性的

什么叫确定性?你写一个 Python 脚本,输入一段文字,输出字数是 501,超标了,报 FAIL 。不存在「我觉得差不多可以」。这就是确定性的

好的 Skill 的核心原则是,把所有能用代码判断的事情从文字里拿出来,交给代码。Skill 的文字部分只负责那些代码做不了的事

举例:还是论文写作质控 Skill

字数统计?代码做。一个 Python 脚本,输入文件,输出字数、段落数、各段分布,精确到个位。

禁用词检测?代码做。一个 Python 脚本,扫描AI写作的常见病灶,金句轰炸、模板对称、爹味说教,每一条都有正则表达式,命中就报 FAIL

格式合规检查?代码做。段落结构对不对、禁用标点有没有出现、有没有用冒号代替逗号,全部自动检测

AI 做什么呢?AI 选论证角度。AI 判断文章有没有「活人感」。AI 做创造性的跨学科类比。这些事情代码做不了,不是现在做不了,是说到底做不了。因为「这篇文章读起来像不像真人写的」没有确定性的答案,它需要判断

改造之后,Skill 文件从 800 多行瘦身到 100 多行。加了 4 个 Python 脚本。之前 AI 写完论文我需要人工逐条检查,经常漏。现在脚本跑一遍,PASS 就是PASS ,FAIL 就是 FAIL,没有灰色地带

具体怎么写一个好的 Skill ,我总结了一个流程:

  1. 列出你希望 AI 遵循的所有规则
  2. 把这些规则分成 2 堆,一堆是「能写成 if-else 的」,比如字数限制、禁用词、格式要求、结构校验。另一堆是「写不成 if-else 的」,比如选什么角度、用什么语气、怎么做类比
  3. 第 1 堆写成 Python 脚本,放在 Skill 的 Scripts 目录里,第 2 堆留在 SKILL.md 的正文部分
  4. 在 SKILL.md 的正文部分明确告诉 AI ,写完之后必须跑脚本,脚本报 FAIL 就必须修正后重跑,不得跳过

「脚本FAIL → 修正 → 重跑 → 直到 PASS 」这个循环,比「请仔细检查一下」这句话强一万倍

一个好的 Skill 目录结构长这样:

  • SKILL.md :文字部分,只写 AI 需要做判断的事
  • Reference :按需加载的参考材料
  • Script :代码

好的 Skill 不是让 AI 更聪明。是让 AI 不犯蠢,不是文字描述「劝你别做」,是那扇门从物理上打不开(代码控制)

官方文档中也明确建议 SKILL.md 要控制在 500 行以内

参考文章

https://developer.aliyun.com/article/1741561