技能系统——让AI学会你的"独门绝技"

你有没有重复告诉AI"请按这个格式写提交信息"?或者"记得用我们的代码规范"?
每次都要提醒很麻烦。技能系统(Skills)就是解决这个问题的——让AI学会你的"独门绝技",下次直接用。
今天咱们就聊聊这个"AI的技能书"。
图:技能系统像游戏里的技能书,学会后就能用
技能是什么
技能(Skill)是封装好的提示词模板,可以被AI调用执行特定任务。
简单理解:
- 普通prompt:每次都要说"请按X格式写Y"
- 技能:一次定义,多次复用,“使用writeCommitMessage技能”
技能的核心价值:
- 复用:一次定义,到处使用
- 标准化:统一的行为和输出
- 简化:复杂的任务变成简单的调用
- 可分享:团队共享,社区交流
内置技能vs用户自定义
Claude Code的技能分两类:
内置技能:Anthropic官方提供的,开箱即用。
- /commit:生成规范的提交信息
- /pr:生成PR描述
- /review:代码审查清单
- /test:生成测试用例
用户自定义技能:用户或团队自己定义的。
- 公司代码规范检查
- 项目特定的重构模式
- 团队的文档模板
图:内置技能vs用户自定义技能
技能的定义
技能是一个YAML文件,定义了:
name: writeCommitMessage
description: |
根据代码变更生成规范的提交信息。
使用Conventional Commits格式。
input:
type: object
properties:
changes:
type: string
description: 代码变更的描述
run: |
请根据以下代码变更,生成符合Conventional Commits规范的提交信息:
{{changes}}
格式要求:
- type(scope): subject
- body(可选)
- footer(可选)
示例:
feat(auth): add OAuth2 login support
- Add Google OAuth provider
- Update login UI
- Add token refresh logic
Closes #123
关键字段:
- name:技能名称,调用时使用
- description:技能的描述,模型用来决定是否使用
- input:技能需要的参数
- run:执行技能的提示词模板
SkillTool:技能的执行器
技能通过SkillTool调用:
// 模型调用
{
tool: 'SkillTool',
input: {
skill: 'writeCommitMessage',
changes: 'Added user authentication with bcrypt...'
}
}
SkillTool的工作流程:
接收调用 → 查找技能定义 → 填充模板 → 执行提示词 → 返回结果
填充模板使用Jinja2语法:
run: |
请为以下代码变更生成提交信息:
{{changes}}
作者:{{author}}
日期:{{date}}
输入{changes: "...", author: "张三", date: "2026-06-20"}会被填充成:
请为以下代码变更生成提交信息:
...
作者:张三
日期:2026-06-20
技能vs MCP工具
技能和MCP工具都能扩展AI能力,但用途不同:
| 维度 | 技能 | MCP工具 |
|---|---|---|
| 本质 | 提示词模板 | 外部程序 |
| 执行者 | AI模型 | 外部系统 |
| 能力 | 文本生成、分析 | 任意计算、IO操作 |
| 复杂度 | 简单 | 复杂 |
| 状态 | 无状态 | 可以有状态 |
| 示例 | 生成文档、格式化 | 读取数据库、调用API |
简单说:
- 技能:让AI"更会做事"(提示词层面的扩展)
- MCP工具:让AI"能做更多事"(能力层面的扩展)
图:技能与MCP工具的区别和配合
两者可以配合使用:
- 技能调用MCP工具获取数据
- MCP工具的结果由技能处理
- 技能决定什么时候用什么MCP工具
实战:自定义技能
看几个实际技能案例。
案例1:代码规范检查
name: checkCodeStyle
description: |
根据团队代码规范检查代码。
返回不符合规范的地方和建议。
input:
code:
type: string
description: 要检查的代码
language:
type: string
description: 编程语言
run: |
请检查以下{{language}}代码是否符合我们团队的规范:
```{{language}}
{{code}}
我们的规范:
- 函数名使用驼峰命名
- 行尾不要有分号
- 使用2空格缩进
- 注释使用JSDoc格式
请列出所有不符合规范的地方,并给出修改建议。
**案例2:生成API文档**
```yaml
name: generateApiDoc
description: |
根据代码生成API文档。
使用OpenAPI格式。
input:
code:
type: string
description: API处理函数代码
run: |
请根据以下代码生成OpenAPI规范的文档:
{{code}}
输出格式:
- 路径
- 方法
- 请求参数(含类型、必填、描述)
- 响应格式
- 错误码
案例3:多语言翻译
name: translateDoc
description: |
将文档翻译成目标语言。
保持技术术语准确。
input:
content:
type: string
targetLanguage:
type: string
run: |
请将以下内容翻译成{{targetLanguage}},保持技术术语准确:
{{content}}
注意事项:
- 代码块保持原样不翻译
- 专有名词保持英文
- 保持Markdown格式
技能的管理和分享
技能文件放在哪里?
项目级技能:.claude/skills/*.yaml
只对当前项目可用
用户级技能:~/.claude/skills/*.yaml
对所有项目可用
内置技能:内嵌在Claude Code中 所有人都能用
分享技能:
# 导出技能
claude skill export checkCodeStyle > check-code-style.yaml
# 导入技能
claude skill import check-code-style.yaml
# 分享给别人
# 直接发送YAML文件,或发布到GitHub
最佳实践
技能设计:
- 单一职责:一个技能只做一件事
- 清晰描述:description要准确说明使用场景
- 合理参数:参数不要太多,必要的要有默认值
- 示例丰富:在run中包含示例输出
技能命名:
- 使用驼峰命名
- 动词开头:write、check、generate
- 见名知意:不需要看描述就知道做什么
技能文档:
- 说明使用场景
- 提供示例输入输出
- 说明与相关技能的区别
技能版本:
- YAML文件中加入version字段
- 重大变更时更新版本
- 考虑向后兼容
这对使用Claude Code的启示
理解技能系统,能让你:
减少重复prompt:把常用的prompt封装成技能
标准化团队工作流:共享技能,统一AI使用方式
提升AI输出质量:精心设计的技能比临时prompt更可靠
扩展AI能力:不需要写代码,用YAML就能扩展
总结
技能系统让AI从"通用助手"变成"专业顾问":
- 技能是封装好的提示词模板
- SkillTool执行技能,填充模板,返回结果
- 技能与MCP工具互补:技能扩展"智慧",MCP扩展"能力"
- 自定义技能让AI学会你的"独门绝技"
这就是Claude Code技能系统的全部。希望这个系列帮你深入理解了Claude Code的底层原理。
这个系列到此结束。12篇文章,从架构到提示工程,从上下文管理到安全权限,从CLAUDE.md到技能系统,带你完整解剖了Claude Code的内脏。
如果觉得有收获,欢迎点赞转发。想看更多技术深度文章,关注梦兽编程。
