Essay 002 · Agent Skills
OpenAI:如何用 Evals 证明 Agent Skill 没有被改坏
精读 OpenAI 的 Agent Skill 评估指南,整理从成功定义、触发样本、运行轨迹到确定性检查与量表评分的最小评估闭环。
首版:完成原文事实、个人理解与判断的区分
Version 1.0评估 Skill 的基本单元不是最终答案的一次主观观感,而是“输入 Prompt—完整运行轨迹与产物—一组可解释检查—可比较分数”;只有这个闭环存在,迭代才有证据。
1. 原文说了什么
先定义成功,再写 Skill
OpenAI 把 Skill 评估看成轻量端到端测试。写 Skill 之前,先把成功拆成少量必须满足的目标:
- 结果目标:任务是否真的完成,产物能否运行。
- 过程目标:是否触发 Skill,是否执行了必要步骤和工具。
- 风格目标:输出是否符合约定结构和规范。
- 效率目标:是否出现无意义循环、重复命令或 token 膨胀。
只看最后文件可能掩盖错误路径;只看工具调用又不能证明产物可用。因此,需要同时保留 trace 与 artifacts。
先手工触发,暴露隐藏假设
原文以创建 React、Vite 与 Tailwind 示例项目的 Skill 为例。早期应显式调用 Skill,观察它是否漏装依赖、错误假设目录为空、触发过宽或跳过顺序。每次人工修复都是一个未来评估样本。
用小型 Prompt 集守住路由边界
单个 Skill 不需要一开始就建设大型 benchmark。原文建议先用约 10~20 个提示,覆盖四种情况:
- 明确点名 Skill 的显式调用。
- 不点名但意图匹配的隐式调用。
- 带有真实噪声和业务背景的上下文调用。
- 与目标相邻、但不应该触发的负向对照。
这个 CSV 会随着真实失败逐渐增长,成为 Skill 必须持续做到什么的活记录。
两层评分:确定性检查+结构化质检
第一层使用 codex exec --json 捕获 JSONL 事件,对命令、顺序和文件进行确定性检查。例如是否运行安装命令、是否创建 package.json、是否留下多余文件。失败时可以直接回看事件序列,定位回归原因。
第二层处理结构、样式和约定等难以写成布尔规则的问题。可以启动一个只读评审,让 Codex 按 rubric 检查产物,并通过 --output-schema 返回固定 JSON 结构。这样,模型评审至少能被解析、比较和追踪,而不是输出一段自由文本。
当 Skill 逐渐成熟,再按风险增加构建检查、运行时冒烟测试、仓库清洁度、命令次数、token 预算和权限回归。原则是先使用快速、可解释的信号,只有确实降低风险时才增加重型检查。
2. 我是怎么理解的
这套方法可以看成 Agent 版本的测试金字塔:
- 最底层是快速、便宜、可解释的事件与文件断言。
- 中间层是构建、冒烟和真实环境的端到端检查。
- 顶层才是成本更高、稳定性更弱的模型量表评分。
最重要的变化是把 trace 当作一等产物。传统软件测试通常知道函数调用和状态变化;Agent 如果只留下最终文本,就无法判断它是正确执行、偶然成功,还是走了危险路径后碰巧得到相同结果。
评估还把“是否触发”与“触发后是否做好”分成两个问题。前者验证路由,后者验证能力。很多 Skill 看似内容写得很好,真正失败点却是根本没有加载,或在相邻请求上误加载。
3. 我的判断是什么
我认同从小样本和确定性检查开始。这比一上来构造复杂的 LLM Judge 更容易调试,也更能解释一次修改为什么变好或变坏。
但要把它用于生产,还需补上三点:
- 重复运行:模型有随机性,单次通过不能代表稳定通过;关键样本需要多次运行并记录分布。
- 隔离与权限:自动评估会执行真实命令,应在临时目录或沙盒中运行,并采用最小权限。
- 防止评估过拟合:开发集可用于迭代,但还需要未参与调试的保留样本检查泛化。
模型量表也不能因为输出了 JSON 就自动可信。Rubric 必须具体,评审应只读,关键结果仍要由确定性信号或人工抽查兜底。
4. 可以怎么使用
一套最小 Skill 评估目录可以包含:
evals/
├── prompts.csv # 正例、隐式触发、真实噪声、负例
├── run-evals.* # 启动 Agent 并保存轨迹
├── deterministic-checks.* # 命令、文件、顺序与退出状态
├── rubric.schema.json # 结构化质量评分
└── artifacts/ # JSONL、产物与评分结果
最小实施顺序:
- 写出 3~5 个不可妥协的成功条件。
- 选择 10~20 个真实 Prompt,至少包含一个相邻负例。
- 在隔离目录运行并保存 trace、stdout、stderr 和最终产物。
- 先写确定性 grader,再补只读 rubric grader。
- 同时比较无 Skill 与有 Skill,避免只看新版本之间的差异。
- 每次人工修复都转成回归样本。
- 在 CI 中设定失败门槛,并保存历史分数与成本趋势。
做到这一步,Skill 的改动才从“感觉更好”变成“有证据证明没有被改坏”。
原文信息
原文:Testing Agent Skills Systematically with Evals
作者:Dominik Kundel、Gabriel Chua / OpenAI
发布时间: · OpenAI Developers 实践指南
查看本文修订记录(1)
- v1.0 · 2026.08.06 首次发布。