🧠 Skills是什么?
随着 AI 应用从简单的"单轮问答"走向复杂的"自动化工作流",Skills 已经成为大模型应用架构中绕不开的工程概念。
更合理的工程做法,是把每一项专项能力分别写成独立的 SKILL.md:
- 代码审查标准
- 慢查询排查流程
- 报告生成规范
元数据常驻上下文,正文按需加载。新人能读懂,换项目能复用,Agent 按需激活执行,互不干扰。
📖 核心定义
Skill 是一个用自然语言定义的、具有特定领域上下文的逻辑指令集,本质上是通过延迟加载优化 Token 消耗的 sub-agent。
在团队协作中,很多"隐性知识"都在老员工脑子里,比如代码规范、排查流程、Review 标准。
Skills 的核心价值在于:把这些隐性规则变成显性的文档(SOP),让 AI 能够自主阅读、理解并执行。
与传统的硬编码逻辑不同,Skill 不强制规定每一步的代码逻辑,而是用自然语言将决策权下放给模型。
模型通过 load_skill() 动态加载 SKILL.md 后,将其中定义的规则、流程和约束实时注入到推理上下文中,指导后续的工具调用和决策。这既保留了 Agent 处理不确定性的优势,又避免了纯代码编排的僵化。
⚙️ 关键机制
延迟加载(Lazy Loading)
- 元数据保持简短,常驻上下文
- 正文仅在触发时动态注入,避免挤占 Token
动态上下文注入
- 不同于静态文档的"阅读",Skills 是将规则实时注入推理上下文
- 直接影响模型决策,而非仅作为参考
🔄 为什么不是"基于 Function Calling 封装"?
这个表述容易让人误以为 Skill 是某种 Function Calling 的语法糖。实际上,Skill 的核心机制是上下文注入——Agent 读取 Markdown 文档,把其中的规则和流程纳入推理上下文。
Function Calling 只是 Agent 执行某些动作时可能用到的底层手段,不是 Skills 本身的定义层。
注意:
load_skill()是对"Agent 读取并激活 SKILL.md"这一过程的概念性描述,不同工具的实际触发方式会有差异。
⚖️ Skills与相关概念的区别
Skills vs Prompt
| 维度 | Prompt | Skills |
|---|---|---|
| 本质 | 单次对话的文本指令 | 可持久化、可发现的能力单元 |
| 复用性 | 随对话上下文丢失,难以维护 | 标准化封装,跨项目、多场景复用 |
| 加载机制 | 全量载入(挤占 Token) | 延迟加载(按需读取正文) |
一句话总结:Prompt 是用户即时表达意图的载体;Skills 是包含元数据(何时使用)+ 正文(如何执行)的完整方案,通过 load_skill() 机制按需加载到上下文。
🔌 Skills vs MCP
这是最容易产生误解的地方。
| 维度 | MCP (Model Context Protocol) | Skills |
|---|---|---|
| 核心思路 | 标准化连接:通过 JSON-RPC 统一数据格式 | 逻辑编排:用自然语言描述复杂执行路径 |
| 定义方式 | 在 Server 端用代码(TS/Python)写死逻辑 | 在 SKILL.md 中用自然语言引导模型决策 |
| 环境依赖 | 需要运行一个 MCP Server 进程 | 依赖可执行环境(如本地 Shell 或沙箱) |
| 哲学 | 以协议为中心:一次编写,所有 AI 通用 | 以模型为中心:利用模型推理能力处理不确定性 |
-
MCP 解决的是连通性:它像 USB-C,让 AI 能以统一格式读文件、查数据库。
-
Skills 解决的是编排逻辑:它像一份说明书,告诉 AI 如何执行复杂任务流。这些任务完全可以包括调用多个 MCP 工具。
两者关系:它们不是竞争关系,而是解决不同层面的问题。MCP 负责把外部系统接入,Skills 负责决定什么时候用、怎么组合这些能力。一个高级 Skill 的底层往往调用多个 MCP 工具。
🎯 Function Calling vs Skills
| 维度 | Function Calling | Skills |
|---|---|---|
| 层级 | 底层机制 | 上层应用 |
| 粒度 | 原子操作(单次工具调用) | 复合流程(多步骤决策 + 工具组合) |
Skills 没有创造新能力,而是通过自然语言文档将能力组织成更易用的形式。
Agent 读取 SKILL.md,将规则和流程注入推理上下文。根据上下文指导,Agent 可能通过 Function Calling 执行脚本、读取资源或调用 MCP 工具。
🏗️ 四层关系总结
| 组件 | 一句话定义 | 形象类比 |
|---|---|---|
| Prompt | 即时意图表达的载体 | 用户说的话 |
| Function Calling | LLM 输出结构化调用的能力 | 神经信号,一切的基础 |
| MCP | 标准化的工具接入协议 | USB-C 接口 |
| Skills | 用自然语言定义的 sub-agent | 任务说明书 |
层级关系:Function Calling 是地基 → Prompt 表达意图 → MCP 负责连通外部系统 → Skills 负责编排复杂任务流。
一句话总结:Prompt 承载意图,Function Calling 实现交互,MCP 负责连通外部系统,Skills 负责编排复杂任务流——从"说什么"到"怎么做"再到"聪明地做"。
💡 Skills实例
📁 Skill的目录结构
从结构上看,Skill 核心就是一个 SKILL.md 文件,包含元数据(描述什么时候用)和正文(具体的执行 SOP)。
设计亮点是渐进式披露:元数据常驻上下文,AI 知道有哪些技能可用;正文按需加载,只有触发时才读取。
复杂点的 Skill 还会有附加的资源目录、脚本和参考文档:
|
|
🧪 SKILL.md示例结构
|
|
🛠️ 项目实战场景
在工程实践中,Skills 主要用于固化工程标准:
| Skill 名称 | 用途 |
|---|---|
code-reviewer |
审查代码规范,从架构合理性、异常处理、日志规范、安全风险等多维度进行结构化审查 |
api-endpoint-generator |
按项目统一响应结构与异常模型生成标准化接口代码 |
database-access-review |
审查数据库访问逻辑,关注索引使用与慢查询风险 |
refactor-analysis |
先评估影响范围与依赖关系,再输出分步骤重构方案 |
security-audit |
扫描 SQL 拼接、XSS、权限绕过等常见安全风险 |
使用 Skills 的好处:AI 在执行任务时,不再是"随缘发挥",而是严格执行团队标准,保持质量一致性。
🌐 推荐Skills资源
- skills.sh:查找热门和所需的 Skills
- Superpowers:内置多种开箱即用的开发 Skills
- Claude Code 内置 Skills:包括
/simplify(审查修复)、/batch(批量修改)、/debug(排查问题)等
📝 总结
Skills 的本质:用自然语言定义的、具有特定领域上下文的逻辑指令集,通过延迟加载优化 Token 消耗,本质上是 sub-agent。
Skills 的价值:
- 模块化:每个 Skill 专注一项能力,互不干扰
- 可复用:换项目时直接迁移,新人易读懂
- 按需加载:元数据常驻,正文按需注入,不挤占上下文
Skills 与其他组件的关系:
- Prompt 承载意图
- Function Calling 实现交互
- MCP 负责连通外部系统
- Skills 负责编排复杂任务流
适用场景:当你的 Agent 工作流节点增多、审查标准变复杂、团队需要协作时,Skills 是将"隐性知识"显性化、工程化的最佳实践。