Agent Skills全解析:从原理到实战,打造高效技能包
这两年“Agent”这个词都快被聊烂了,但真正把 Agent 从玩具变成生产力的,不是某个大模型又聪明了多少,而是那些藏在一个个目录里的skills。如果你正在做 agent 开发、前端开发 skills,或者只是好奇 Codex、Claude 那些 Agent 为什么突然变得这么能干,那这一篇就是给你准备的——我会把 agent-skills 是什么、原理是什么、怎么亲手写一个靠谱的 skill、踩过哪些坑,一次性讲明白。
先说一句真心话:Agent 的能力上限,一半在模型,一半在 skills。模型决定它多聪明,skills 决定它多专业。没有 skills 的 Agent 就像一个高学历但零经验的新人,什么都懂一点,什么都做不精。而一份打磨过的 skill,等于给 Agent 配备了某个领域十年老师傅的手感。这东西值得你花时间。
1. Agent Skills 到底是个什么东西
1.1 从一次教到会,到“装上就会”
先说概念。Agent Skills 本质上是一套结构化的能力包,由一份指令文档(通常是 Markdown)加上可选的脚本、模板、参考文件组成,用来教 Agent 如何完成一类特定任务。它不是代码插件,也不是微调模型,而是一种“施工图纸”——模型负责执行,skill 负责告诉它按什么流程、用什么工具、按什么标准去执行。
我最早接触这个思路其实是在 2023 年底,那时候很多项目开始尝试用零样本提示词让大模型干杂活,效果起起伏伏,用户怨声载道。为什么?因为提示词写得再详细,在大模型眼里也只是“建议”,根本没有约束力。模型判断错了,没有代码去兜底;流程漏了,也没有机制去补全。而 skills 的发明,本质上就是把这些“建议”升级成了一套有步骤、有标准、有产出物约束的迷你工作流。
举一个最直观的例子:你让 Agent 帮你画流程图,它可能画得乱七八糟,线条乱飞,节点名都是英文缩写。但如果你给它装一个“分镜 skills”或者“流程绘制 skills”,它会先确认目标,再列出分镜节点,最后按固定模板生成结构化的输出。连命名规范都会遵守。这不是大模型变强了,是 skill 替你把流程锁死了。
1.2 为什么 2025 年 skills 突然爆火
一个技术能火,必须踩中痛点。Agent Skills 在近期集中爆发,三个原因缺一不可:
大模型太通用,生产环境太具体。ChatGPT 级别的对话能力已经过剩了,但生产环境要求的是“按我们公司的代码规范写 PR 描述”“按我们的配置文件格式生成部署脚本”,这种场景化知识没法靠模型预训练解决,只能靠 skill 注入。
Agent 框架的成熟让 skills 成为标准件。现在 Claude Agent Skills、Codex skills、HERMES agent、各种 agent 框架都开始支持 skills 标准化,这意味着你写一份高质量的 skill,可以在多个 Agent 环境之间复用,生态一下子打开了。
社区驱动的技能市场行为逐渐成形。如今像 GitHub skills、skills 下载平台、官方技能市场都已经出现,大量开发者开始互相分享和复用技能。一个技能写得好的作者,就相当于当年 GitHub 上 star 过万的开源作者,影响力非常大。任何技术生态,只要开始有“交易”和“复用”,就会指数级增长。
1.3 skills 能解决什么问题
如果你现在还在纠结“要不要学 skills”,先看这三个问题是不是也困扰你:
- 同一个任务,每次都要从头教一遍 Agent。今天让它写周报,明天让它生成 SQL,后天又要它写测试用例。每次都要重新写一大段提示词,烦不烦?skill 就是把这些固定套路打包,一次安装终身受用。
- Agent 输出的质量不稳定。同样的需求,十个字和一千字描述出来的结果天差地别。skill 把关键约束写死在文档里,Agent 每次执行都按照同一套质量标准来,偏差大幅缩小。
- 团队协作时知识无法沉淀。公司里某个大神写了一段极其好用的 prompt,他怎么写的?不知道。但如果是 skill,整个目录提交到代码库,所有人 clone 下来就能用。经验,第一次变成了可积累、可审计的数字资产。
注意:skills 不是银弹。它解决的是“流程标准化”和“知识复用”问题,解决不了模型本身能力不足的问题。如果模型连基础推理都做不对,再精细的 skill 也救不回来。
2. Skills、Tools、MCP 和 Prompt:一张图理清边界
这四者的关系可能是近期 Agent 开发领域被问得最多的问题。很多人把 skills 和 tools 混为一谈,还有人觉得 MCP 就是 skills 的替代品。我在这里用一整章讲透,因为这个问题不搞清楚,后面开发时你连选型都会纠结。
2.1 一句话版本
- Prompt(提示词):一次性口头交代,说完就忘,灵活但无约束。
- Skills(技能包):长期记忆+操作手册,装在 Agent 脑子里,固定流程+质量标准。
- Tools(工具):Agent 的手和脚,让它能执行具体动作,比如执行代码、查文件、调 API。
- MCP(模型上下文协议):统一插座标准,让 Agent 能即插即用地连接外面的数据源和工具服务,解决的是“接入”问题,不是“怎么用”的问题。
2.2 它们怎么配合
我打个比方帮助理解。假设你要开一家奶茶店:
- Prompt 就是店长早上跟你说的“今天生意做得好一点”,方向有,怎么落地全看悟性。
- Skills 是你的《门店操作手册》,从泡茶步骤、糖浆配比到出杯时长全部写明白,店员照着做就不会太差。
- Tools 是你店里的设备:封口机、收银机、制冰机,没有这些,手册写得再好也没办法落地。
- MCP 是统一的电源和水管接口标准,让任何品牌的设备都能插上就用,不用每家店重新铺水电。
这下清楚了吧?Skills 是大脑里的方法论,Tools 是手上的工具,MCP 是基础设施标准。
2.3 为什么 skills 和 tools 的边界最容易被混淆
因为很多 skill 内部也会调用 tools。比如一个“前端开发 skills”,它会引导 Agent 去读目录结构、执行 npm 命令、检查 lint 输出,这时候 skill 和 tool 就一起出现了。我的判断标准很简单:tools 回答“能做什么”,skills 回答“该怎么做”。如果你的 Agent 只是挂了一堆 tools 但没有 skills,它就像一个进了工具间的新手,什么都会用,但完全不知道先干什么后干什么。真实项目中,90% 的 Agent 效果不佳,问题就出在只挂了 tools,没装 skills。
| 维度 | Prompt | Skills | Tools | MCP |
|---|---|---|---|---|
| 本质 | 一次性指令 | 标准化流程 | 执行能力 | 接入协议 |
| 生命周期 | 用完即弃 | 长期复用+迭代 | 长期部署 | 长期存在 |
| 是否可分享 | 可复制粘贴 | 目录级交付 | 接口级交付 | 协议级交付 |
| 失败表现 | 输出偏差 | 流程错误 | 执行报错 | 连接失败 |
| 修改成本 | 低 | 中 | 中 | 低 |
3. 动手开发一个自己的 Skill:从 0 到 1 全流程
前面讲了这么多概念,现在该上硬货了。我会带你从零开始写一个真正能用的 skill,并且把每一步的设计思路都讲清楚。为什么讲得细?因为我见过太多人看了一堆 skill 教程,结果自己上手写的时候,连 frontmatter 该写几行都拿不准。
3.1 第一步:选一个合适的任务场景
选择任务是 skill 开发中最关键的一步,也是最容易被忽视的一步。判断一个任务适不适合做成 skill,我会用三把尺子:
- 重复性够不够高?如果这个事情你就干一次,不要写 skill,直接写 prompt。
- 流程够不够稳定?如果任务每次的需求变化极大,skill 难以覆盖住那些不确定部分,反而不如 prompt 灵活。
- 质量标准能否描述?你得能找到“好结果”和“坏结果”之间的分界线,比如“输出必须包含数据表头”“代码必须有错误处理”,否则 Agent 学不会。
我的第一个实操 skill 选了“生成 SQL 查询语句”。为什么选它?因为团队里每天都有分析同事来问“这个数据怎么查”,需求高度重复,SQL 的写法有章可循,而且质量标准极其明确——能跑、性能好、字段对得上表结构。
3.2 第二步:搭好 SKILL.md 的标准骨架
一个 skill 的灵魂是它的SKILL.md文件。这个文件决定了 Agent 看到什么、按什么顺序思考、按什么标准交付。我推荐的骨架分成四块:
--- name: sql_query_generator description: 生成符合 MySQL 8.0 规范的高性能查询语句。仅当用户需要从数据库提取数据时使用。 version: 1.0.0 ---四个字段我逐个解释:
- name:技能的名字,短横线分隔,小写。它会被 Agent 用于索引路径,不要用中文,也不要有空格。
- description:这个字段极其重要。Agent 判断什么时候该调用这个 skill,靠的就是这段描述。写得太泛(“生成 SQL”),它会在不该用的时候也调用;写得太窄(“从订单表查询销售额”),它会在该用的时候错过。
- version:版本号,一定要写。后续 skill 迭代时,版本号能帮你回溯问题。
- 正文:frontmatter 下面就是主体内容。写法和写操作手册完全一样,关键步骤用数字编号,关键约束用加粗强调,产出物要求单独成节。
3.3 第三步:把流程写细,但不是写死
写 SKILL.md 正文最容易犯的两个错误,一个是太粗——只有几句泛泛的原则,Agent 看完还是不知道怎么下手;另一个是太死——要求每个字段都按固定模板填,一点灵活性都不留,结果任务一变,Agent 直接宕机。
我的经验是分三层来写:
第一层:任务分析。让 Agent 先判断输入是什么、要什么结果、有没有隐性的约束(比如时间范围、数据量级)。
第二层:执行步骤。给出一套流程,但每个步骤之间留出判断空间。比如“先检查表结构,再生成查询,最后确认索引利用情况”。这只是顺序,不是模板。
第三层:质量红线。这是和 prompt 最不一样的地方。我会明确写“禁止 SELECT *,必须显式列出字段”“涉及多表 join 时必须确认关联字段有索引”。这些话是给 Agent 的“工作纪律”,也是产出质量的基本保障。
3.4 实操案例:完整写一个“JSON Schema 生成器”skill
为了让你能直接参考,我把一个实际跑通过的 skill 完整写出来。这个 skill 的作用是:根据用户的一段 JSON 示例数据,自动生成符合 JSON Schema Draft 2020-12 规范的 schema 文件。
--- name: json_schema_generator description: 根据 JSON 示例数据自动生成 JSON Schema(Draft 2020-12)。当用户提供 JSON 并要求生成校验规则、接口文档或表单配置时使用。 version: 1.2.0 --- # JSON Schema 生成器 ## 任务目标 根据用户提供的 JSON 示例,生成结构完整、类型严格、可扩展的 JSON Schema 文件。 ## 执行步骤 1. 分析示例 JSON 的数据结构,列出所有字段及嵌套层级。 2. 为每个字段确定类型(string/number/boolean/array/object/null)。 3. 根据字段值特征补充约束规则: - 字符串字段:若疑似枚举值,补充 enum - 数字字段:根据业务场景判断是否需要 minimum/maximum - 数组字段:明确 items 类型,若元素为对象则递归生成 4. 对可选字段使用 required 数组显式列出必填项。 5. 输出完整 JSON Schema,并以 JSON 代码块返回。 ## 质量红线 - 所有类型必须显式声明,禁止依赖默认类型推断。 - required 数组里只放业务上必填的字段,宁少勿多。 - 数组嵌套超过三层时,必须拆分引用($ref),禁止直接展开。 - 输出文件必须通过 JSON 语法校验。你写完这个文件之后,把它放在skills/json_schema_generator/SKILL.md路径下,你的 Agent 框架只要能识别 skills 目录,就能自动索引到这个能力。等下一次你丢给它一段宠物商店数据,它就会转换成一份规整的 schema,连$ref都安排得明明白白。
3.5 命名规范与目录结构
skill 的目录结构我建议固定为:
skills/ └── json_schema_generator/ ├── SKILL.md ├── templates/ │ └── schema_template.json └── examples/ └── sample_input_output.md分两个子目录是有讲究的。templates放可复用的模板文件,比如输出格式的骨架;examples放 few-shot 示例,让 Agent 在执行时有范例可以参照。实际测试下来,有 examples 的 skill 比没有的,首轮成功率能高出 30% 以上,因为大模型看一遍示例比读十条规则有效得多。
提示:templates 里的文件不要放太多,两三个足够。放多了反而会干扰 Agent 的判断,它不知道该参考哪个。
4. 从 Claude Skills 到 Codex Skills:多平台迁移实战
写 skill 只是一半工作,让它跑起来、在不同 Agent 平台上复用,才是价值兑现的时候。目前我实际用过的有三类环境,分别是 Claude Agent Skills、Codex skills,以及 HERMES agent 这类第三方工作台。我直接把兼容细节讲清楚。
4.1 Claude Skills 的运行机制
Claude 的 skills 机制是目前做得最完整的。它的实现逻辑是:Agent 启动时会扫描 skills 目录,读取每个子目录下的 SKILL.md,把文件名和 description 注入上下文索引。当用户提问命中描述时,Agent 才会加载对应 skill 的完整正文,开始执行。
这个“按需加载”的设计非常关键,它保证哪怕你装了五十个 skills,上下文窗口也不会被一次性塞爆。只有需要时才会读取具体内容,代价是响应时多一轮内部检索,但换来的是极高的扩展性。这一点为我们在前端开发 skills、测试技能这类细分场景自由安装大量技能集提供了很好的前提。
4.2 Codex 环境的适配
Codex 的 skills 命名和 Claude 略有差异,但结构基本一致。迁移时最容易踩的坑有两个:
- frontmatter 字段名差异。Codex 某些版本对
description的敏感程度不同,迁移前先跑一次skills list确认识别情况。 - 命令类 skill 的权限设置不同。Codex 更强调沙箱执行,涉及 shell 命令的 skill 需要显式声明权限级别。我通常会在文档里加一段“执行环境要求”,用注释形式标出哪些步骤需要管理员权限。
迁移前一天内能搞定两个平台,得益于 skill 本身的纯文本属性。它是跨平台的,这是提示词复用永远做不到的。
4.3 第三方工作台和自建 Agent 框架
除了官方那几家,像 HERMES agent 这类第三方工作台也在做 skills 标准化。说句实在的,这类平台的 skill 兼容性参差不齐,有的支持完整 frontmatter,有的只读正文第一段。我在开发时会在 SKILL.md 里加一个metadata.json作为辅助,把技能名、版本、依赖信息各写一份,这样就算主文档某个字段解析失败了,也能靠它兜底识别。
针对自建 Agent 框架(比如基于 Rust 的 agent 项目,或者自己搭的多 agent 架构),我的建议是封装一个skill loader 组件:启动时统一扫描 skills 目录、解析 frontmatter、建立索引,并让 Agent 在每轮对话前查询该索引。这套方案我实测过,非常稳定,而且把 skills 的加载机制彻底从框架中解耦了出来。后面不管是接入官方能力还是第三方能力,都只改 loader 这一层就行。
注意:无论你用的是哪家的 Agent,都别同时加载太多技能。我之前一次性装了三十多个 skills,结果 Agent 每次都要花时间在索引里大海捞针,响应速度肉眼可见地变慢。一般控制在 10 个以内体验最佳。
5. 避坑实录:我踩过的那些 skills 开发深坑
再好的教程,也比不上真实的坑够味。这一章整理的都来自我和身边朋友实战中的血泪教训,部分已经凝成了团队的开发规范。你直接拿去看,能少走一大截弯路。
5.1 描述写得太“完美”,Agent 反而学不会
我早期写过一个“自动化测试生成”skill,description 写得很漂亮:“为任何前端项目自动生成完整测试套件”。听起来无所不能,实际用起来惨不忍睹——Agent 经常在只需要改一个测试文件的时候,兴奋地跑去生成整个项目的测试方案。
原因很简单:描述越宽泛,触发的机会就越频繁,误用的概率就越大。后来我改成“当用户要求为指定组件或页面编写/补充 Vitest 测试用例时使用”,触发准确率立刻从 60% 升到 95%,效果拔群。写 description 的时候,我的建议是把自己当成一个客服分流员:这句话得能让 Agent 精确判断,到底该不该接这单活儿。
5.2 步骤越多,失败率越高
这是个直觉反直觉的发现。六个步骤以内的 skill,执行成功率最高;超过十个步骤的,成功率呈现下跌,原因在于中间任何一步出错,后面全部白搭。
后期我把长 skill 拆成多个子技能,效果立竿见影。比如“数据库迁移”skill 拆成“schema 检查”“SQL 生成”“迁移后校验”三个子技能,每个技能只负责一段流程,加上相互依赖关系,整体成功率反而更高。这就是最近架构圈常说的“harness 和 agent 分离”思路在 skill 层面的体现——主流程负责编排,子技能负责执行,两边都不至于超载。
5.3 一个不知道从哪来的 agent 脚本技能,差点删光文件
这个坑我一定要单独讲,因为它涉及的是 agent 安全。有一次我从一个论坛下载了一个“自动化文件整理”skill,压缩包解压后是一个带脚本的技能,按照说明安装后,打算让它整理下载文件夹。结果执行到一半我隐约发现不对劲,它开始尝试执行rm相关命令,并且遍历范围远超出它该管的那几个目录。
我当时第一时间就中断了执行,然后把那个技能整个卸载并删了。原因是它里面伪装了一个post_install.sh脚本,里面写的命令完全不是整理文件该干的事。这次之后我给自己定了几条铁规矩:
- 只用官方渠道或可信来源的 skills,比如官方能力市场、GitHub 高星项目、或者同事审过代码的目录。
- 安装后先读源代码,再运行。skill 本质是明文的,花五分钟看一遍脚本,不亏。
- 在独立环境先做测试。用假的测试目录跑一遍,确认行为完全符合预期,再放到真实环境中。
- 定期检查 Agent 的执行日志,关注有没有越权操作。我熟悉的一些框架都支持限制技能使用范围,我会把高风险技能配置为“每次使用前都要二次确认”。
这些动作不复杂,但能挡住绝大多数风险。Agent 能力越强,越要管住它的权限边界。
5.4 版本管理与回滚
skills 是文本,但它更是代码。我见过太多人改了一个 skill 就把原来的内容覆盖了,效果不对也找不到原因,只能凭记忆回退。我现在的做法是:每个 skill 目录都纳入 Git 管理,每一次修改都有 commit,SKILL.md 里的 version 字段配套递增。发现问题时先git log看历史,再决定是修复还是回滚。这种方式既省心又防呆。
6. 常用技能框架、搜索与发现效率技巧
写到这里基本已经把核心玩明白了,再把怎么找技能、怎么评估技能质量、怎么高效用起来这部分补上,你就真的算入门了。
6.1 去哪里找现成的高质量 skills
现在的生态比两年前好太多。重点推荐几个可靠来源:
- 官方市场与官方文档:比如 Claude Skill Marketplace、各类框架自带的 skills 仓库,来源可控,质量在线。
- GitHub 高星项目:搜索
agent skills、skills collection之类的关键词,看 stars、看更新时间、看 issue 反馈。我下载前习惯先看 3 个 issue,能暴露大量问题。 - 社区整理的精选列表:有些作者会专门做技能评测,整理出“好用不坑”的推荐清单,参考价值很高。
- 自建私有技能库:公司内部积累的经验级技能,尤其是贴合甲方规范、业务术语的这些,是核心竞争力所在,值得沉淀。
6.2 三个维度快速评估一个 skill 的质量
下载前别急着安装,用这三条过一遍:
- 看体量:SKILL.md 超过 300 行的不要直接用,大概率是又长又啰嗦的“百科全书”,装进去会挤占上下文。
- 看描述:> 如果 description 用了“万能、全自动、零配置”这类话术,这个技能基本不可信,真正的技能反而会写清楚“什么时候用它”。
- 看示例:好的技能一定有 examples,没有示例文档的技能,Agent 执行效率至少减半。
这三个条件都满足,才值得花五分钟仔细读一遍正文。
7. 写在最后:我的折与悟
折腾了这么久的 agent skills,我最大的感受就一句话:AI 时代,最值钱的不是写提示词的能力,而是把经验固化成可复用资产的能力。一个 skill 文档,本质上就是你把一双干了十年某领域的手,装进了一个新员工的脑子里。这件事的想象空间,比大多数人以为的大得多。
再分享一个我自己还在用的小技巧:我会把每周工作中重复做过两次以上的事情记录下来,攒一个月就翻出来看。如果某类事情重复超过五次,我就会考虑把它写成 skill。这个习惯坚持半年,我的技能库从 3 个涨到了 17 个。现在很多日常工作都进入了“Agent 主跑、我复核”的状态,效率的提升完全是另一个量级的。
这篇文章写到这儿,我没有打算用一个漂亮的排比句收尾。你可以现在就打开电脑,创建一个空目录,写一个最基础的 SKILL.md,哪怕它只解决“自动生成周报”这一件小事。装进你的 Agent,体验一次“装上就会”的感觉。然后你会明白,为什么我说,skills 是 Agent 真正从玩具变成工具的分水岭。