Skill 有效性与稳定性评估:用对照、重复与证据判断价值

Skill 有效性与稳定性评估:用对照、重复与证据判断价值

github.com/ludayuan/Lu... 鲁大猿的知识库

适用范围:具有目标 Skill、可重复任务与可观察执行结果的 Agent 评测。A/B/C 是一种实验设计,不是所有宿主必须实现的协议。本文数字全部是人为设定的教学数据,不是某个 Skill 的真实成绩。

核心问题: 用了 Skill,任务成功率达到 85%,能否说明它真的有帮助?

答案: 先把任务目标变成可检查的成功条件,在可比环境中测量有无目标 Skill 的差异,再检查触发、多次运行、条件变化和成本;每个结论都要能回到具体任务及运行证据。

阅读准备: Skill 是给 Agent 使用的方法与资源包;Agent 是决定并执行操作的运行主体;评测运行是一次受控尝试。动手复算只需 Python 3 标准库,不连接模型或工具服务。

1. 85% 的成绩,还缺什么信息

设想团队已经整理好一个目标 Skill,要决定是否让它参与日常任务。任务集包含明确输入、需要完成的操作,以及可检查的结果要求。一次运行结束后,只记录"成功"还不够:可能是模型本来就会做,也可能是 Skill 帮上了忙,还可能只是这次运气好。

贯穿本文的实验使用相同的 100 个适用任务,每个任务都保留唯一编号。A 条件移除目标 Skill,C 条件提供目标 Skill 但不点名。教学数据中,A 成功 70 个、C 成功 85 个。我们的目标是解释这 15 个百分点代表什么、没有代表什么。

成功不能只由"生成了文件"决定。每道题在运行前就要写清楚任务预期:资料齐全时可能要求交付正确产物;缺少必要信息时可能要求澄清;遇到不可执行条件时可能要求停止。澄清或停止是否成功,由该任务事先定义的目标决定。

学完后,应能从一份评测记录中区分:结果质量、Skill 触发、重复稳定性、条件扰动下的鲁棒性,以及获得这些结果的成本。

2. 从目标推导最少需要的评测机制

目标是判断"加入这个方法包后,任务完成情况是否值得改善"。围绕这个目标,有四个不可省略的问题。

缺少什么 为什么不能下结论 最少增加什么
成功定义 好看、流畅、生成文件都未必完成用户目标 可检查的关键条件与异常预期
可比基线 无法区分原有能力与新方法的帮助 相同任务和环境下移除目标 Skill 的对照
逐次记录 平均分会掩盖退步,也看不见波动 任务编号、每次结果、实际执行轨迹
成本与边界 更高成功率可能换来不可接受的等待 耗时、资源、返工和可接受范围

评测不要求先建立复杂平台。只要能够固定条件、保留证据并重复运行,就可以从一份任务清单和运行记录开始。平台能帮助自动化,却不能替代正确的成功标准。

这里的有效性 指在明确目标与条件下观察到的收益;稳定性 关注同一输入多次运行是否持续达到要求;鲁棒性关注说法、信息顺序或工具条件变化后,是否仍符合相应预期。三者相关,但不能用一个总分互相代替。

3. 从 70 到 85:先算增益,再找谁受益、谁退步

3.1 配对比较,而不是只看两根柱子

100 个任务在 A 和 C 中各运行一次,同一编号始终表示同一道题。设定的逐题结果如下。

A 结果 C 结果 任务数 含义
成功 成功 65 两组都满足要求
成功 失败 5 加入自然选择条件后退步
失败 成功 20 加入自然选择条件后改善
失败 失败 10 两组仍未满足要求
合计 100 同一组适用任务

于是 A 的成功数是 65 + 5 = 70,C 的成功数是 65 + 20 = 85。

  • A 成功率:70 / 100 = 70%。
  • C 成功率:85 / 100 = 85%。
  • 成功率差:85% − 70% = 15 个百分点。
  • 净增成功任务:20 个改善 − 5 个退步 = 15 个。

"成功率提高 15 个百分点"与"相对提高 15%"不同。前者是两个比例直接相减;后者还要除以基线。本例不需要相对比例就能清楚表达增益。

3.2 总分上涨为何仍要检查退步

假设退步的 5 道题都属于不可接受的关键任务,总分上升未必满足采用要求。评测应保留它们的任务类型、关键失败项和执行轨迹,再判断是否触及事先设定的质量底线。

这组数字也没有证明稳定提升:每道题每组只有一次记录。要判断收益能否重复,仍需进一步的受控重复与更广的任务覆盖。

3.3 单次任务通过与检查项通过不同

