Evaluating Skills, Not Just Agents: Agentic Continuous Evaluation of Skills
Christopher Kevin, Narendran Raghavan, Jean-Francois Puget, Roshni Malani, Meghana Puvvadi, Moshe Abramovitch, Mohit Gupta, Rama Akkiraju, Subodh Prabhu, Yogesh Dangi, Wei Luo, Seong Hee Lee
KDD 2026 Workshop on Enterp
cs.AI
2026-08-21
NVIDIA 提出 ACES,对技能做有/无配对 live 评测。947 次试验、四套 harness 上复合 Skill Lift 均值 0.2134,正提升占 72.8%;文档扫描分与真实增益相关接近零。
Agent skill 已经成了 Claude Code、Codex、Cursor 这类 harness 的标准扩展层:一份 SKILL.md,加上可选脚本和参考文档,推理时按需加载。社区仓库里已经堆了成千上万个技能包。企业要上线时真正要回答的问题很具体:这个技能在真实 agent、同一模型、同一沙箱、同一打分规则下,到底有没有帮任务做成。文档写得像不像规范,只能当前置检查。
现有闸门分四类:结构检查、LLM-as-Judge 文档打分、脚本 lint、安全扫描。四类都在扫文档,没有一类会把技能跑起来。NVIDIA 把扫描比成编译器的 -Wall -Werror:没有 warning 不代表程序做对了。技能可能扫得很干净,但 agent 发现不了它、调错脚本、读完结果却转述错、和同工作区其他技能打架,或者模型一升级就悄悄退化。这些失败从 SKILL.md 里看不见。
ACES(Agentic Continuous Evaluation of Skills)把技能当可执行的 agent 产物来评。核心是配对试验:同一道题、同一 harness、同一模型、同一套支撑技能、同一打分器,只改目标技能在不在。差就是 Skill Lift,技能在这套固定条件下的边际贡献。
评测资产跟着技能走,常见形态是 evals.json:用户问题、期望技能、参考答案,以及一段段自然语言的 expectedbehavior,比如「执行前先读 SKILL.md」或「破坏性操作先问用户」。作者可以另写 EVAL.md,里面的意图压过 LLM 生成的用例;产品有自己的任务和打分器时,走 BYOT / BYOG,ACES 只负责配对协议和汇总。
跑完的轨迹归一成 ATIF(Agent Trajectory Interchange Format),同一套打分器跨 harness 复用。默认六项:
复合 Skill Lift 默认六项等权。outcome-only 只平均 accuracy 和 goalaccuracy。基线工作区故意不是空的:decoy 或前置技能两边都放着,避免把「工作区里有任何技能」算进目标技能的功劳。隔离模式只放目标技能,测内容贡献;group 模式旁边再放 decoy,两个 lift 的差叫 routing premium,看名字和描述能不能从邻居里被挑出来。开源实现是 NVIDIA SkillEvaluator。
145 个真实技能(内部企业仓加公开目录)先扫一遍。结构分均值 79.2,中位 79.8,σ=4.9。默认 70 分闸门通过率 94.5%,过 80 分的只有 48.9%。LLM 文档打分通过率 86.2%。两套扫描 Spearman ρ=0.14,Pearson r=0.08,几乎不相关。最常踩的规则是 frontmatter:99.3% 没声明 tools,97.9% 没写 Limitations,97.2% 没写 author。扫描能抓写作问题,但两套分数对不齐,更看不到运行时。
真正有用的是 live 层。生产技能主分析留下 64 个技能、4 个主 harness(OpenCode、Claude Code、Codex、Terminus-2),其中 58 个技能产出了 947 条可打分配对 case。
| 指标 | 带技能 | 基线 | Skill Lift | 正 lift 占比 |
| 复合分 | 0.7460 | 0.5326 | 0.2134 | 72.8% |
| accuracy | 0.7760 | 0.6329 | 0.1431 | 37% |
| goalaccuracy | 0.6887 | 0.4720 | 0.217 | 57% |
| skillexecution | - | - | 0.3263 | 64% |
| behaviorcheck | - | - | 0.2983 | 56% |
| skillefficiency | - | - | 0.2758 | 41.7% |
| security | - | - | 0.020 | 6% |
947 条里 689 条为正、171 条为零、87 条为负。过程指标抬得比最终答对更多:扫描看不见的发现、路由、工作流和工具使用,才是技能真正在改的东西。skillefficiency 均值第三高,但只有 41.7% 的 case 为正,有些 run 拿效率换正确率或流程完整性。
四个 harness 的平均 lift 不一样:OpenCode 0.3611,Claude Code 0.2904,Codex 0.1264,Terminus-2 0.0896。这是各自对自家基线的差,不是模型排行榜。覆盖也不均:Claude Code 56 个 cell / 251 条 case,OpenCode 34 / 211。Codex 固定 harness 换模型时,更强后端把无技能基线抬上去,Skill Lift 从 GPT-5.2 的约 +0.09 缩到 GPT-5.5 的约 +0.05,绝对分还很高。技能的边际价值会随模型变强而变小。
扫描分和 live lift 的相关更接近零:结构分 Spearman ρ=-0.0181,LLM-judge ρ=-0.0266。扫过关不能当运行时证据。
25 组路由压力试验把可见技能从 1 加到 50。1 到 20 个时总体 lift 还在 0.133-0.149,墙钟从 258 秒涨到 451 秒;到 50 个,带技能通过率掉到 0.55,墙钟 1290 秒。最挤的工作区适合当发布压力测试,不适合每次改都跑。
给正在把 skill 当产品交付的团队:PR 上不能只看 SKILL.md 写得整不整齐。ACES 把 evals/ 做成技能的 tests/,结构扫描每次改都跑,live 配对留给候选发布、高风险技能或 reviewer 点名。Skill Lift 为负时,轨迹能分出两类:跑挂了,或技能把 agent 带偏了。后者才是该改文档和触发词的信号。
这不是又一个 agent benchmark。Terminal-Bench、SWE-bench 评的是固定任务上的 agent;ACES 评的是任意一个技能,在它自己的任务上,加上去有没有用。SkillsBench 证明技能整体有用,但不给单个技能打分,也不进 CI。对已经在 Claude Code / Codex 上堆技能包的人,这篇给的是可落地的审查协议。
这是工程方法论论文。Skill Lift 0.21 不是新算法的增益,是「有技能 vs 没技能」在这批企业技能上的平均差。扫描闸门不够,配对 live 评测补得上那块看不见的面。
语料偏 System Access、Deployment、Platform、Data Infra,Troubleshooting 和创意类技能几乎没有,lift 分布不能外推。四个 harness 覆盖不均。headline 的 95% CI 是配对 case 上的正态区间,不是 947 个独立技能;按技能 bootstrap 是 [0.1898, 0.2350],仍然为正。201 个 cell 里 88 个有两次试验,cell 内 lift 标准差中位 0.0319。
配对设计固定了任务、harness、模型、打分器和支撑技能,比单条件 live 分强,但识别不出与环境无关的技能贡献。加一个技能会改路由压力和上下文分配。Skill Lift 只能读成在声明的工作区和基线策略下的边际贡献。
Live 轨迹打分的跨 judge 一致性、人工校准、不确定度都没测。文档 rubric 上三个 judge 差约 1.5 分(0–10 分制),live 层没有对应数字。部分企业技能要打 VPN 后面的内部接口,容器过不去,那些技能的 goalaccuracy 绝对值是下界。安全扫描是外部集成,不是这篇的贡献。超时和其他无分原因混在一起,没有单独超时率。
任务是作者自带的。这让评测贴近真实意图,也让技能在自己出的题上得分带着自产自销的风险。论文用 decoy、负例、隔离和 group 两种模式来压这个风险,但没给出作者出题偏置的量化。