你有没有重复告诉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的内脏。

如果觉得有收获,欢迎点赞转发。想看更多技术深度文章,关注梦兽编程。