一次任务有 10 项检查,9 项通过、1 个关键项失败,检查项通过率是 90%,但任务可以仍然不通过。任务级成功应由事先规定的关键条件决定,不能通过增加容易检查的项目把关键失败平均掉。

4. 三组对照怎样把问题拆开

css 复制代码
适用任务
适用任务
适用与不适用任务分开
适用任务结果
选择或加载证据
同一任务资料与评分标准
固定模型 工具 权限 允许预算
A 移除目标 Skill
B 提供 Skill 并明确点名
C 提供 Skill 不点名
A 运行产物与轨迹
B 运行产物与轨迹
C 运行产物与轨迹
统一评分并按任务编号配对
B 对 A 明确使用条件收益
C 对 A 自然使用收益
C 组另查应触发与不应触发

图 4-1|结果对照与触发检查的分工。 实线表示任务、结果和记录的流向;虚线表示共同约束。A/B/C 的增益比较在匹配的适用任务上进行,C 另接受不适用请求来检查误触发。图不表示提供资源就必然加载。

条件或环节 回答的问题 不能直接证明什么
A:移除目标 Skill 原有能力表现怎样 所有其他 Skill、提示和工具都已被移除
B:提供并点名 明确要求使用时是否有帮助 实际一定加载;某条指令单独有效
C:提供但不点名 自然任务请求能否获得收益 每次成功都由 Skill 造成
统一评分 相同产物要求下是否通过 裁判永远正确
执行记录 实际选择、读取、调用了什么 单凭轨迹就确定唯一根因

三组从干净、可比的状态开始。会话、工作文件或缓存都可能影响后续运行;是否真正隔离,要根据实际运行环境检查,不能把"打开新会话"当作完全隔离的保证。

若 B 改善而 C 没改善,可以把发现与选择环节列入排查清单。它只是一个假设:B 与 C 的请求条件并不完全相同,分差也可能受随机性和其他过程影响。B 对 A 的差异还包含点名提示与整个方法包,不能直接归因于其中一条指令。

5. 一次评测怎样从目标走到证据

复制代码
规则可准确检查
需要语义理解
记录缺失
重要判断或分歧
附未知数量与范围
定义任务输入 关键条件 异常预期
按原始任务族划分开发题与保留题
冻结版本与运行配置
从可比状态执行指定组别
保存产物 日志 耗时与异常
哪些条件可以确定判定
程序执行确定性检查
模型辅助语义判断
必要时人工校准或复核
缺证据字段记为未知
汇总逐题结果并比较
失败轨迹提出修订假设
保留版本 修改后回归并检验新题

图 5-1|一个评测周期的证据链。 程序、模型与人工承担不同检查职责,分支可以组合;流程没有假定模型判分必然可靠。新一轮运行应重新登记版本与条件。

对同一道题,先检查产物是否满足关键要求,再结合轨迹区分"未选中""资料未读到""工具调用失败""方法可能有问题"等排查方向。若记录缺失,就不能补想象中的执行过程。

两个版本使用模型或人工进行比较时,可以隐藏版本身份、交换呈现顺序复评。如果换序就换结论,应保留冲突并复核;盲评和换序不是消除全部偏差的保证。每个得分应指向具体产物、规则或证据片段。

6. 指标的分子、分母与未知值

6.1 最小记录应保留什么

以下是教学记录模型,不是某个产品的固定接口或数据库设计。

字段 类型或单位 用途与约束
task_id / task_family_id 标识 配对同题;把同源改写放在同一组
group / revision A、B、C 与版本标识 区分运行条件与被测版本
run_id / repeat_index 标识或序号 保留每次运行,不覆盖失败尝试
expected_behavior 任务合同 交付、澄清、停止等预期以及关键条件
task_result 通过、失败、未知 依据证据判定;未知单列,不补猜测
trigger_state 已触发、未触发、未知 按宿主可观察的选择或加载记录定义
evidence 产物及轨迹定位 支撑结果和诊断,而非仅保存总分
elapsed_seconds / timed_out 秒与布尔值 超时单列;超时上限不是完成时间
resource_cost Token、工具次数等 失败消耗也应纳入相应统计

6.2 运行成功率与按题平均

记录完整且成功标准一致时:

\\text{运行成功率}=\\frac{\\text{成功运行次数}}{\\text{总运行次数}}

令第 (i) 题运行 (n_i) 次,其中成功 (s_i) 次,共 (N) 道有完整记录的题:

\\text{按题平均成功率}=\\frac{1}{N}\\sum_{i=1}\^{N}\\frac{s_i}{n_i}

