前置知识
阅读本文前,建议先了解:
- 01-Skill 的定义与作用 - 了解Skill基本概念
一、Skill的调用机制
1.1 触发方式
Skill有两种触发方式:
┌─────────────────────────────────────────────────────────┐
│ Skill触发方式 │
├─────────────────────────────────────────────────────────┤
│ │
│ 方式一:自动触发 │
│ ┌─────────────┐ │
│ │ 用户发送消息 │ → 包含关键词 → 自动调用对应Skill │
│ └─────────────┘ │
│ │
│ 方式二:手动调用 │
│ ┌─────────────┐ │
│ │ 使用/Skill命令 │ → 指定Skill名称 → 调用 │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
1.2 自动触发示例
用户:帮我把这个PDF的第三章提取出来
→ Claude识别到"PDF"关键词
→ 自动调用 pdf Skill
→ Skill执行PDF处理流程
→ 返回提取的内容
1.3 手动调用示例
用户:使用pdf Skill提取这个文件的表格
→ 用户明确指定使用pdf Skill
→ 调用 /skill 命令,传入"pdf"参数
→ Skill执行表格提取流程
→ 返回表格内容
二、Skill的内部结构
2.1 Skill文件结构
一个完整的Skill通常包含:
skills/
├── pdf/
│ ├── SKILL.md ← Skill核心定义
│ ├── REFERENCES/ ← 参考文档
│ │ ├── EXAMPLES.md
│ │ └── FUNCTIONS.md
│ └── tests/ ← 测试文件
标准目录结构:
my-custom-skill/
├── SKILL.md # 必需:元数据和核心指令
├── REFERENCE.md # 可选:补充参考资料
├── scripts/ # 可选:可执行脚本目录
│ └── helper.sh
├── assets/ # 可选:资源文件目录
│ └── template.json
└── tests/ # 可选:测试文件
└── test_cases.md
三、SKILL.md格式详解
SKILL.md是Skill的核心文件,必须包含YAML frontmatter。
3.1 必需字段
---
name: skill-name-in-kebab-case # 名称:kebab-case格式
description: "做什么 + 何时使用" # 描述:触发判断依据
---3.2 完整示例
---
name: standardized-report-generator
description: "创建结构化品牌报告,包含执行摘要、发现、建议和附录;用于用户请求创建标准化报告时"
---
# 标准化报告生成器
## 使用场景
当用户请求创建以下类型的报告时使用此Skill:
- 季度业务报告
- 项目状态报告
- 市场分析报告
## 核心指令
### 1. 报告结构
每个报告必须包含以下部分:
1. **执行摘要** (Executive Summary)
- 1-2段概述
- 关键发现要点(3-5条)
- 核心建议
2. **发现** (Findings)
- 数据支持的分析
- 图表和数据可视化
3. **建议** (Recommendations)
- 具体可执行的行动项
- 优先级标注(高/中/低)
### 2. 错误处理
- 如果用户未指定报告类型,询问确认
- 如果缺少必要数据,提示用户提供
## 示例
### 示例1
用户输入:帮我写一份Q4销售报告
期望输出:[结构化报告...]
### 示例2
用户输入:创建技术评估报告
期望输出:[技术报告...]四、Skill的工作流程
4.1 完整调用流程
Step 1: 用户请求
┌─────────────┐
│ "帮我读PDF" │
└──────┬──────┘
↓
Step 2: 触发判断
┌─────────────┐
│ 语义匹配 │
│ 关键词识别 │
└──────┬──────┘
↓
Step 3: 渐进式加载
┌─────────────┐
│ 加载Level1 │ → name + description
│ 加载Level2 │ → 详细指令(如需要)
│ 加载Level3 │ → 参考资料(如需要)
└──────┬──────┘
↓
Step 4: 执行任务
┌─────────────┐
│ PDF处理流程 │
│ 调用内部Tool │
└──────┬──────┘
↓
Step 5: 返回结果
┌─────────────┐
│ 提取的内容 │
└─────────────┘
4.2 Skill vs 普通Function Call
| 步骤 | 普通Function Call | Skill |
|---|---|---|
| 1 | 用户传入函数定义 | 预定义在SKILL.md |
| 2 | 手动指定调用 | 自动/手动触发 |
| 3 | 单次函数执行 | 完整工作流程 |
| 4 | 返回简单结果 | 可返回复杂结构 |
五、Skill的判断逻辑
5.1 自动触发如何判断?
用户消息 → 提取关键词 → 匹配Skill → 触发
↓
┌───────────────┐
│ Skill description│
│ 包含"PDF处理" │
└───────────────┘
↓
匹配成功 → 调用
匹配失败 → 普通对话
5.2 触发条件判断
# Skill的description字段用于匹配
---
name: pdf
description: 用于处理PDF文件,创建、读取、提取PDF内容
---
# 当用户消息包含以下关键词时自动触发:
- "PDF"、"pdf"
- "读PDF"、"提取PDF"
- "合并PDF"、"拆分PDF"六、Skill的工具支持
6.1 Skill内部可以使用的工具
Skill执行过程中可以使用:
┌─────────────────────────────────────┐
│ • Read/Write/Edit → 文件操作 │
│ • Glob/Grep → 搜索 │
│ • Bash → 执行命令 │
│ • WebFetch → 获取网页 │
│ • 其他Skill → 调用其他Skill│
└─────────────────────────────────────┘
6.2 组合使用示例
pdf Skill 内部可能:
1. 使用 Glob 找到PDF文件
2. 使用 Bash 调用 pdftk 合并
3. 使用 Read 读取结果
4. 返回给用户
七、使用Skill的方式
7.1 手动激活(显式调用)
# 使用 /skill 命令
/skill standardized-report-generator
# 或使用 Skill 工具
Skill: standardized-report-generator7.2 API调用
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
messages=[{
"role": "user",
"content": "帮我创建一份Q4销售报告"
}],
tools=[{
"type": "anthropic",
"skill_id": "standardized-report-generator",
"version": "latest"
}]
)7.3 自动触发
Claude会根据以下信号自动判断是否触发Skill:
- 任务描述与Skill description的语义匹配
- 关键词匹配
- 用户历史行为模式
八、总结
- 触发方式:自动(关键词匹配)或手动(使用/Skill命令)
- 内部结构:SKILL.md定义 + REFERENCES参考文档 + scripts脚本
- 工作流程:识别 → 渐进式加载 → 执行 → 返回
- 核心优势:预定义工作流程,无需每次重复描述
- 渐进式披露:按需加载不同层级的信息,节省Token
九、延伸阅读
- 01-Skill 的定义与作用 - Skill基本概念
- 03-现有 Skill 介绍 - 了解已有哪些Skill可用
- 04-Skill 与 MCP 的关系 - Skill与MCP的区别与互补
- Function Call - 了解Tool基础