字节笔记本
2026年2月20日
写好 Agent Skills 的 7 个原则:基于 7308 条轨迹的研究
本文基于 SkillsBench 团队的研究成果,介绍写好 Agent Skills 的 7 个核心原则。该研究通过 84 个任务、7,308 条轨迹、7 种模型配置的测试,揭示了 Skills 效果差异巨大的原因。
一个反直觉的发现
Anthropic 提出 Agent Skills 概念后,社区迅速积累了成千上万的 Skills。但有个问题没人系统回答过:这些 Skills 真的有用吗?
SkillsBench 团队做了件扎实的事:他们策划了 84 个任务,覆盖 11 个领域,跑了 7,308 条轨迹,测试了 7 种模型配置。结果发现——
Skills 的效果差异巨大:
- 好的 Skills 能让成功率提升 +51.9%
- 差的 Skills 会让成功率下降 -39.3%
- 甚至,让模型自己写 Skills 是负效果
"Models cannot reliably author the procedural knowledge they benefit from consuming."
这意味着什么?写好 Skills 是一门手艺,不是把文档丢给 Agent 就行。
原则 1:人工编写 > 模型生成
数据说话:
| Skills 来源 | 平均效果 |
|---|---|
| 人工编写的 Skills | +16.2% |
| 模型自生成的 Skills | -1.3% |
让模型自己写 Skills?实验证明这是徒劳的。
为什么? 模型可以识别"需要领域知识",但生成的步骤往往:
- 太笼统("用 pandas 处理数据")
- 缺细节(没有具体 API 调用)
- 错重点(列出工具但不讲 workflow)
启示: Skills 需要人工提炼领域经验。不能指望 Agent 自己总结怎么做事。
原则 2:少即是多(数量)
数据:
| 每个任务的 Skills 数量 | 提升效果 |
|---|---|
| 1 个 | +17.8% |
| 2-3 个 | +18.6% ✅ |
| 4+ 个 | +5.9% ❌ |
反直觉: 给 Agent 更多 Skills,效果反而更差。
为什么? 认知过载。Agent 面临选择困难,或者把不相关的 Skill 硬套到当前任务。
启示: 每个任务配套 2-3 个 Skills 最优。SkillBank 检索时应该优先返回最相关的几个,而不是罗列所有可能相关的。
原则 3:详细 > 全面(长度)
数据:
| Skills 文档复杂度 | 效果 |
|---|---|
| Detailed(详细) | +18.8% |
| Compact(简洁) | +17.1% |
| Standard(标准) | +10.1% |
| Comprehensive(全面) | -2.9% ❌ |
又一个反直觉发现: 过长的文档反而有害。
"Comprehensive" 看上去美好——覆盖所有 edge cases、详尽解释原理。但实际上:
- 占用宝贵的 context budget
- Agent 难以从长篇中定位关键步骤
- 重要信息淹没在噪声里
启示: 控制 Skills 长度在 800-1500 tokens。聚焦核心步骤,细节可以放在代码示例里。
原则 4:程序性 > 陈述性
SkillsBench 明确定义了什么是 Skills:
| 类型 | 是 Skills 吗? | 为什么 |
|---|---|---|
| 系统 Prompt | ❌ | 缺乏结构化组件 |
| Few-shot 示例 | ❌ | 陈述性,不是程序性 |
| RAG 检索结果 | ❌ | 事实性,不是流程性 |
| 工具文档 | ❌ | 描述能力,不是指导使用 |
| 程序性指导 | ✅ | 描述"怎么做" |
关键区别:
- ❌ "Python 是编程语言"(是什么)
- ✅ "用 pandas 读取 CSV 的三步流程"(怎么做)
启示: Skills 必须包含可执行的步骤、代码示例、验证检查点。
原则 5:领域差异巨大
数据(Skills 提升效果按领域):
| 领域 | 提升效果 | 原因 |
|---|---|---|
| Healthcare | +51.9% | 专业流程知识模型缺乏 |
| Manufacturing | +41.9% | 特定领域 heuristics |
| Software Engineering | +4.5% | 模型已有足够预训练知识 |
| Mathematics | +6.0% | 逻辑推理而非流程 |
启示:
- 领域知识越专、模型预训练越少,Skills 价值越大
- 通用编程任务写 Skills 收益有限
- 医疗、制造、金融等垂直领域最需要投入 Skills
原则 6:模块化与组合
SkillsBench 的 Skills 设计强调:
- Task-class applicability:适用于一类任务,不是单一实例
- Portability:基于文件系统,易于编辑、版本、共享
- Composability:多个 Skills 可以组合使用
结构:
skills/
├── skill_name/
│ ├── SKILL.md # 程序性指导(必需)
│ ├── examples/ # 示例代码
│ ├── templates/ # 可复用模板
│ └── scripts/ # 可执行脚本启示: 设计 Skills 时考虑复用性。一个 Skill 解决一类问题,不是一次性的硬编码。
原则 7:验证与迭代
SkillsBench 的每个任务都有确定性验证器(deterministic verifier)。这不是用 LLM 评判,而是程序化断言:
# 示例:验证输出格式是否正确
def test_output_format():
result = run_agent_with_skill(task, skill)
assert result["status"] == "success"
assert "expected_field" in result["data"]
assert len(result["data"]["items"]) > 0启示:
- 写 Skill 时必须配套验证方法
- 在测试任务上跑通再投入使用
- 成功率低于 70% 的 Skill 需要重写
模板实战:SKILL.md
基于以上 7 个原则,以下是推荐模板:
---
name: "skill_name"
description: "一句话描述这个技能解决什么问题(控制在 20 字内)"
tags: ["domain", "task_type"]
---
## 适用场景
- **什么时候用**:触发条件(2-3 个 bullet)
- **输入**:格式要求
- **输出**:期望结果
- **前提条件**:依赖/环境
## 核心步骤(3-5 步)
1. **第一步名称**
```python
# 可执行的代码- 关键参数说明
- 常见错误
-
第二步名称
python# 可执行的代码 -
第三步名称
python# 可执行的代码
完整示例
# 从头到尾可运行的完整示例验证清单
- 检查点 1:具体可验证的标准
- 检查点 2:具体可验证的标准
- 检查点 3:具体可验证的标准
相关 Skills
related_skill_1:什么时候用这个related_skill_2:什么时候用这个
## 避坑清单
| ❌ 错误做法 | ✅ 正确做法 |
|-----------|-----------|
| 百科全书式文档 | "完成 X 任务最常用的 3 个 API" |
| 硬编码任务细节 | "处理 CSV 格式的用户数据" |
| 纯文本无代码 | 提供可复制的代码片段 |
| 过度工程 | 聚焦 80% 场景的核心路径 |
| 让模型自己写 | 人工提炼 + 验证 + 迭代 |
## 结语
SkillsBench 的核心启示:**Skills 的有效性不是必然的,而是设计出来的。**
同样一个 Agent,同样的模型:
- 好的 Skills 能让成功率提升 50%+
- 差的 Skills 会让成功率下降 40%+
差距来自 7 个简单的原则:
1. 人工编写,不要模型生成
2. 2-3 个 Skills 最优
3. 详细但不过长(800-1500 tokens)
4. 程序性指导,不是陈述性描述
5. 垂直领域收益最大
6. 模块化设计便于复用
7. 配套验证方法
> "The gap between effective and ineffective Skills is not model capability—it's empirical engineering at the skill boundary."
这或许是 Agent 时代的一门新手艺:**不是写代码,而是写"怎么做"**。
## 参考
- **论文**:SkillsBench: Benchmarking How Well Agent Skills Work Across Diverse Tasks
- **作者**:Xiangyi Li et al