Skip to content

增加端到端评估 #18

Description

@littlePunk

基于实战实践的改进建议:测试用例生成、dim8 评估与优化优先级

概述

使用 darwin-skill v2.0 对一个生产环境 skill(osau-apply,OSAU 版本发布申请表单自动化填写 skill)完成了一轮完整优化,从 62.9 → 85.3(+22.4 分),共 5 轮(R1-R5)。但优化过程中暴露了 darwin-skill 方法论的三个可改进点:R1-R4 全部优化结构维度,dim8(权重 23%,最高)纹丝不动,直到用户质疑"实测表现真的提升了吗"才触发端到端测试,发现 5 个问答型测试无法暴露的真实操作缺口。

本文提出三条改进建议,附完整实践数据作为证据。


背景:发生了什么

osau-apply skill(417 行,指导 agent 在 10 分钟内完成 OSAU 系统表单填写)进行完整优化,过程如下:

轮次 优化维度 分数变化 评估方式
R1 dim9 反例黑名单 +7.7 问答型(Judge C)
R2 dim4 检查点标记 +3.6 问答型(Judge D)
R3 dim3 失败模式三段式 +2.2 问答型(Judge E)
R4 dim5/dim8 参数文档化 +4.4 问答型(Judge G)
R5 dim8 端到端修复 +4.5 端到端实测(Judge H)

核心问题:R1-R4 全部优化结构维度,dim8(权重 23%,最高)在问答型评估下看似从 5.0 提升到 8.5,但实际上这是"文档检索准确度"的分数,不是"真实操作能力"的分数。用户一句质疑触发了端到端测试(用真实 WPS 数据填写真实 OSAU 表单),暴露了 5 个文档未覆盖的操作缺口:

  1. 数量单位转换规则缺失(WPS 写"5w",OSAU 需填 5000)
  2. 发布机型范围字段是系统自动显示,非 input/textarea(未说明)
  3. 梯度/全量行有"商店上架"列,索引表中缺失
  4. 发布来源 checkbox 必须在填 textarea 前勾选(未文档化)
  5. 梯度/全量阶段商店上架应填"不上架商店"(未说明)

R5 修复这 5 个问题后,dim8 端到端实测评分达 9.5。


建议一:test-prompts.json 应支持执行型测试,而非纯问答型

现状

Phase 0.5 通过读取 SKILL.md 内容,从文档反推问题生成测试用例:

{
  "prompt": "读取 SKILL.md,回答:发版背景的 textarea 索引是多少?",
  "expect": "textarea[0]"
}

这是文档检索准确度测试,不是能力测试。验证的是"agent 能不能在文档里找到答案",而非"agent 能不能真正完成任务"。

问题

问答型测试与文档内容同源——等于"用文档出题考文档"。这会造成假阳性:skill 在 dim8 得分不错,但真实执行时暴露文档从未覆盖的缺口。

本次实践中,问答型 dim8 = 8.5/10,但端到端实测在 R5 修复前仅约 7.5/10(3 个未文档化的操作导致真实失败),差距 1.0 分完全不可见。

改进建议

在 test-prompts.json 中新增可选的 execution_prompts 字段:

[
  {
    "id": "E1-execution",
    "category": "execution",
    "prompt": "用这个 skill 根据提供的 WPS 数据填写 OSAU 表单并保存草稿",
    "input_data": "path/to/test_data.json",
    "success_criteria": "15/15 字段匹配期望值;草稿保存成功"
  },
  {
    "id": "T1-structure",
    "category": "structure",
    "prompt": "读取 SKILL.md,回答:发版背景的 textarea 索引是多少?",
    "expect": "textarea[0]"
  }
]

Phase 1/Phase 2 同时运行问答型 prompt(快速、低成本)和执行型 prompt(慢、需真实环境)来评估 dim8。若执行型不可行(无测试环境),回退为纯问答型并标注 dry_run——但 rubric 应明确标注置信度较低。


建议二:dim8 拆分为 dim8a(问答型)和 dim8b(端到端)

现状

