微信扫码
添加专属顾问
我要投稿
深入解析Anthropic官方技能创建系统,揭秘如何将AI技能开发工程化。 核心内容: 1. Skill-Creator的核心定位与两类技能区分 2. 解决领域专家非工程师的创作痛点 3. 完整的"假设->实验->迭代"技能研发流程
基于 Claude 官方 skill-creator 源码和 Anthropic 官方博客文章的分析 官方源码:github.com/anthropics/skills
skills/skill-creator/(485 行 SKILL.md,2026-03-07 版本)
Skill-Creator 是 Anthropic 官方提供的一个 "元技能"(Meta-Skill) —— 一个用来创建、测试、评估和改进其他 Skill 的工具。它本身就是一个 Skill,展示了 Skill 系统的自举能力。
skill-creator 本质是一个"Skill 工程化系统",不是单纯写 SKILL.md 的模板器。 它把"写技能"升级为"假设 -> 实验 -> 度量 -> 人审 -> 迭代"的产品研发流程,重点解决三个问题:
根据 Anthropic 官方博客:
"most authors are subject matter experts, not engineers" — 大多数 Skill 作者是领域专家而非工程师。
Skill-Creator 将软件开发的严谨性(测试、基准测试、迭代改进)带给 Skill 创作过程,而无需作者编写代码。
| 能力提升型 | |||
| 偏好编码型 |
这个区分很重要:能力提升型 Skill 可能随模型进化而过时,偏好编码型 Skill 则需要持续验证是否匹配实际团队流程。两类 Skill 的评估逻辑不同:提升型重点看 "with-skill vs without-skill" 是否拉开;流程型重点看是否稳定遵守团队规范。
SKILL.md 485 行,2026-03-07 版本)+--------------------------------------------------+
| |
| 捕获意图 -> 面试调研 -> 撰写 SKILL.md |
| | |
| 创建测试用例 -> 运行(with/without skill) |
| | |
| 评估与评分 -> 生成基准报告 |
| | |
| 人工审核(Viewer) -> 反馈 |
| | |
| 改进 Skill -> [回到运行测试] |
| | |
| 描述优化 -> 打包发布 |
| |
+--------------------------------------------------+
来源:SKILL.md 开头的工作流概述章节。
注意:下面描述的是 skill-creator 的功能模块划分,与第 4.1 节的"渐进式加载三层"是不同维度的概念,不要混淆。
+----------------------+
| 用户 (User) |
| - 领域专家 |
| - 非工程师背景 |
+----------+-----------+
|
+--------------+--------------+
| Skill-Creator |
| (Meta-Skill) |
+--------------+--------------+
|
+-----------------------+-----------------------+
| | |
+------+------+ +------+------+ +------+------+
| 创建模块 | | 评测模块 | | 优化模块 |
| | | | | |
| - 意图捕获 | | - 并行测试 | | - 描述优化 |
| - 面试调研 | | - 评分系统 | | - 盲比较 |
| - SKILL.md | | - 基准聚合 | | - 循环改进 |
| 生成 | | - 可视化审核 | | - 打包发布 |
+-------------+ +------+------+ +-------------+
|
+-------------+-------------+
| | |
+------+---+ +-----+----+ +----+------+
| Grader | |Comparator| | Analyzer |
| Agent | | Agent | | Agent |
+----------+ +----------+ +-----------+
skill-creator/
+-- SKILL.md # [485行] 核心技能定义文档
+-- LICENSE.txt # Apache 2.0 许可证
|
+-- agents/ # 子智能体指令文档
| +-- grader.md # [223行] 评分智能体
| +-- comparator.md # [202行] 盲比较智能体
| +-- analyzer.md # [274行] 分析智能体(含两种模式)
|
+-- scripts/ # 可执行 Python 工具
| +-- __init__.py # 包初始化
| +-- utils.py # [47行] 共享工具函数(SKILL.md 解析器)
| +-- run_eval.py # [310行] 触发评估脚本
| +-- run_loop.py # [328行] 完整优化循环(训练/测试分割)
| +-- improve_description.py # [247行] Claude 驱动的描述改进
| +-- aggregate_benchmark.py # [401行] 基准结果聚合
| +-- generate_report.py # [326行] HTML 报告生成(含自动刷新)
| +-- package_skill.py # [136行] 打包为 .skill 文件
| +-- quick_validate.py # [102行] 基础验证
|
+-- references/ # 参考文档
| +-- schemas.md # [430行] 所有 JSON 格式规范
|
+-- eval-viewer/ # 交互式审核界面
| +-- generate_review.py # [471行] 生成并服务审核页面
| +-- viewer.html # 交互式 HTML 查看器模板
|
+-- assets/ # 模板文件
+-- eval_review.html # 评估集审核 HTML 模板
这是所有 Skill 共享的核心加载机制(SKILL.md "Progressive Disclosure" 章节):
| Level 1: 元数据 | |||
| Level 2: SKILL.md 正文 | |||
| Level 3: 捆绑资源 |
关于目录结构的两种场景:SKILL.md 描述的基本迭代流程(Step 1-5)将 outputs 和 grading 直接放在
with_skill/下;而aggregate_benchmark.py则期望with_skill/run-1/、run-2/这样的多次运行子目录(config_dir.glob("run-*"))。前者是"逐轮迭代 + 人审"的流程,后者是"多次重复跑以计算方差"的基准流程。如果你要用aggregate_benchmark.py,务必按run-*子目录组织。
关键设计点:脚本可以直接执行而无需加载到上下文中(SKILL.md Progressive Disclosure §L3),这大幅节省了 token 消耗。当 SKILL.md 接近 500 行时,应拆分内容到
references/并在 SKILL.md 中给出清晰指针。
---
name:skill-creator
description:Createnewskills,modifyandimproveexistingskills,andmeasure
skillperformance.Usewhenuserswanttocreateaskillfromscratch,
edit,oroptimizeanexistingskill,runevalstotestaskill,
benchmarkskillperformancewithvarianceanalysis,oroptimizea
skill'sdescriptionforbettertriggeringaccuracy.
---
字段约束:
name:description:quick_validate.py 校验范围): license, allowed-tools, metadata, compatibilityuser-invocable, argument-hint, disable-model-invocation, context, agent, hooks 等),以上仅为本仓库校验器的限制,不等同官方完整规范。Description 是 Skill 触发的主要机制。Anthropic 特别指出 Claude 倾向于"欠触发"(不使用可用的 Skill),因此建议描述要有一定"推动性"(参见 Anthropic "Improving skill-creator" 博文):
弱描述:
How to build a simple fast dashboard to display internal data.
强描述:
How to build a simple fast dashboard to display internal data.
Make sure to use this skill whenever the user mentions dashboards,
data visualization, internal metrics, or wants to display any kind
of company data, even if they don't explicitly ask for a 'dashboard.'
描述应包含:
基于 skill-creator 自身的 SKILL.md 结构提取:
# Skill Name
## 概述
[简要说明技能做什么和核心工作流]
## 与用户沟通
[如何适配不同技术背景的用户]
## 创建/执行流程
[详细的分步指令]
## 评估与改进
[如何测试和迭代]
## 高级功能
[可选的进阶用法]
## 平台适配
[Claude Code / Claude.ai / Cowork 差异]
## 参考文件
[指向 agents/, references/, scripts/ 的链接和使用时机]
来源:SKILL.md "Skill Writing Guide" 章节 + Anthropic 官方最佳实践
文件:agents/grader.md(223 行)
双重使命(grader.md: "You have two jobs: grade the outputs, and critique the evals themselves"):
8 步流程:
Step 1: 读取执行记录(完整阅读 transcript)
Step 2: 检查输出文件(用工具检查,不只看 transcript 的声称)
Step 3: 逐条评估断言(搜索证据 + 判定 PASS/FAIL)
Step 4: 提取隐含声明(事实性、过程性、质量性声明并验证)
Step 5: 读取用户笔记(user_notes.md,即使断言通过也可能有问题)
Step 6: 批判评估质量(只在确有差距时指出)
Step 7: 写入评分结果(grading.json)
Step 8: 读取执行指标和计时(metrics.json + timing.json)
评分标准(严格证据导向):
关键设计:Grader 不仅判断 pass/fail,还会:
文件:agents/comparator.md(202 行)
职责:在不知道哪个 Skill 产生了哪个输出的情况下,判断哪个输出更好
关键设计 —— 消除偏见:
评分体系:
内容维度 (Content Rubric)
+-- 正确性 (Correctness): 1-5
+-- 完整性 (Completeness): 1-5
+-- 准确性 (Accuracy): 1-5
结构维度 (Structure Rubric)
+-- 组织性 (Organization): 1-5
+-- 格式化 (Formatting): 1-5
+-- 可用性 (Usability): 1-5
决策优先级:
1. 主要:总体评分 (内容 + 结构)
2. 次要:断言通过率
3. 平手:真正相等才宣布 TIE(comparator.md: "ties should be rare")
文件:agents/analyzer.md(274 行)
重要:Analyzer 有两个完全独立的模式,由文件中的
---分隔,职责和输出格式完全不同。混用会导致错误。
触发场景:盲比较完成后运行,"解盲"分析
流程:
analysis.json(包含 improvement_suggestions)改进建议分类:
instructions |
|
tools |
|
examples |
|
error_handling |
|
structure |
|
references |
触发场景:基准测试聚合后运行
职责:发现模式和异常,明确禁止提改进建议
analyzer.md: "DO NOT: Suggest improvements to the skill
(that's for the improvement step, not benchmarking)"
分析内容:
来源:SKILL.md "Running and evaluating test cases" 章节
Step 1: 并行启动所有运行(with-skill + baseline)
| - 新技能: baseline = 无技能
| - 改进技能: baseline = 旧版本快照
| 关键:同一 turn 启动所有 subagent("Launch everything at once")
v
Step 2: 利用等待时间起草断言
| - 客观可验证
| - 描述性命名(一眼看懂,而非 "test-1")
| - 避免主观判断
v
Step 3: 捕获计时数据
| - total_tokens, duration_ms
| - 来自任务通知,一次性机会("only opportunity to capture this data")
v
Step 4: 评分 + 聚合 + 启动查看器
| a) Grader 评分
| b) aggregate_benchmark.py 聚合
| c) Analyzer 基准分析模式
| d) generate_review.py 查看器
v
Step 5: 读取反馈 (feedback.json)
| - 空反馈 = 认可("Empty feedback means the user thought it was fine")
| - 聚焦有具体意见的用例
skill-name-workspace/
+-- iteration-1/
| +-- eval-descriptive-name/
| | +-- eval_metadata.json # 评估元数据(含 prompt, assertions)
| | +-- with_skill/ # 始终存在:用新版 skill 执行的运行
| | | +-- outputs/ # 技能产出
| | | +-- grading.json # 评分结果
| | | +-- timing.json # 计时数据
| | +-- without_skill/ # 基线(新建 skill 时:无 skill)
| | +-- outputs/ # 或改为 old_skill/(改进已有 skill 时:旧版本)
| | +-- grading.json
| | +-- timing.json
| +-- benchmark.json # 聚合基准
| +-- benchmark.md # 可读基准报告
| +-- feedback.json # 用户反馈
+-- iteration-2/
| +-- ...
+-- skill-snapshot/ # 旧版本快照(改进模式)
注意:上面是 SKILL.md 中描述的基本迭代结构(每个 eval 一次运行)。若要使用
aggregate_benchmark.py做多次重复基准测试,需要在 config 目录下增加run-*子目录层级:
+-- eval-descriptive-name/
| +-- with_skill/
| | +-- run-1/
| | | +-- outputs/
| | | +-- grading.json
| | +-- run-2/
| | +-- outputs/
| | +-- grading.json
| +-- without_skill/
| +-- run-1/
| | +-- ...
| +-- run-2/
| +-- ...
Outputs 标签页:
Benchmark 标签页:
实时刷新(源码验证):Server 模式下每次 GET 请求都会重新扫描 workspace 目录并重新生成 HTML(generate_review.py 的 HTTP handler),这意味着评测运行中刷新浏览器就能看到新结果,不需要重启 server。
来源:SKILL.md "Trigger optimization" 章节
Skill 出现在 Claude 的 available_skills 列表中,Claude 基于 description 决定是否使用某个 Skill。
重要认知:Claude 只会为自己无法轻易独立处理的任务咨询 Skill。简单的一步操作(如"读取这个 PDF")即使描述完美匹配,也可能不会触发 Skill——因为 Claude 可以直接用基础工具处理。
来源:SKILL.md "Trigger optimization" 章节 Step 1
应触发 (8-10 条):
不应触发 (8-10 条):
查询质量要求:
差:"Format this data", "Extract text from PDF"
好:"ok so my boss just sent me this xlsx file (its in my downloads, called something like 'Q4 sales final FINAL v2.xlsx') and she wants me to add a column that shows the profit margin as a percentage. The revenue is in column C and costs are in column D i think"
assets/eval_review.html 模板eval_set.jsonpython -m scripts.run_loop \
--eval-set <path> \
--skill-path <path> \
--model <model-id> \
--max-iterations 5 \
--verbose
内部工作流:
--holdout 参数可调,默认 0.4;设为 0 则不拆分)claude -p 子进程调用 Claude,基于失败案例提出改进(只传训练集结果,详见 12.3)取 best_description 更新 SKILL.md frontmatter
用户输入 (意图、反馈)
|
v
+---------------------+
| SKILL.md | <-- 包含 name, description, 指令
| (技能定义) |
+----------+----------+
|
v
+---------------------+
| evals.json | <-- 测试用例 (prompt, expectations)
| (测试定义) |
+----------+----------+
|
+-----+------+
| |
v v
+---------+ +----------+
|with_skill| |without_ | <-- 并行子智能体执行(同一 turn)
| 运行 | |skill 运行|
+----+----+ +----+-----+
| |
v v
+---------------------+
| Grader Agent | <-- 读取 agents/grader.md
| -> grading.json |
+----------+----------+
|
v
+---------------------+
| aggregate_benchmark | <-- scripts/aggregate_benchmark.py
| -> benchmark.json |
| -> benchmark.md |
+----------+----------+
|
v
+---------------------+
| Analyzer Agent | <-- agents/analyzer.md (基准分析模式)
| -> notes[] | 注意:此模式不输出改进建议
+----------+----------+
|
v
+---------------------+
| Eval Viewer | <-- eval-viewer/generate_review.py
| (浏览器交互) | Server 模式实时刷新,刷新即看新结果
+----------+----------+
|
v
+---------------------+
| feedback.json | <-- 用户反馈
+----------+----------+
|
v
+---------------------+
| 改进 SKILL.md | <-- 基于反馈修改
+----------+----------+
|
+--> [回到执行步骤,新的 iteration-N+1]
两个 Skill 版本各自产生输出
|
v
Comparator Agent <-- 盲比较,标记为 A/B
-> comparison.json
|
v
Analyzer Agent (事后分析模式) <-- 解盲,分析原因
-> analysis.json 此模式才输出 improvement_suggestions
| evals.json | evals/evals.json |
||
| history.json | scripts/* 主流程不直接读写此文件,它是 references/schemas.md 中定义的规范格式 |
||
| eval_metadata.json | <eval-dir>/ |
||
| grading.json | <run-dir>/grading.json |
||
| metrics.json | <run-dir>/outputs/metrics.json |
||
| timing.json | <run-dir>/timing.json |
||
| benchmark.json | |||
| comparison.json | <grading-dir>/ |
||
| analysis.json | <grading-dir>/ |
||
| feedback.json |
重要警告:Viewer 读取精确的字段名。使用
config而非configuration,或将pass_rate放在 run 顶层而非嵌套在result下,都会导致 Viewer 显示空值。
关键精确要求(已验证 aggregate_benchmark.py):
configuration(非 config)result 对象下text, passed, evidence(非 name/met/details)源码术语不一致警告:官方源码中
assertions和expectations两个术语并存于不同 JSON 契约中:
eval_metadata.json(SKILL.md 定义)使用 assertionsevals.json和 grading.json(schemas.md 定义)使用expectations两者指代相同概念但字段名不同,使用时以各自 JSON 文件对应的 schema 为准,不要混用。
来源:SKILL.md "Platform Adaptation" 章节
--static |
|||
claude -p) |
|||
来源:SKILL.md "Platform Adaptation" 章节
来源:SKILL.md "Platform Adaptation" 章节
--static <output_path> 生成静态 HTMLfeedback.json 文件claude -p 子进程)本节基于源码逐行验证,是企业复用价值最高的部分。
run_eval.py
核心创新:不是简单 regex,而是通过 claude -p + 流式事件检测 Skill 是否被调用。
技术实现:
.claude/commands/<name>.md 文件,使描述出现在 Claude 的 available_skills 列表中(run_eval.pyrun_single_query 函数)--output-format stream-json --include-partial-messages 参数,通过 content_block_start 和 content_block_delta 事件做早期检测,而非等待完整输出(run_single_query 函数内 stream event 处理)CLAUDECODE 环境变量以允许在 Claude Code 会话内嵌套运行 claude -p(run_single_query 函数):# Remove CLAUDECODE env var to allow nesting claude -p inside a
# Claude Code session. The guard is for interactive terminal conflicts;
# programmatic subprocess usage is safe.
env = {k: v for k, v in os.environ.items() if k != "CLAUDECODE"}
如果企业要复用这套脚本,不了解这个机制可能会遇到嵌套执行失败的问题。
ProcessPoolExecutor 并行执行(run_eval 函数),每条查询默认跑 3 次(--runs-per-query 参数),计算触发率后与阈值(默认 0.5)比较判定通过/失败run_single_query 函数内):if tool_name in ("Skill", "Read"):
pending_tool_name = tool_name
accumulated_json = ""
else:
returnFalse# 第一个工具调用不是 Skill/Read 就判定未触发
这是有意的设计决策:如果 Claude 的第一个工具调用就不是读取 Skill,说明它选择了直接处理,不需要 Skill。这在绝大多数场景下是正确的,但理论上存在极小概率的假阴性——Claude 先做了一个预处理工具调用再读 Skill。
run_loop.py
核心价值:把 description 优化建模为机器学习问题,引入 train/test split 防过拟合。
关键参数(均可命令行覆盖):
--holdout 0.4:--max-iterations 5:--runs-per-query 3:--trigger-threshold 0.5:分层抽样:按 should_trigger 分层(split_eval_set 函数),确保训练集和测试集都包含正例和负例。
选型逻辑(run_loop 函数):
# Find the best iteration by TEST score (or train if no test set)
if test_set:
best = max(history, key=lambda h: h["test_passed"] or0)
else:
best = max(history, key=lambda h: h["train_passed"])
这是整个系统中最值得注意的工程细节,容易被忽略。
run_loop.py 在调用 improve_description 时,会剥除所有 test 相关数据:
# run_loop.py — blinded history 机制
# Strip test scores from history so improvement model can't see them
blinded_history = [
{k: v for k, v in h.items() ifnot k.startswith("test_")}
for h in history
]
new_description = improve_description(
...
eval_results=train_results, # 只传训练集结果
history=blinded_history, # 历史中也没有测试分数
...
)
含义:改进模型(通过 claude -p 调用的 Claude)完全不知道测试集的存在,也看不到测试分数。它只能基于训练集的失败进行泛化改进。最终选型时才用测试集评判。
这是一个标准的 ML 工程最佳实践,完整实现了"训练集指导优化、测试集评判泛化"的分离。
improve_description.py
实现方式:通过 claude -p --output-format text 子进程调用 Claude(与 run_eval.py 相同的认证模式,使用会话级 Claude Code auth,无需单独的 ANTHROPIC_API_KEY)。prompt 通过 stdin 传入(因为包含完整 SKILL.md 内容,可能超出 argv 长度限制)。
关键设计:
"what I DON'T want you to do is produce an ever-expanding list of specific queries that this skill should or shouldn't trigger for. Instead, try to generalize..."
aggregate_benchmark.py
关键设计:
with_skill/without_skill,而是遍历目录动态发现所有配置(load_run_results 函数),支持 A/B 多版本扩展aggregate_results 函数),顺序敏感——SKILL.md 强调 "Put each with_skill version before its baseline counterpart"calculate_stats 函数),但不做显著性检验eval-viewer/generate_review.py
关键设计:
http.server, base64, json)。但前端 HTML 模板(viewer.html)依赖外部 CDN(Google Fonts、SheetJS 等)。离线环境中 XLSX 预览和字体加载会失败,文本类输出不受影响。--static):生成独立 HTML 文件--previous-workspace 参数加载上轮输出和反馈来源:综合 SKILL.md 全文 + Anthropic 官方博客
来源:SKILL.md "Improving the skill" 章节
用户反馈 -> 理解真实需求(不仅是字面意思)
|
泛化为规则(对百万次使用有效)
|
尝试新方法(不同隐喻、不同工作模式)
|
保持精简(删除无用部分)
|
解释推理(让模型理解 Why)
SKILL.md: "This task is pretty important (we are trying to create billions a year in economic value here!) and your thinking time is not the blocker; take your time and really mull things over."
来源:SKILL.md "Communication" 章节
Skill-Creator 特别关注与不同技术背景用户的沟通:
以下结论均经源码验证,标注了具体代码位置。
run_eval.pyrun_single_query 函数中的 return False 意味着:如果 Claude 的第一个工具调用不是 Skill 或 Read,立即判定未触发。这是有意的设计决策(如果 Claude 直接用其他工具处理说明不需要 Skill),但在极端场景下可能存在假阴性。
run_eval.py 在聚合结果时用 query 字符串做 key(run_eval 函数),默认假设 eval query 唯一。如果评估集中有重复 query(不同 should_trigger),会导致结果覆盖。
aggregate_benchmark.pyaggregate_results 函数:delta 基于前两个发现的配置目录的字典序。SKILL.md 通过约定 "Put each with_skill version before its baseline counterpart" 来解决,但没有代码强制保障——如果目录命名不规范,delta 正负号可能反转。
aggregate_benchmark.py 使用均值和样本标准差,没有做显著性检验(如 t-test、bootstrap CI)。对于严格的 A/B 决策,建议在此基础上补充统计检验。
官方安全模型基于 "Principle of Lack of Surprise" 原则:Skill 不得包含恶意软件、漏洞利用代码或危害系统安全的内容,实际行为不应超出描述范围。在 Claude Code 本地场景下,脚本在用户本机环境中执行,无额外沙箱隔离。
Phase 1: 意图与调研
+-- 1.1 明确 Skill 要做什么
+-- 1.2 确定触发场景
+-- 1.3 定义输出格式
+-- 1.4 调研依赖和 MCP
+-- 1.5 询问边界情况
Phase 2: 编写 Skill
+-- 2.1 创建目录结构
+-- 2.2 编写 SKILL.md frontmatter (name + description)
+-- 2.3 编写核心指令
+-- 2.4 添加示例
+-- 2.5 创建 scripts/ (如有确定性任务)
+-- 2.6 创建 references/ (如有大量参考)
Phase 3: 测试与评估
+-- 3.1 创建 2-3 个测试用例
+-- 3.2 并行运行 with/without skill(同一 turn)
+-- 3.3 起草断言(利用等待时间)
+-- 3.4 评分 + 聚合 + 查看器
+-- 3.5 收集用户反馈
Phase 4: 迭代改进
+-- 4.1 基于反馈泛化改进(不要过拟合)
+-- 4.2 重新运行测试
+-- 4.3 审核新结果
+-- 4.4 重复直到满意
Phase 5: 优化与发布
+-- 5.1 描述优化(20 条查询集)
+-- 5.2 运行 run_loop.py
+-- 5.3 应用最佳描述
+-- 5.4 验证打包
+-- 5.5 发布 .skill 文件
当用户要求更新而非创建 Skill 时:
name 字段原值不变(如原名 research-helper,输出 research-helper.skill,不要加 -v2 后缀)cp -r <skill-path> /tmp/skill-name/,在副本上编辑/tmp/:/tmp/ 再复制到目标位置cp -r <skill-path> <workspace>/skill-snapshot/),将基线 subagent 指向快照,结果保存到 old_skill/outputs/---
name:my-skill-name
description:>
[简述做什么]. Use when [具体场景1], [场景2], [场景3].
Also use when [不明显的场景]. Trigger even if user doesn't
explicitly mention [关键词].
---
# [Skill 名称]
[1-2句概述核心价值和工作流]
## 核心工作流
### Step 1: [步骤名]
[具体指令,解释why]
### Step 2: [步骤名]
[具体指令,解释why]
## 输出格式
[使用模板展示期望输出]
## 示例
**Example1:**
Input: [输入]
Output: [输出]
## 边界情况
[常见问题和处理方式]
## 参考文件
-`scripts/xxx.py`-- [何时使用]
-`references/xxx.md`-- [何时读取]
流程提醒:推荐先只写 prompt 启动运行,利用等待时间再补充 expectations(SKILL.md: "Don't write assertions yet -- just the prompts")。下面模板展示的是最终完整格式。
术语注意:官方源码中
assertions和expectations并存于不同 JSON 契约中——eval_metadata.json使用assertions,evals.json和grading.json使用expectations。详见 §10.2 的完整说明。
{
"skill_name":"my-skill",
"evals":[
{
"id":1,
"prompt":"真实用户会说的话,有具体细节和上下文",
"expected_output":"期望结果的人类可读描述",
"files":[],
"expectations":[
"输出包含 X 格式的 Y 数据",
"使用了 scripts/helper.py 处理数据",
"最终文件大小在合理范围内"
]
}
]
}
注意:本节为基于 skill-creator 设计思想的推导建议,非源码直接分析。建议按实际业务情况取舍。
SKILL.mdevals/evals.jsonreferences/scripts/iteration-N/*pass_rate(with_skill) - pass_rate(baseline) >= +X(X 由业务定义)Phase 1(1-2 周):试点
draft -> eval -> viewer -> improve -> package 完整闭环Phase 2(3-6 周):工程化
Phase 3(持续):规模化
CLAUDECODE 环境变量(已内置于脚本中,但需理解原因)# 验证 Skill
python -m scripts.quick_validate <skill-path>
# 运行触发评估
python -m scripts.run_eval \
--eval-set <eval-set.json> \
--skill-path <skill-path>
# 完整优化循环
python -m scripts.run_loop \
--eval-set <eval-set.json> \
--skill-path <skill-path> \
--model <model-id> \
--max-iterations 5
# 聚合基准
python -m scripts.aggregate_benchmark \
<workspace>/iteration-N \
--skill-name <name>
# 启动审核查看器
python eval-viewer/generate_review.py \
<workspace>/iteration-N \
--skill-name "my-skill" \
--benchmark <workspace>/iteration-N/benchmark.json
# 启动审核查看器(静态模式,用于 Cowork/无 GUI 环境)
python eval-viewer/generate_review.py \
<workspace>/iteration-N \
--skill-name "my-skill" \
--static <output.html>
# 打包 Skill
python -m scripts.package_skill <skill-path>
| Skill | |
| SKILL.md | |
| Frontmatter | |
| Progressive Disclosure | |
| Eval | |
| Assertion/Expectation | |
| Benchmark | |
| Blind Comparison | |
| Trigger Rate | |
| Train/Test Split | |
| Blinded History | |
| Capability Uplift | |
| Encoded Preference |
scripts/utils.py 提供 parse_skill_md(skill_path) 函数,是整个脚本系统的共享 SKILL.md 解析器,返回 (name, description, content) 三元组。被 run_eval.py、run_loop.py、improve_description.py 共同依赖。
注意:
skill_path参数是 Skill 目录路径(如./my-skill/),不是 SKILL.md 文件路径。函数内部会自动拼接skill_path / "SKILL.md"读取。
文档维护说明:本文档基于 Claude 官方 skill-creator 源码(485 行 SKILL.md,2026-03-07 版本)和 Anthropic 官方博客分析。如官方 skill-creator 有重大更新,请相应更新本文档。关键验证点已标注函数名/章节名。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-03-22
读完Claude工程师600万浏览的复盘后,我觉得Skills的未来在于动态编排。
2026-03-22
Google 官方总结的 5 种 Agent Skill 设计模式
2026-03-21
火爆全网 9 天拿下 33.3K Stars:YC CEO 开源 15 个顶级 Skills,让你轻松打造顶级的软件工厂!
2026-03-21
好东西都是总结出来的,创造 Skill 的 Skill,元 Skill 方法论,全文2w字
2026-03-21
搞不懂Skills?看看Claude Code内部工程师们是怎么玩的
2026-03-21
OpenClaw 总不稳定?先写一个标准 Skill
2026-03-20
Anthropic关于构建Agent Skills的思考解读
2026-03-20
Skill开发黄金法则!谷歌放出5种智能体Skill设计模式
2026-03-10
2026-03-04
2026-03-04
2026-03-03
2026-03-05
2026-03-05
2026-03-03
2026-03-05
2026-03-02
2026-03-11