一个 Skill 能完成任务,不代表它带来了增量价值。

模型本来就可能直接生成一份看起来不错的测试方案。如果只运行使用 Skill 的版本,然后看到结果完整,就容易把“模型本来就能做到”误写成“Skill 让结果更好”。基准测试要把这两个问题分开:模型本来会做,还是 Skill 让它做得更好。

评测通过不等于带来增量价值

评测主要回答:这个用例的行为是否符合预期。基准测试进一步追问:在任务、模型、智能体和运行环境都相同的情况下,不使用 Skill 与使用 Skill 的结果有什么差异?

相同的任务
相同的模型
相同的智能体
相同的运行环境

不使用 Skill
对比
使用 Skill

如果同时更换模型、提示词、工具和上下文,最后的差异就很难归因于 Skill。结果也许更好,也许只是换了一个更强的模型。

用 functional-testing 举例说明基线

任务:为电商结账和优惠券流程设计功能测试。

不使用 Skill 时,输出可能已经覆盖正常支付和一个无效优惠券场景。使用 Skill 后,可能会额外识别角色权限、数据条件、边界规则、集成点,以及输入中没有定义的支付失败路径。

这里要比较的不是字数,而是关键行为覆盖:

指标要看什么
任务成功是否完成了任务目标
关键行为覆盖是否覆盖关键业务和风险行为
问题发现召回率已知问题或缺口被识别了多少
无依据声明率是否补造了事实、字段或根因
完整性重要输入、场景和限制是否被保留
令牌数 / 延迟 / 工具调用质量提升增加了多少成本

一个更长的输出不一定更有价值;如果新增内容全是没有证据的细节,可能反而是异常增量。

基准测试用例的基本结构

id: functional-testing-benchmark-001
skill: functional-testing
type: benchmark
variants:
  - without_skill
  - with_skill
controls:
  same_task: true
  same_model: true
  same_agent: true
  same_environment: true
metrics:
  - task_success
  - critical_coverage
  - unsupported_claims
  - tokens
  - latency

这个结构不要求所有指标都必须量化,但需要说清比较条件和指标定义。否则团队只能凭印象比较两份结果。

留意 Skill 带来的负面影响

Skill 也可能让结果变差:输出更长、令牌消耗更多、响应更慢,还可能让模型过度分析或编造规则。

因此,基准测试不能只展示 Skill 表现更好的用例。至少要记录:

  • 质量提升;
  • 成本增加;
  • 没有明显变化;
  • 质量下降或成本不值得。

可以用下面的概念公式表示 Skill 带来的增益:

Skill 增益 = 结果(使用 Skill)- 结果(不使用 Skill)

但不要急着把所有维度压成一个分数。质量、成本、稳定性和覆盖之间往往存在真实取舍。

基线也需要设计

糟糕的基线会让 Skill 看起来格外有效。基线至少要说明:

  1. 由谁或哪个系统执行;
  2. 使用什么提示词或默认上下文;
  3. 是否允许使用参考资料和工具;
  4. 输入和输出格式是什么;
  5. 评估者如何判断成功;
  6. 是否执行多次以及如何处理波动。

如果基线只让模型自由回答,使用 Skill 的版本却拿到了完整的项目材料,这样的比较就没有控制好条件。

多次运行与结果解读

大语言模型的输出并不固定。重要的基准测试可以记录:

样本数 n
通过率
pass@k
均值 / 中位数
方差
置信区间

样本不足时不要写出过度精确的结论。三次运行能帮助发现明显不稳定,但不能支撑复杂统计声明。

基准测试、回归测试与质量声明

这三者经常被混为一谈:

工作比较对象能回答的问题
基准测试不使用 Skill / 使用 SkillSkill 是否带来增益
回归测试旧版本 / 当前版本变更是否破坏了原有行为
质量声明证据集 / 声明当前证据能支持哪些说法

基准测试通过,不代表新版本没有回归;回归测试通过,也不代表 Skill 比基线更有效。

把结果写进质量画像

一份有用的报告不能只写“基准测试通过”,还要说明:

Skill: functional-testing
基准测试状态:PARTIAL
证据级别:E3 运行时
对照条件:相同任务、模型、智能体和运行环境
观察结果:部分用例的关键行为覆盖有所提升
成本:观察到令牌消耗和延迟增加
限制:样本量较小;未进行跨智能体比较
下一步:扩展代表性用例后再作广泛结论

这类结果可能很有价值,但仍不能据此声称“所有任务都会变好”。

一次基准测试结果能支持什么

只有在关键变量保持稳定时,基准测试结果才能支持相应的声明。比较不使用 Skill 和使用 Skill 时,尽量保持任务、模型、运行环境和评估规则一致。如果两组条件中有一组更换了提示词、增加了上下文,或使用了更宽松的评判器,结果描述的就是实验条件的整体差异,不能单独归因于 Skill。

问题要问得更具体。例如,使用 Skill 时发现了更多关键风险,但消耗的令牌也更多。这可以支持“在当前条件下提高了风险覆盖”的结论,却不能证明成本更低、响应更快或整体表现更好。应分别记录各项指标,再通过质量画像呈现这些取舍。

基线发生变化时也要单独记录。如果基线提示词、任务集或评估者发生变化,旧结果可能就不能直接比较。应把基线版本和结果放在一起;在解释明显的提升或回归之前,先用一组固定的锚点用例重新评测。

安装与调用

npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/en --skill functional-testing

调用时明确要做对照实验:

请使用 functional-testing Skill,针对同一份结账需求设计一组基准测试。
分别说明不使用 Skill 和使用 Skill 时的运行条件。
评估指标:关键风险覆盖、无依据声明、任务成功、令牌数和延迟。
不要更换模型、运行环境或任务后,再把结果差异归因于 Skill。

两个实际问题

如果不使用 Skill 已经达到 100% 覆盖,Skill 还有价值吗?

可能没有,也可能是评测太简单。需要检查是否遗漏了高风险行为、指标是否只检查格式,以及 Skill 是否在效率、可维护性或一致性方面带来其他价值。

基准测试结果不好,应该立刻修改 Skill 吗?

先区分 Skill 本身的问题、评测设计的问题、基础设施问题和原因未知的情况。如果把不公平的基线当成 Skill 问题,后续优化就会跑偏。

参考

分享