SKILL-DEVELOPMENT · METHOD

Skill 评估与迭代

  • updated 2026-06-17
  • primary sources
  • bundle: ai-builder-handbook
  • weight 8

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 与实际输出对比,记录 PASSFAIL 并附具体证据。

分级原则

  • 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

反向链接

加入知识星球

微信扫描下方二维码,或复制链接到桌面浏览器打开。

知识星球二维码 https://t.zsxq.com/PLACEHOLDER

搜索