前者每次运行等权,后者每道题等权。各题重复次数相等且记录完整时,两者相同;重复次数不同时,前者可能被运行很多次的简单题主导。比较版本必须使用相同口径。

再看一个独立教学小例:题1运行8次、成功6次,题2运行2次、成功0次。合并运行的比例为6/10=60%;两题分别为75%与0%,按题等权平均为(75%+0%)/2=37.5%。前者让题1占80%的权重,后者让两题各占50%。结果没有改变,改变的是要回答的问题以及相应权重。

若结果缺失或无法判定,不应把未知偷偷当作失败、成功,或无说明地从分母删除。应报告计划与实际运行数、通过数、失败数、未知数;只展示可判定子集的比例时,明确它的分母与覆盖率。分母为零时记 N/A。

6.3 触发与成功分开计算

C 组的适用性标签应先于执行结果确定。

  • 应使用请求中的实际触发比例:观察漏用,分母是应使用的请求。
  • 不应使用请求中的误触发比例:观察乱用,分母是不应使用的请求。

两组请求集合和分母不同,不能混成一个"调用率"。没有可观察的选择或加载证据时,记录 unknown 并报告数量。如果只计算已知记录中的触发比例,必须标明"可观察子集";它不能冒充整个请求集合的精确触发率。

触发状态与任务结果是两列独立信息:未触发也可能完成任务,已触发也可能失败。安装成功、提供目录、明确点名,都不能替代实际选择或加载的证据。

6.4 同一矩阵,三个不同问题

独立的稳定性教学示例:20 道题,各运行 5 次;前 10 题 5 次全通过,后 10 题各有 1 次失败。它不是前面的 100 题 A/C 对照,也不证明 Skill 提高了稳定性。

统计单位 计算 结果 回答的问题
运行 (10×5 + 10×4) / 100 90% 所有尝试中多少次通过
任务,至少一次通过 20 / 20 100% 这些题是否曾经做成
任务,五次全部通过 10 / 20 50% 这些题是否每次都通过

同一份记录同时得到 90%、100%、50%,并不矛盾,因为统计单位与要求不同。比较稳定性时必须保持重复次数与重试预算一致,不挑最好的一次。不要由 90% 的平均成功率直接计算五次全部通过的概率:这份有限记录没有建立那种概率模型。

7. 用可执行例子检查计算

完整示例见 examples/metrics.py。它在文件内部重建全部教学数据,只使用 Python 标准库,不依赖外部数据、网络、Agent 或凭据。

在包含本文和 examples/ 的目录执行:

bash 复制代码
python3 examples/metrics.py

输出为 JSON。下列结果应同时成立,程序内有断言核验:

输出字段 应得值
paired_comparison.A_success 70
paired_comparison.C_success 85
paired_comparison.gained_tasks / lost_tasks 20 / 5
paired_comparison.delta_percentage_points 15.0
separate_stability_example.run_success_rate 0.9
separate_stability_example.any_pass_task_rate 1.0
separate_stability_example.all_pass_task_rate 0.5
cost.time_relative_increase 0.5

脚本另设一个与上述实验无关的未知值处理检查:[True, False, None] 表示已触发、未触发、未知各一条。可观察子集的触发比例为 1/2,观测覆盖率为 2/3,整个集合的精确触发率输出 null,因为第三条没有证据。空列表同样输出 null,不制造零分母比例。

成功判据是数值、计数关系和未知值处理全部符合表格,而不只是程序退出无错误。若不一致,先检查是否改了逐题布尔值、重复次数或分母。该示例验证的是算术与统计口径,未执行真实 Skill,也不验证任何宿主的加载机制。

8. 条件变化、保留题与成本决定结论能走多远

8.1 稳定性与鲁棒性分别检查

稳定性保持任务输入不变,重复运行;鲁棒性则在预定条件下改变说法、重排信息或模拟工具故障,并按新的条件检查预期。工具不可用时,正确停止或澄清可能才是目标,不应一律要求强行完成。

不同扰动类型应分别汇总。结果正确主要看关键值、必要行为和约束是否满足,不要求每次措辞完全相同。同源改写增加了表达变化,却不能自动等同于新增独立任务场景。

8.2 开发题与保留题为何必须按任务族隔离

复制代码
若结果被用于反复调整
原始任务族 01
原题 01
改写 01a
重排 01b
同一侧集合
开发题用于调整 Skill
独立任务族 02
保留题用于最终检验
不再是独立检验

图 8-1|按原始任务族划分,避免改写泄漏。 图用任务族 01 进入开发题作例子;同样可以把整个任务族放进保留题。关键是同源变体不跨两侧。开发与保留两侧都应考虑日常任务及重要边界。

