SKILL-DEVELOPMENT · METHOD
Skill 评估与迭代
Skill 评估与迭代:Eval 驱动的品质改进
Overview
如何通过结构化评估(eval)系统化测试和改进 Skill 的输出质量。涵盖从设计测试用例、运行 eval、编写 assertion、分级输出、聚合结果、人工审查到迭代优化的完整循环。
为什么重要
Skill 写完之后凭”看起来 OK”就上线,等于把品质问题留给真实用户去暴露。Eval 是把 Skill 输出从”黑盒看心情”变为”可量化、可回归、可持续改进”的关键手段。没 eval 的 Skill 是一次性玩具;有 eval 的 Skill 才能进入持续迭代的工程闭环。
为什么重要
Skill 写完之后凭”看起来 OK”就上线,等于把品质问题留给真实用户去暴露。Eval 是把 Skill 输出从”黑盒看心情”变为”可量化、可回归、可持续改进”的关键手段。没 eval 的 Skill 是一次性玩具;有 eval 的 Skill 才能进入持续迭代的工程闭环。
Eval 驱动迭代的核心价值
写了 Skill,用一个 prompt 试了,看起来能工作——但这不意味着可靠。Eval 回答三个问题:
- 在多样化的 prompt 下是否可靠?
- 在边界情况下是否稳定?
- 比没有 Skill 时是否真的更好?
设计测试用例
每个测试用例三个要素:
| 要素 | 说明 | 示例 |
|---|---|---|
| Prompt | 真实用户消息 | ”I have a CSV of monthly sales data…” |
| Expected output | 人类可读的成功描述 | ”A bar chart with top 3 months, labeled axes” |
| Input files (可选) | Skill 需要的文件 | evals/files/sales_2025.csv |
测试用例存储在 evals/evals.json 中。
编写建议:
- 从 2-3 个开始,不要过度投入
- 变化措辞(正式/随意)、详细程度、单步/多步
- 覆盖边界情况(格式错误、模糊指令)
- 使用真实上下文(文件路径、列名)
运行 Eval
核心模式:每个测试用例运行两次——带 Skill 和不带 Skill(或旧版本)以获取基线。
工作区结构
skill-name/
├── SKILL.md
└── evals/
└── evals.json
skill-name-workspace/
└── iteration-1/
├── eval-case-1/
│ ├── with_skill/
│ │ ├── outputs/ # 输出文件
│ │ ├── timing.json # Token + 耗时
│ │ └── grading.json # Assertion 结果
│ └── without_skill/
│ └── ...
└── benchmark.json # 聚合统计
关键原则:每次运行从干净上下文开始,确保 Agent 仅遵循 SKILL.md。
Timing 数据
记录 token 数和耗时,用于评估 Skill 的成本收益比:
{ "total_tokens": 84852, "duration_ms": 23332 }
编写 Assertion
Assertion 是关于输出的可验证声明。先跑一轮再看输出,才知道”好”长什么样。
| 好 Assertion | 弱 Assertion |
|---|---|
| ”The output file is valid JSON" | "The output is good" |
| "The bar chart has labeled axes" | "The output uses exactly ‘Total Revenue: $X’" |
| "The report includes at least 3 recommendations” | — |
分级输出
将每条 Assertion 与实际输出对比,记录 PASS 或 FAIL 并附具体证据。
分级原则
- PASS 需要具体证据,不让渡怀疑余地
- 审视 Assertion 本身:过易(总是通过)、过难(总是失败)、或不可验证的 → 修复
- 比较版本时用盲比:LLM 裁判不知哪个是哪个,消除偏见
分级结果示例
{
"assertion_results": [
{ "text": "The output includes a bar chart image file", "passed": true,
"evidence": "Found chart.png (45KB) in outputs directory" },
{ "text": "Both axes are labeled", "passed": false,
"evidence": "Y-axis labeled but X-axis has no label" }
],
"summary": { "passed": 3, "failed": 1, "total": 4, "pass_rate": 0.75 }
}
聚合与模式分析
计算 with_skill vs without_skill 的 pass_rate、time、tokens 对比,得出 delta。
分析清单:
- 移除两组都通过的 Assertion(无区分力)
- 调查两组都失败的 Assertion(需修复)
- 研究带 Skill 通过但不带失败的部分(核心价值点)
- 结果不一致 → 指令可能模糊,加示例/更具体指导
- 检查时间/token 异常值 → 阅读 execution transcript
人工审查
Assertion 分级查的是你想到的事。人工审查者查的是你没想到的事。
模板:
{
"eval-1": "The chart is missing axis labels...",
"eval-2": "" // 空 = 通过
}
“图表缺少轴标签”是可操作的;“看起来不好”则不是。
迭代循环
三个信号来源:失败的 Assertion(具体缺陷)、人工反馈(品质问题)、执行转录(为什么出错)。
改进策略:
- 从反馈中泛化,不针对特定示例加窄补丁
- 保持精简——少而精的指令优于详尽规则
- 解释为什么——理解了目的的模型更可靠
- 打包重复工作——重复出现的脚本 →
scripts/目录
循环步骤:分析信号 → 改进 SKILL.md → 新 iteration → 分级 → 人工审查 → 重复,直到满意或不再改善。
See Also
- Skill 开发综合指南 — Skill 完整开发框架
- 优化 Skill Description — 提升 Skill 触发准确率
- 高质量 Skill 方法论 — 5 步写出专家品质 Skill
反向链接
- Agent Skills 开放规范 See Also
- 高质量 Skill 方法论 See Also
- 优化 Skill Description See Also
- Skill 开发综合指南 See Also