什么是 Skill?一文讲清 AI Agent 的“技能包”
用 AI 写代码、写文档久了,你大概会遇到这样的烦恼:
- 每次让它写提交信息,都要重新交代一遍团队的格式规范;
- 每次让它处理 PDF、生成周报、做代码审查,都要把同一套步骤再粘贴一次;
- 把这些规范全塞进系统提示词,提示词越来越长,模型反而“抓不住重点”。
Skill(技能) 就是为解决这个问题而生的。它把“怎么做某件事”的经验打包成一个文件夹,Agent 平时只记住它的名字和用途,真正需要时才把完整说明读进来。
本文从定义、结构、工作原理、与 Prompt / MCP 的区别,到动手写一个 Skill,带你完整认识它。
一、一句话定义
Skill 是一个包含
SKILL.md文件的文件夹,用来给 AI Agent 提供某项任务的专业知识和操作流程,Agent 在任务匹配时按需加载。
它最初由 Anthropic 为 Claude 设计,2025 年 12 月以 Agent Skills 的名字作为开放标准发布(规范见 agentskills.io)。目前 Claude Code、OpenAI Codex、GitHub Copilot、Cursor、Gemini CLI 等主流 AI 编程工具都已支持这一格式,同一个 Skill 写一次,可以在多个 Agent 里复用。
可以把它类比成:
- 给新同事的一份岗位操作手册:平时放在书架上,遇到对应的活儿再翻开;
- 或者游戏里的技能书:装备上之后,角色就“学会”了一项本领。
二、一个 Skill 长什么样
最小的 Skill 只需要一个文件:
my-skill/
└── SKILL.md
完整一点的 Skill 可以带上脚本、参考文档和资源文件:
pdf-processing/
├── SKILL.md # 必需:元数据 + 操作说明
├── scripts/ # 可选:可执行脚本(Python、Bash 等)
├── references/ # 可选:详细参考文档,按需读取
└── assets/ # 可选:模板、图片、数据文件
SKILL.md 的格式
SKILL.md 由两部分组成:开头的 YAML 元数据(frontmatter),和后面的 Markdown 正文。
---
name: pdf-processing
description: 提取 PDF 中的文字和表格、填写 PDF 表单、合并多个 PDF。当用户处理 PDF 文件,或提到表单、文档提取时使用。
---
# PDF 处理
## 提取文字
1. 用 scripts/extract.py 提取全文:`python scripts/extract.py input.pdf`
2. 如果是扫描件(提取结果为空),改用 OCR,见 [OCR 说明](references/OCR.md)
## 填写表单
……
元数据里有两个必填字段:
| 字段 | 规则 | 作用 |
|---|---|---|
name | 1–64 个字符,只能用小写字母、数字和连字符;不能以连字符开头或结尾,不能出现连续的 --;必须和文件夹同名 | Skill 的唯一标识 |
description | 1–1024 个字符 | 说明它做什么、什么时候用,Agent 靠它判断要不要启用这个 Skill |
还有几个可选字段:license(许可证)、compatibility(环境要求,如“需要 git 和 docker”)、metadata(自定义键值对,如作者、版本)、allowed-tools(预先授权的工具,目前是实验性字段,各家支持程度不一)。
正文没有格式限制,写任何能帮 Agent 把事做好的内容即可,通常包括:分步操作说明、输入输出示例、常见的边界情况。
三、核心机制:渐进式披露
Skill 最巧妙的设计是 渐进式披露(Progressive Disclosure):不是一次性把所有内容塞给模型,而是分三层、按需加载。
| 层级 | 内容 | 何时加载 | 体量 |
|---|---|---|---|
| 第 1 层:元数据 | name + description | Agent 启动时,所有 Skill 都加载 | 每个约 100 tokens |
| 第 2 层:说明 | SKILL.md 正文 | 任务和 description 匹配、Skill 被启用时 | 建议少于 5000 tokens |
| 第 3 层:资源 | scripts/、references/、assets/ 里的文件 | 正文里引用到、确实需要时 | 按需 |
举个例子:你装了 50 个 Skill,Agent 启动时只多读了大约 5000 tokens 的“目录”。当你说“帮我把这三个 PDF 合并”时,它从目录里认出 pdf-processing,才去读这个 Skill 的正文;正文里提到合并要用 scripts/merge.py,它再去运行这个脚本——而且脚本代码本身不必进入上下文,只有运行结果会。
这带来两个好处:
- 能装很多 Skill,却几乎不占上下文。系统提示词不用越写越长。
- 确定性的工作交给代码。排序、格式校验、文件转换这类事,让模型“想”既慢又容易出错,写成脚本让它执行,结果稳定得多。
四、Skill 和 Prompt、MCP、Function Calling 有什么区别
这几个概念经常被混在一起,其实它们解决的是不同层面的问题:
| 解决什么 | 形式 | 加载方式 | |
|---|---|---|---|
| 系统提示词 / 规则文件(如 CLAUDE.md、AGENTS.md) | 项目里始终适用的约定 | 一段文本 | 每次对话都全量加载 |
| Skill | 某类任务的专业知识和流程 | 文件夹(说明 + 脚本 + 资料) | 任务匹配时按需加载 |
| MCP | 连接外部系统(数据库、GitHub、Slack……) | 一个服务,对外暴露工具和资源 | 作为工具接入 |
| Function Calling / 工具 | 让模型执行某个动作 | 函数定义(名称 + 参数 schema) | 定义随请求发送 |
一个好记的说法:MCP 给 Agent 接上“手”,Skill 教 Agent“怎么用手干活”。
比如,MCP 让 Agent 能读写你的数据库;而一个“数据分析” Skill 告诉它:先看哪些表、指标口径怎么算、图表按什么规范画、结论按什么模板写。两者经常配合使用。
至于规则文件和 Skill 的分工:所有任务都要遵守的(代码风格、提交规范)放规则文件;只在特定任务中才需要的(发版流程、某类报告的写法)做成 Skill。
五、动手写一个 Skill
我们写一个“生成规范的 Git 提交信息”的 Skill。
1. 创建目录和 SKILL.md
git-commit-message/
├── SKILL.md
└── scripts/
└── check_message.py
SKILL.md:
---
name: git-commit-message
description: 根据暂存区的改动生成符合 Conventional Commits 规范的提交信息。当用户要求提交代码、写 commit message 或整理提交记录时使用。
---
# 生成提交信息
## 步骤
1. 运行 `git diff --cached` 查看暂存区改动;如果暂存区为空,提醒用户先 `git add`。
2. 判断改动类型:feat(新功能)、fix(修复)、refactor(重构)、docs(文档)、test(测试)、chore(杂项)。
3. 按下面的格式写提交信息:
- 第一行:`<类型>(<范围>): <简述>`,不超过 72 个字符,用祈使语气;
- 空一行后写正文,说明**为什么**改,而不是逐行复述改了什么。
4. 运行 `python scripts/check_message.py "<提交信息>"` 校验格式,不通过就修改后重试。
## 示例
输入:修改了登录接口,令牌过期时返回 401 而不是 500。
输出:
fix(auth): return 401 instead of 500 for expired tokens
Expired tokens raised an unhandled error, so clients could not
tell them apart from a server failure and never refreshed.
scripts/check_message.py:
import re
import sys
PATTERN = re.compile(r"^(feat|fix|refactor|docs|test|chore)(\([\w-]+\))?: .+")
first_line = sys.argv[1].splitlines()[0]
if not PATTERN.match(first_line):
sys.exit("第一行格式应为:<类型>(<范围>): <简述>")
if len(first_line) > 72:
sys.exit(f"第一行有 {len(first_line)} 个字符,超过 72 个")
print("格式正确")
注意这里的分工:“写得好不好”交给模型判断,“格式对不对”交给脚本检查。
2. 放到 Agent 能找到的位置
不同工具查找 Skill 的目录不同,以 Claude Code 为例:
- 个人使用(所有项目可用):
~/.claude/skills/git-commit-message/ - 项目共享(随代码提交,团队成员都能用):
项目根目录/.claude/skills/git-commit-message/
其他工具请查阅各自文档中的 skills 目录说明。由于格式是统一的,迁移时一般只需要把文件夹复制过去。
3. 校验格式
官方提供了参考校验工具 skills-ref,可以检查元数据是否合规:
skills-ref validate ./git-commit-message
之后你只要说一句“帮我提交一下”,Agent 就会自动认出这个 Skill 并按流程执行。
六、写好 Skill 的几条经验
- description 是重中之重。 Agent 只凭它决定要不要启用 Skill。要同时写清“做什么”和“什么时候用”,并带上用户可能说的关键词。
- 差:
description: 处理 PDF。 - 好:
description: 提取 PDF 文字和表格、填写表单、合并文件。当用户处理 PDF,或提到表单、文档提取时使用。
- 差:
- SKILL.md 保持精简。 官方建议正文不超过 500 行、5000 tokens 以内;详细的参考资料拆到
references/里,在正文中用相对路径引用。 - 引用只嵌套一层。 从
SKILL.md直接链接到参考文件即可,不要让参考文件再链接一串文件。 - 能用脚本的就别让模型“想”。 校验、转换、计算这些确定性工作写成脚本,脚本要有清晰的报错信息。
- 给出示例。 一个具体的输入输出例子,往往比三段抽象描述更管用。
- 一个 Skill 只做一件事。 “PDF 处理”和“周报生成”应该拆成两个 Skill,description 才写得准,也不会误触发。
七、安全提醒
Skill 可以包含可执行脚本,也可以通过说明文字引导 Agent 做任何事。安装一个 Skill,相当于让 Agent 按别人写的手册干活。 所以:
- 只安装来源可信的 Skill,安装前通读
SKILL.md和脚本; - 留意说明里有没有要求访问网络、读取敏感文件、执行破坏性命令;
- 团队共享的 Skill 和代码一样走 Code Review。
总结
- 是什么:一个带
SKILL.md的文件夹,把某类任务的知识和流程打包给 AI Agent。 - 怎么工作:渐进式披露——启动时只读名字和用途,用到时读说明,需要时再读资料、跑脚本。
- 好在哪:可以装很多却几乎不占上下文;确定性的工作交给脚本;一次编写,多个 Agent 通用。
- 和 MCP 的关系:MCP 接通外部系统,Skill 传授做事方法,两者互补。
如果你发现自己总在对 AI 重复同一套交代,不妨把它写成一个 Skill。
参考资料
- Agent Skills 官方规范:https://agentskills.io/specification
- Agent Skills 概览:https://agentskills.io
- 规范与校验工具仓库:https://github.com/agentskills/agentskills
更多推荐

所有评论(0)