保留题一旦被用于反复修改,就已经影响了方法选择,不能继续把它当作完全独立的新检验。修改后既要回归旧能力,也应使用未参与修改的新题。重复同一道题很多次,不能替代更广的任务覆盖;样本少或波动大时,结论应保留不确定性。

8.3 15 个百分点与 50% 耗时增长不能相减

回到 A/C 教学数据:假设每次平均耗时从 30 秒变为 45 秒:

\\text{耗时相对增加}=\\frac{45-30}{30}=50%

成功率增加 15 个百分点描述质量差,耗时相对增加 50% 描述另一种量,不能算成"净收益 −35%"。应把它们并列,与任务的质量底线、响应要求和成本上限比较。质量相当时成本降低,也可能值得采用。

成本记录应包含失败运行的消耗、Token、工具调用、人工返工与特别慢的任务。超时单列:达到 60 秒上限只能说明这次运行被截断,不能说它在 60 秒完成。只比较成功任务耗时可能隐藏失败成本;如果采用这种条件统计,必须明确统计范围。

8.4 常见错误与下一步

观察到的现象 能说什么 下一步检查
B 高、C 没改善 自然使用环节值得排查 选择、加载及后续轨迹;不直接定根因
总分上涨但关键题退步 存在必须单列的损失 关键失败项与预先设定的质量底线
运行通过率高,全部重复通过率低 偶尔做成与持续可靠不一致 完整矩阵、固定重复与重试预算
调用记录未知 触发情况没有足够证据 补可观察性,未知单列
换序后评分翻转 评分结论不稳定 复核任务标准、产物与裁判判断
模型或工具更换 原对照条件已改变 重建基线并重新评测

9. 三道题检查是否会用

题 1: 新版本仍是 85% 成功率,旧版本也是 85%,能说它没有价值吗?

参考解答: 只能说该口径下的成功率没有增加。成本可能降低,失败任务可能换了一批,关键能力可能改善或退步。需要逐题配对、成本与边界记录,不能仅凭相同总分判断全部价值。

题 2: 20 道题各做 5 次,每道题都至少成功一次,为什么不能说"可靠性是 100%"?

参考解答: 100% 的分母是 20 道题,条件是至少一次通过;它不要求其余 4 次成功。本文示例同时只有 50% 的任务五次全过。必须说清统计单位、重复次数和通过条件。

题 3: 为修复失败,反复查看并调整保留题;修完后保留题全过,能否证明对新任务可靠?

参考解答: 这些题已影响修订,失去独立检验作用。全过可以作为已知任务的回归结果,但仍需未参与修改的新任务检验,且要保持模型、工具、预算与评分口径可比。没有足够样本时,不能把有限结果推广到所有任务。

10. 技术速查

目标 → 可检查成功条件 → 可比 A/B/C 对照 → 每次结果与轨迹 → 逐题增益和退步 → 固定预算下重复 → 分类型扰动 → 独立任务检验 → 质量与成本取舍。

要作的判断 必须看到的证据 最容易漏掉的边界
是否有增益 同题、同口径的基线与实验结果 点名提示和整个方法包共同改变
是否会自然用上 C 组应触发与不应触发记录 未知不能猜成未用
是否稳定 同输入的完整重复记录 至少一次成功不等于全部通过
是否鲁棒 各种扰动下的预期与结果 工具故障后正确停止也可能通过
是否能推广 独立任务族与保留题结果 反复用于修改后不再独立
是否值得采用 质量底线、耗时和资源成本 不同单位的指标不能直接相减
相关推荐
Java爱好狂.5 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
马良神笔7 小时前
2026 年Rag最近技术前沿总结
后端·python·django
程序猿DD7 小时前
同样10美元,OpenDesign和Command Code的DeepSeek V4.1 Flash额度到底有多少?
后端
高频因子挖掘机8 小时前
A股量化从日线升级到5分钟线:数据量增加后最先暴露哪些工程问题?
后端·github·api
高频因子挖掘机8 小时前
历史行情返回顺序变了,为什么按行号计算指标很危险?
后端·github·api
团子哒哒9 小时前
数组、切片和Map
后端
专注仿真9 小时前
ThinkPHP6 API接口开发实例:从零搭建RESTful风格接口
后端·php·restful
开心猴爷10 小时前
应对iOS审核4.3:可以使用 IpaGuard 来给属性名混淆的技术细节与平衡之道
后端·ios
1m5555555510 小时前
RAG 工程实战(五):正确知识已经进入 Prompt,为什么大模型还是会答错?
后端·面试
易小尊10 小时前
我的模型在 65% 以上时准得可怕,在 50% 时像在掷硬币
后端