2 分•作者: edonadei•3 个月前
用于 Claude Code 和 Codex 的技能很难测试。我所说的“难”,是指没有标准化的测试方法。你对某个技能进行一次评估,看起来似乎有效,然后就发布了。接着,新的超级模型发布了(有人在用 GLM 5.2 吗?),它会在不知不觉中导致技能的某些部分失效,而你直到用户抱怨才会发现。 我也遇到了同样的问题,于是我尝试构建一个轻量级的工具来解决这个问题。Caliper。 它是一个本地的、轻量级的框架,可以在隔离的环境中运行一个技能 k 次,并给你一个 pass@k 分数(即在 k 次尝试中成功的次数)。由于它是一种非确定性技术,你不能只说“它成功了一次”。你需要回答它在 k 次尝试中通过了多少次。 你可以在 YAML 规范中定义成功。我选择 YAML 是为了保持模式并使其对人类仍然易读。你可以使用 LLM 裁判、Python 断言,或者两者兼有: 这是一个简单的 JSON 提取评估示例,你可以在 YAML 文件中这样写: ```yaml tasks: - name: 将行动项提取为干净的 JSON prompt: "读取 /tmp/transcript.txt 并将行动项写入 /tmp/actions.json。" expect: "一个有效的 JSON 数组,其中每个项目都有 owner、task、due。没有 markdown 围栏。" assert: | import json items = json.load(open("/tmp/actions.json")) assert isinstance(items, list) assert all({"owner","task","due"} <= i.keys() for i in items) ``` 然后通过 CLI 运行: `caliper run extract-actions.eval.yaml --k 5 --baseline` `--baseline` 标志的妙处在于,它会在没有技能的情况下重新运行所有内容,这样你就可以看到是技能在起作用,还是基础代理本来就会通过: ``` ID Task k(5) pass@k task-1 将行动项提取为 JSON 5/5 100% PASS 有技能 100% 无技能 60% 差值 +40% ``` 大多数模型都能在大部分时间里正确处理 JSON(JSON 提取在两年前就已经解决了)。但问题就在于“大部分时间”这个漏洞。这个差值显示了技能的实际帮助。 (它有时是 0%,有时是 -100%!) 我还创建了两个技能,你可以立即在自己喜欢的框架中使用,例如 Claude Code、Codex 或 Pi: * `evaluate-skill`:在不离开工作流程的情况下运行和管理评估。 * `grill-skill`:读取你的 SKILL.md,采访你关于“好”的标准,编写一个包含 3 个任务的规范(正常路径、边缘情况、对抗性),然后运行它。 你可以使用以下命令安装该技能:`npx skills@latest add edonadei/caliper` 目前我支持 claude-code、codex、pi、claude-api、openai-api。你可以将代理和裁判作为独立的后端运行,因此你可以在一个后端上运行一个技能,并用另一个后端进行裁判。 GitHub: [https://github.com/edonadei/caliper](https://github.com/edonadei/caliper) PyPI: [https://pypi.org/project/caliper-eval/](https://pypi.org/project/caliper-eval/) 当然,这只是第一步。我认为自动评分层可以得到极大的改进,在创建和迭代评估规范方面提供更多指导,支持更多框架,为什么不将这一层纳入一个更大的自我改进系统中呢? 如果你也在构建代理评估,我非常希望能了解你是如何处理的。