前置知识

阅读本文前,建议先了解:


一、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 CallSkill
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-generator

7.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

九、延伸阅读