是什么
Skill(技能) 是把”完成某类任务所需的流程、知识、提示词、乃至配套工具”打包成一个可复用的能力单元。AI 遇到对应场景时,自动加载这个 Skill 来更靠谱地干活。
例如一个”代码审查 Skill”里会写明:按什么清单审查、关注哪些风险点、输出什么格式——AI 加载后就会按这套方法论执行,而不是凭空发挥。
与 MCP 的区别(关键)
很多人把 Skill 和 MCP 搞混,记住一句话:
- MCP 是”怎么连工具”的通信协议(解决”能调用”)。
- Skill 是”怎么把事做好”的能力封装(解决”会干活”)。
类比:MCP 像是给了你一把能开各种锁的万能钥匙接口;Skill 是”开锁的标准作业流程 + 经验 checklist”。一个 Skill 内部完全可以使用多个 MCP 工具。
| 维度 | MCP | Skill |
|---|---|---|
| 本质 | 通信协议 / 接口标准 | 任务能力封装 |
| 关心 | 工具如何被调用 | 任务如何被高质量完成 |
| 例子 | 读文件、查数据库 | 代码审查、写周报、做数据分析 |
常见 Skill 类型举例
- 代码审查:按规范检查 PR,标注潜在风险、坏味道。
- 文档生成:根据代码/接口自动产出 README、API 文档。
- 数据分析:读 CSV/数据库,做统计、出图表、写结论。
- 网页抓取:按规则提取网页结构化信息(常配合 Playwright MCP)。
- 测试生成:针对函数/接口生成单元测试用例。
- 部署发布:串联构建、打包、上线流程。
- 笔记整理:把零散要点归纳成结构化文档(就是本系列笔记的”元”用法)。
核心结构
一个 Skill 不是一段散装提示词,而是一套有目录结构的文件夹。Agent 按约定自动识别并加载它。一个典型的 Skill 目录长这样:
my-skill/
├── SKILL.md # 必需:入口文件,定义"是什么、何时用、怎么做"
├── references/ # 可选:详细参考文档、规范、知识库(按需读取)
│ └── api-spec.md
├── scripts/ # 可选:可直接运行的脚本(Python / Shell 等)
│ └── validate.py
└── assets/ # 可选:模板、图片、配置文件等静态资源
└── template.md
SKILL.md:技能入口
每个 Skill 必须有且只有一个 SKILL.md,它是 Agent 唯一最先读取的文件,分两部分:
- 元数据(YAML frontmatter):文件最前方用
---包裹,声明这个技能”叫什么、什么时候该被用”。--- name: code-review description: 审查 Pull Request,标注潜在风险与坏味道,输出规范清单。 ---name:技能的唯一标识(建议小写 + 连字符)。description:一句话说明”能做什么、什么时候用”。Agent 主要靠它判断何时触发本技能,写得好不好直接决定技能会不会被正确调用。
- 正文指令:用自然语言写清”怎么做”——执行步骤、checklist、输出格式、注意事项等。
references / scripts / assets:按需加载
SKILL.md 本身应保持轻量(只放核心方法论),细节塞进子目录,避免一次性占满上下文:
- references/:长篇参考文档(API 规范、领域知识、范例)。
SKILL.md里只写”需要某细节时去读references/xxx.md”,Agent 真正用到时才加载。 - scripts/:可执行的确定性操作(校验、转换、调用 CLI)。交给代码跑比让模型”手搓”更可靠、更稳定。
- assets/:模板、图片、配置等静态资源,供脚本或输出结果复用。
为什么要”按需加载”
Agent 的上下文窗口(见 Token 笔记)是有限的。如果把所有 Skill 的全部内容一次性塞进上下文,会迅速吃掉 Token、稀释注意力。
按需加载的思路是:先让 Agent 只读每个 Skill 的轻量 SKILL.md(元数据 + 概要),只有当识别到相关场景时,才深入加载该 Skill 的 references/ 和 scripts/。就像你不会把整本手册背下来,而是先记住”哪本会讲什么”,用到时再翻开对应章节。
这样既保证知识随时可用,又把上下文成本压到最低。