dim8(权重 23)是单一维度,通过运行 test prompts 评分,不区分问答型验证和端到端执行验证。

问题

问答型和端到端测量的是根本不同的东西:

对比项 问答型 dim8 端到端 dim8
测试什么 文档检索准确度 真实任务完成能力
能否发现未文档化的缺口? ❌ 不能 ✅ 能
成本 低(文本输入输出) 高(浏览器/API/真实环境)
假阳性风险

本次实践中:问答型 dim8 = 8.5,端到端 dim8 = 9.5(R5 修复后)。R5 修复前端到端约 7.5——这 1.0 分的差距在纯问答型评估中完全不可见。

改进建议

将 dim8 拆分为:

  • dim8a — 文档验证(权重 10):问答型,快速,用于每轮迭代
  • dim8b — 执行验证(权重 13):端到端,仅用于基线评估和最终验收

这与 SkillOpt 的 validation-gated 设计一致:迭代用廉价验证,门禁决策用昂贵验证。Phase 2 各轮可仅用 dim8a;Phase 1 基线和 Phase 3 最终报告必须包含 dim8b。

若 dim8b 不可行(无测试环境),其权重并入 dim8a 并施加 dry_run 置信度惩罚(即当前行为)。


建议三:Phase 2 优化优先级应考虑维度权重,而非仅看原始分数

现状

Phase 2 按原始分数升序排序,优先优化最弱维度:

找出得分最低的维度(结构或效果都算)

问题

这忽略了维度权重。本次实践中:

维度 权重 基线分 加权短板(weight × (10 - score) / 10)
dim9 6 1.2 5.3
dim4 6 3.0 4.2
dim3 12 7.2 3.4
dim8 23 5.0 11.5 ← 最大加权短板

dim9 原始分最低(1.2),所以 R1 先优化了它。但 dim8 的加权短板最大(11.5)。我们把 R1-R3 花在低权重维度上(dim9+dim4+dim3 合计权重 24),而 dim8(单独权重 23)纹丝不动。

这是反例黑名单第 8 条("忽视维度相关性单独优化")的权重变体:优先优化低权重维度会制造进步的幻觉,而影响最大的维度始终未被触及。

改进建议

将 Phase 2 诊断从"最低原始分"改为"最大加权短板":

# 现状
找出得分最低的维度

# 建议
找出加权短板最大的维度:weight × (10 - score)

这确保对总分影响最大的维度优先优化。当加权短板相近(差距 ≤ 1.0)时,回退为原始分排序。


证据数据

完整 results.tsv 优化记录:

时间 commit 旧分 新分 状态 维度 评估方式
2026-06-24T17:44 96c9a52 - 62.9 baseline - full_test
2026-06-24T17:55 f20a176 62.9 70.6 keep dim9 反例黑名单 full_test
2026-06-24T18:02 82ba5ba 70.6 74.2 keep dim4 检查点标记 full_test
2026-06-24T18:10 190cfb4 74.2 76.4 keep dim3 失败模式三段式 full_test
2026-06-24T18:22 4fcd820 76.4 80.8 keep dim5/dim8 参数文档化 full_test
2026-06-24T19:15 c0dfe69 80.8 85.3 keep dim8 端到端修复 e2e_test

关键观察:R1-R4 使用 full_test(问答型),R5 使用 e2e_test(端到端)。eval_mode 的区分是手动添加的——如果将其形式化到 rubric 中,这种差异将默认可见。

总结

三条建议的核心逻辑:

  1. 测试用例:从"考文档"升级为"考能力",增加执行型测试
  2. dim8 评估:拆分问答型与端到端,迭代用快验证,门禁用真验证
  3. 优化排序:从"最弱维度优先"改为"最大加权短板优先",避免低权重维度制造进步幻觉

三条建议的共同目标:让 darwin-skill 的分数更接近真实质量,减少假阳性。 本次实践中,如果没有用户的人工质疑,系统会在 R3 触顶后进入 Phase 3 收尾,dim8 的真实问题永远不会暴露——这正是人在回路的价值,但也说明自动化评估本身有改进空间。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions