核心问题
Skill 的测试长期依赖"凭感觉"------用一个 prompt 测试一次,输出看起来合理就算通过。随着 skill 变得复杂、团队开始依赖它们,问题逐渐暴露:模型更新后 skill 可能失效,修改一行指令可能破坏其他功能。
Skill-Creator plugin 是 Anthropic 对此问题的解决方案,它将软件工程的测试纪律引入 skill 开发------包括 evals、benchmarks、A/B 对比和 description 优化。
什么是 Skill
Skill 是一个 markdown 文件(SKILL.md),为 Claude 提供特定任务的专用指令。文件顶部有 YAML frontmatter(包含 name 和 description),正文是 Claude 执行任务时读取的指令。
Description 决定 Claude 何时触发该 skill------Claude 扫描所有可用 skill 的 description,根据用户输入匹配加载。
目录结构:
perl
my-skill/
├── SKILL.md # 核心指令 + frontmatter
├── scripts/ # 可选:Python scripts
├── templates/ # 可选:参考模板
└── assets/ # 可选:支持文件
YAML frontmatter 格式:
yaml
---
name: my-skill-name
description: A clear description of what the skill does and when to trigger it.
---
核心难点:如何验证指令是否真正产出预期输出------这正是 Skill-Creator 要解决的。
安装方式
方式一:Plugin Marketplace(推荐用于 Claude Code)
bash
/plugin marketplace add anthropic/skills
安装后选择 skill-creator ,选择 User Scope 使其跨项目可用。重启 Claude Code 后运行 /skill 确认。
方式二:克隆仓库
bash
git clone https://github.com/anthropics/skills.git
cd skills/skills/skill-creator
目录结构:
perl
skill-creator/
├── SKILL.md # 主指令
├── agents/ # Grader, comparator, analyzer subagents
├── assets/ # eval 结果的 HTML 模板
├── eval-viewer/ # 生成 HTML review 界面的 scripts
├── references/ # Schema 文档
└── scripts/ # 核心测试和 benchmarking 逻辑
本地安装:
bash
mkdir -p ~/.claude/skills/
cp -r skill-creator ~/.claude/skills/
方式三:Claude.ai 或 Cowork
无需安装,直接在对话中要求 Claude 使用 skill-creator 即可自动加载。
四种工作模式
| 模式 | 功能 |
|---|---|
| Create | 通过引导式问答从零构建新 skill,生成草稿和初始测试用例 |
| Eval | 对现有 skill 运行测试 prompts 和 expectations,生成 HTML 报告逐项展示结果 |
| Improve | 将失败的 evals 输入改进循环,Claude 迭代优化 skill 指令直到更多测试通过 |
| Benchmark | 多次运行 evals 并进行方差分析,对比有/无 skill 的表现,用数据证明 skill 是否有价值 |
调用方式:
bash
/skill-creator
/skill-creator "run evals on my PDF skill"
/skill-creator "create a new skill for reviewing PRs"
/skill-creator "benchmark my skill across 10 runs"
实战流程:构建 PRD 写作 Skill
Step 1:Create Flow
bash
/skill-creator "I want to create a skill for writing PRDs"
Skill-Creator 会问以下澄清问题:
- PRD 遵循什么格式?
- 用户通常提供什么输入?
- 好的输出 vs 差的输出是什么样的?
- Claude 绝对不应该做什么?
问答过程约 5-10 分钟,产出 SKILL.md 初稿。初稿不完美但提供了可靠的起点。
Step 2:编写 Evals
Eval 由两部分组成:
- test prompt------用户可能实际输入的内容
- expectations------输出应包含或满足的条件
关键原则:expectations 必须是可验证的。 "Output is high quality" 不是 expectation,"Output includes a Success Metrics section" 才是。要具体、要结构化。
Eval 示例:
json
{
"evals": [
{
"prompt": "Write a PRD for a user notification preferences feature",
"expectations": [
"Output includes a Problem Statement section",
"Output includes at least 3 user stories",
"Output includes a Success Metrics section",
"Output does not include implementation details in the requirements section"
]
},
{
"prompt": "Write a PRD for a mobile checkout flow redesign",
"expectations": [
"Output includes a Background section explaining current state",
"Output includes out-of-scope items",
"Success metrics are measurable and specific, not vague"
]
}
]
}
Step 3:运行 Evals
bash
/skill-creator "run evals on my PRD skill"
Skill-Creator 为每个 eval 启动独立的 grader agent(干净上下文,无交叉污染),运行 skill 后逐条检查 expectations。完成后自动生成 HTML eval viewer:
bash
python eval-viewer/generate_review.py --static eval_results.html
浏览器打开后可逐项查看:prompt、expected outputs、通过/失败状态、实际输出。
实测首次运行 3/5 通过。两个失败原因:requirements section 包含了实现细节;success metrics 过于模糊(如"improve user satisfaction")。这些问题在单次手动测试中不会被发现。
改进循环
bash
/skill-creator "improve my PRD skill based on failing evals"
改进循环的工作原理:
- 将 evals 按 60/40 分为 training set 和 held-out test set
- 在 training set 上评估当前 skill
- 调用 Claude(启用 extended thinking)基于失败项提出 SKILL.md 改进建议
- 用新版本重新评估两个集合
- 最多重复 5 次迭代,按 test set 分数选择最佳版本(避免过拟合训练集)
实测经过 3 次迭代,training set 从 3/5 提升到 5/5,held-out test set 2/2 通过。Skill-Creator 做出的修改:添加明确指令将实现细节放入独立的"Technical Considerations"section(而非完全移除),并要求 success metrics 包含具体数字或百分比。
Benchmark:证明 Skill 的价值
核心问题:skill 是否真的让 Claude 表现更好,还是加载与否结果相同?
bash
/skill-creator "benchmark my PRD skill across 10 runs and compare with/without"
Benchmark 追踪三项指标:
- Pass rate------expectations 通过百分比
- Token usage------消耗的 token 数
- Elapsed time------执行耗时
PRD skill 的 benchmark 结果:
| 模式 | Pass Rate | Avg Tokens | Avg Time |
|---|---|---|---|
| With skill | 94% | 4,210 | 18s |
| Without skill | 61% | 3,890 | 15s |
Skill 增加约 320 tokens 开销和 3 秒耗时,但 pass rate 提升 33 个百分点。
对于较旧或较简单的 skill,可能发现基础模型无论是否加载 skill 都能 100% 通过------这意味着模型已原生吸收了这些能力,可以考虑退役该 skill 或将其进化为更具体的用途。
Description 优化
Skill 常见问题:构建得很好但触发不了,因为 description 与用户实际输入不匹配。
bash
/skill-creator "optimize the description for my PRD skill"
优化器获取当前 description 和一组样本 prompts(应触发和不应触发的),迭代优化触发精度。
Claude 倾向于对 skill 触发偏保守(undertrigger)。优化器通常会使 description 稍微"主动"一些,明确列出 skill 应触发的上下文。
优化前:
"Helps write product requirement documents."
优化后:
"Helps write product requirement documents (PRDs). Use this skill whenever the user mentions writing a PRD, feature spec, requirements doc, or user stories --- even if they don't use the word 'PRD' specifically."
这一改动将触发准确率从 5/8 提升到 8/8。
底层架构:四个 Agent
| Agent | 职责 |
|---|---|
| Executor | 在干净上下文中对每个 eval prompt 运行 skill,追踪 token 用量和耗时 |
| Grader | 读取输出文件和对话 transcripts,逐条推理判断 expectation 是否满足(非简单关键词匹配) |
| Comparator | A/B 测试用:盲评两个 skill 版本的输出,根据 rubric 选出胜者,防止评估偏差 |
| Analyzer | 分析哪些 expectations 持续失败,针对 skill 的具体部分提出改进建议,驱动改进循环 |
两类 Skill 及其测试策略
Capability Uplift Skills(能力提升型)
赋予 Claude 原本无法可靠完成的能力。例如文档生成 skill(PDF, DOCX, PPTX, XLSX)编码了生成格式正确文件的特定技术。
Benchmark 的两个用途:
- 检测 skill 在模型更新后是否仍有效
- 检测 skill 是否仍有必要(如果基础模型已原生掌握该能力,skill 可退役)
Encoded Preference Skills(偏好编码型)
为 Claude 已能完成的任务编码团队特定的工作流偏好------如特定的 PRD 格式、特定的 code review checklist、特定的公司语气。
这类 skill 更持久(偏好不会被模型吸收),但需要保真度测试------确认小改动没有意外跳过某个步骤。
常见错误
-
Expectations 过于模糊:"Output should be good" 无法被 grader 验证。"Output should include a Problem Statement section before the user stories" 才可检查。Evals 越模糊,grader 越需要主观判断,结果越不可靠。
-
只测试 happy-path prompts:所有 eval 都是"write a PRD for X feature"类型当然会全部通过。有价值的失败来自边缘情况:不完整输入、模糊请求、与 skill 用途相邻但不完全匹配的 prompts。
-
改进循环运行过多次:超过 5 次迭代有过拟合风险。Skill-Creator 默认上限为 5 次。
-
忽略 held-out test set:Skill-Creator 使用 60/40 train/test split。Training set 100% 但 held-out set 只有 40% 意味着 skill 只是记住了示例而非学会了模式。务必检查 held-out score。
快速参考:关键命令
bash
# 从 marketplace 安装
/plugin marketplace add anthropic/skills
# 查看可用 skills
/skill
# 运行 Skill-Creator
/skill-creator
# 具体模式
/skill-creator "create a new skill for [task]"
/skill-creator "run evals on my [skill name] skill"
/skill-creator "improve my [skill name] skill based on failing evals"
/skill-creator "benchmark my [skill name] skill across 10 runs"
/skill-creator "optimize the description for my [skill name] skill"
# 生成静态 eval viewer(在 Claude Code 中使用)
python eval-viewer/generate_review.py --static results.html
FIN