如何将Skills进阶提升到更高层次?
摘要:Skills、Tools、MCP 与 Subagents 完全指南 目录 核心概念 MCP(Model Context Protocol) Tools(工具) Skills(技能) Subagents(子代理) 协作流程 skill-cre
Skills、Tools、MCP 与 Subagents 完全指南
目录
核心概念
MCP(Model Context Protocol)
Tools(工具)
Skills(技能)
Subagents(子代理)
协作流程
skill-creator 深度解析
项目结构
核心文件详解
完整工作流程
三个专用子代理
实践:创建自定义技能
参考资源
核心概念
MCP
全称:Model Context Protocol(模型上下文协议)
定义:AI "插件化"的标准协议,定义统一的请求/响应格式,让 AI 能够链接各种按照此协议开发的接口(数据库、API、文件系统等)。
大白话:MCP 是 AI 和外部世界对话的"通用语言"——就像 USB 接口标准,任何设备插上就能用。
Tools
定义:可以调用的具体功能函数,就像工具箱里的锤子、螺丝刀。
特点:
有明确的名字和参数
执行一个具体动作(查数据、发消息、截图)
有输入和输出
示例:
feishu_doc read doc_token="xxx"
wecom_mcp call contact getContact '{}'
agent-browser click selector="#submit"
Skills
定义:能力模块,提供一组相关的 Tools 集合。
特点:
描述什么时候触发(trigger condition)
包含具体的操作指南(Markdown)
可以引用外部资源(scripts/、references/、assets/)
示例技能:
feishu-doc:读写飞书文档
agent-browser:浏览器自动化
skill-creator:创建和优化技能
Subagents
定义:主 AI 派出去的"小助手团队",独立干活,干完回来汇报。
为什么需要:
任务复杂,主 AI 一个人忙不过来
需要并行处理,加快速度
某些任务需要专门技能
关键点:
Subagent 是独立运行的 AI,有自己的思考能力
Subagent 也有自己的 Skills/Tools/MCP 能力(可以不同)
主 AI 只负责分派和汇总,不干涉具体执行
协作流程
用户任务
↓
主agent接收任务
↓
主agent分析:是否需要分派Subagents?
├─ 否 → 主agent直接使用自己的Skills/Tools/MCP完成
└─ 是 → spawn Subagent(s),分配子任务
↓
Subagent接收子任务
↓
Subagent规划执行步骤(思考需要哪些数据、工具)
↓
是否需要外部数据?
├─ 是 → 调用MCP工具获取
└─ 否 → 继续
↓
调用Skills中的Tools处理数据
↓
完成任务,返回结果给主agent
↓
主agent汇总所有Subagent结果
↓
主agent整合、格式化最终结果
↓
输出给用户
核心要点总结
概念
是什么
类比
Skills
能力模块(提供Tools集合)
手机App
Tools
具体可调用的函数
App里的按钮
MCP
通信协议(Tools底层)
通用语言/电话
Subagents
并行执行的小智能体
外包团队
主agent
协调者+最终整合者
项目经理
关键区别:
Skills 是静态能力包,Tools 是 Skills 里的具体动作
MCP 是某些 Tools 的底层通信方式
Subagents 是并行执行的任务分派单元
skill-creator 深度解析
项目结构
skill-creator/
├── SKILL.md # 技能主文档(33KB)
├── agents/ # 子代理指令集
│ ├── analyzer.md # 分析代理:分析基准测试结果
│ ├── comparator.md # 比较代理:盲测比较两个输出
│ └── grader.md # 评分代理:评估断言通过情况
├── references/
│ └── schemas.md # JSON 数据结构定义
├── scripts/ # 可执行脚本
│ ├── aggregate_benchmark.py # 聚合基准数据
│ └── generate_report.py # 生成HTML评估报告
└── assets/ # 静态资源(模板等)
核心文件详解
1. SKILL.md(灵魂文件)
作用:定义 skill-creator 这个技能的完整行为规范
结构:
---
name: skill-creator
description: Create new skills, modify and improve existing skills...
---
工作流程(Markdown 正文):
1. 捕获意图(问清楚技能要干吗)
2. 采访研究(了解边界、依赖、工具)
3. 编写 SKILL.md(按规范写)
4. 创建测试用例(evals.json)
5. 运行测试(并行spawn子代理)
6. 评估结果(评分+benchmark)
7. 改进技能(根据反馈修改)
8. 重复直到满意
9. 优化触发描述(可选)
关键概念:
概念
说明
渐进式披露
技能内容分层加载(元数据→SKILL.md正文→引用文件),避免一次性加载太多
无惊喜原则
技能不能包含恶意代码,必须与描述一致
迭代循环
draft → test → review → improve(闭环)
客观评估
用断言(assertions)和基准测试(benchmark)量化技能效果
2. agents/*.md(三个专用子代理)
这些文件是给子代理看的指令,当主技能 spawn 这些代理时,会把对应的 .md 内容发给他们作为"工作手册"。
(1) comparator.md(盲测比较员)
角色:像评委,给两个输出打分,但不知道哪个是哪个(盲测)
工作流程:
收到:输出A、输出B、任务描述
↓
理解任务要求(要产出什么?质量标准?)
↓
制定评分标准(内容分+结构分,每项1-5分)
↓
给A和B分别打分
↓
决定谁赢了(根据总分,次要看断言通过率)
↓
输出 JSON 结果(winner, reasoning, rubric)
输出示例:
{
"winner": "A",
"reasoning": "Output A provides a complete solution...",
"rubric": {
"A": {
"content_score": 4.7,
"structure_score": 4.3,
"overall_score": 9.0
},
"B": {
"overall_score": 5.4
}
}
}
(2) analyzer.md(赛后分析师)
角色:比赛完后,分析为什么赢家赢了,输家输了,给出改进建议
工作流程:
收到:winner/loser的技能路径、执行记录、比较结果
↓
读输家的技能 → 读赢家的技能 → 找差异
↓
读输家的执行记录 → 读赢家的执行记录 → 找行为差异
↓
总结:
• 赢家强在哪里?
• 输家弱在哪里?
↓
输出改进建议(priority + category + suggestion)
输出示例:
{
"winner_strengths": ["Clear step-by-step instructions", "Included validation script"],
"loser_weaknesses": ["Vague instruction", "No script for validation"],
"improvement_suggestions": [
{
"priority": "high",
"category": "instructions",
"suggestion": "Replace 'process appropriately' with explicit steps",
"expected_impact": "Would eliminate ambiguity"
}
]
}
(3) grader.md(断言评分员)
角色:检查输出是否满足预设的"断言"(expectations),并评估测试用例本身的质量
工作流程:
收到:断言列表、执行记录、输出文件路径
↓
读执行记录 + 检查输出文件
↓
对每条断言:
• 找证据(transcript 或输出文件里有没有?)
• 判断 PASS/FAIL(要有明确证据,不能是巧合)
↓
额外工作:
• 提取输出中的隐含声明(claims)并验证
• 读用户笔记(如果有)
• 评估断言质量(是否太松?是否遗漏重要检查?)
↓
输出 grading.json
评分标准:
PASS:有明确证据,且反映实质性完成
FAIL:无证据、有反证、或只是表面满足
burden of proof:默认 FAIL,除非证据确凿
输出示例:
{
"expectations": [
{"text": "The output includes the name", "passed": true, "evidence": "Found in transcript..."},
{"text": "The spreadsheet has SUM formula", "passed": false, "evidence": "No spreadsheet was created"}
],
"summary": {"passed": 1, "failed": 1, "pass_rate": 0.5},
"eval_feedback": {
"suggestions": ["Assertion too loose, consider adding content verification"]
}
}
3. references/schemas.md(数据格式字典)
作用:定义所有 JSON 文件的 schema,确保不同组件能互相理解
包含的结构:
文件名
用途
位置
evals.json
定义测试用例
evals/evals.json
grading.json
评分结果
<run-dir>/grading.json
metrics.json
执行指标
<run-dir>/outputs/metrics.json
timing.json
时间记录
<run-dir>/timing.json
benchmark.json
基准测试汇总
benchmarks/<timestamp>/benchmark.json
comparison.json
盲测比较结果
<grading-dir>/comparison-N.json
analysis.json
分析报告
<grading-dir>/analysis.json
history.json
迭代历史
工作区根目录
4. scripts/*.py(实用工具)
aggregate_benchmark.py
作用:把多个运行(with_skill、without_skill,每个3次重复)的数据聚合成统计摘要
输入:<workspace>/iteration-N/ 下的多个 grading.json
输出:benchmark.json + benchmark.md
关键计算:
# 对每个配置(with_skill, without_skill)计算:
mean = average(所有run的pass_rate)
stddev = 标准差(看波动大不大)
min/max = 最好/最差
# delta = with_skill 均值 - without_skill 均值
delta = {
"pass_rate": "+0.50", # 技能提升50%
"time_seconds": "+13.0", # 慢了13秒
"tokens": "+1700" # 多用1700 tokens
}
generate_report.py
作用:根据 run_loop.py(描述优化)的输出,生成可视化的HTML报告
输入:run_loop 的 JSON 输出
输出:HTML 文件,表格展示:
行:每个描述版本(iteration 1, 2, 3...)
列:每个测试查询
单元格:✅ 或 ❌(是否触发了技能)
功能:
区分 train(训练集)和 test(测试集)的触发率
自动刷新(可选)
显示 train/test 得分,防止过拟合
完整工作流程
场景:你要做一个"把PDF转Excel"的技能
第1步:想清楚技能要干吗
↓
第2步:写初版 SKILL.md(说清楚:遇到PDF转Excel就触发,用python写脚本)
↓
第3步:设计测试用例(evals.json)
- case1: "把这个销售PDF转成Excel"
- case2: "财报PDF,提取表格"
↓
第4步:并行运行测试
spawn 3个 with-skill 代理 + 3个 without-skill 代理
每个代理独立完成任务,保存输出
↓
第5步:评分
grader 代理检查:输出是不是Excel?数据对不对?
↓
第6步:聚合统计
aggregate_benchmark.py 算:
with-skill 平均通过率 85%,标准差 5%
without-skill 平均通过率 35%,标准差 8%
↓
第7步:看报告
generate_report.py 生成HTML,打开浏览器看:
- 哪些case过了?哪些挂了?
- 输出文件长什么样?
↓
第8步:改进技能
发现:技能里没说"遇到扫描件要用OCR"
修改 SKILL.md,加上OCR步骤
↓
第9步:重复4-8步,直到用户满意
↓
第10步:优化触发描述(可选)
run_loop.py 自动测试20个query,调整description
↓
第11步:打包成 .skill 文件给用户
三个专用子代理对比
代理
角色
输入
输出
用途
grader
断言评分员
断言 + transcript + outputs
grading.json
客观评分每条断言
comparator
盲测比较员
输出A + 输出B + 任务
comparison.json
A/B测试,决定哪个更好
analyzer
赛后分析师
winner/loser的skill + transcript
analysis.json
分析胜负原因,给出改进建议
实践:创建自定义技能
步骤1:使用 skill-creator
# 如果你在 Claude Code 中,直接说:
"我想创建一个技能,用来..."
# skill-creator 会引导你:
# 1. 捕获意图(问清楚用途、触发条件、输出格式)
# 2. 采访研究(边缘案例、依赖、示例)
# 3. 编写 SKILL.md
步骤2:设计测试用例
创建 evals/evals.json:
{
"skill_name": "my-skill",
"evals": [
{
"id": 1,
"prompt": "User's task prompt",
"expected_output": "Description of expected result",
"files": ["evals/files/sample1.pdf"],
"expectations": [
"The output includes X",
"The skill used script Y"
]
}
]
}
步骤3:运行评估
# skill-creator 会:
# 1. spawn with_skill ×3(并行)
# 2. spawn without_skill ×3(基线)
# 3. 保存结果到 workspace/iteration-1/
步骤4:查看报告
# 生成 HTML 报告
python -m scripts.generate_report <workspace>/iteration-1 \
--skill-name "my-skill" \
--benchmark <workspace>/iteration-1/benchmark.json
步骤5:迭代改进
根据 feedback.json 和 analysis.json 修改 SKILL.md,重复步骤3-4。
步骤6:描述优化(可选)
提升触发准确率:
python -m scripts.run_loop \
--eval-set trigger_evals.json \
--skill-path ./my-skill \
--model <current-model> \
--max-iterations 5
步骤7:打包
python -m scripts.package_skill ./my-skill
# 输出:my-skill.skill
参考资源
官方仓库
anthropics/skills:https://github.com/anthropics/skills
官方预设 Skills
技能
用途
链接
docx
Word 文档处理
查看
xlsx
Excel 表格处理
查看
pptx
PowerPoint 处理
查看
pdf
PDF 处理
查看
教程
🎥 B站视频:吴恩达《Agent Skills with Anthropic》教程中文版
📚 中文教程:Datawhale agent-skills
📚 英文教程:Deeplearning-ai Agent-skills
附录:技能 Anatomy
skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter (name, description required)
│ └── Markdown instructions
└── Bundled Resources (optional)
├── scripts/ - Executable code for deterministic/repetitive tasks
├── references/ - Docs loaded into context as needed
└── assets/ - Files used in output (templates, icons, fonts)
渐进式披露:
Metadata(name + description)— Always in context (~100 words)
SKILL.md body — In context whenever skill triggers (<500 lines ideal)
Bundled resources — As needed (unlimited, scripts can execute without loading)
