SuperAPI AI 工具集

run-evals

测试与质量

查看项目

更新于 10-16 09:24

技能介绍

用途

本技能负责编排智能体评测套件(e2e/agent-evals/):由无头 claude -p 智能体使用内置技能(skills/sim-use/)针对 Playground 夹具应用执行自然语言用例,并通过确定性后置条件检查进行判定。它验证脚本化 E2E 套件无法覆盖的层面:智能体阅读 SKILL.md 后是否选用正确的动词,并能否规避文档中记录的陷阱。如果此处失败而脚本层为绿色,通常意味着技能文案漂移,而不是 CLI 缺陷。

执行交由 scripts/eval.sh / e2e/agent-evals/run.py,不要重新实现它们的逻辑。用例结构、标签与编写规则见 e2e/agent-evals/README.md。须从仓库根目录运行。

主要能力

  • 决定被测的 sim-use 二进制:整个运行过程(设备探测、智能体命令、验证层)默认从 PATH 解析 sim-use,除非被覆盖。不可让其隐式进行。可选择已安装的发行版(默认,即 PATH 上解析到的 sim-use),或开发构建(通过 -b <path> 传入,例如 -b .build/out/Products/Debug/sim-use(SwiftBuild 布局)或 -b .build/debug/sim-use(经典布局),需先以 make build 构建)。
  • 准备设备与夹具:可覆盖 iOS 与 Android 平台(包装脚本自动检测可达平台,可用 -p ios|android 限制)。
  • 运行评测:支持快速标签、跳过成本提示、指定平台或开发构建、单个用例等运行方式。
  • 解读与报告:报告输出至 e2e/agent-evals/reports/<timestamp>/(已被 git 忽略),包含 report.md(判定表 + 环境头)、verdicts.jsonl 以及每个用例的 stream-json 记录。

使用方式

第一步:确认被测的 sim-use。先确认解析结果并报告给用户:

python3 -c 'import pathlib,shutil; print(pathlib.Path(shutil.which("sim-use")).resolve())' sim-use --version

包装脚本会打印 sim-use under test: <real path> (<version>),运行报告也会记录在 sim-use under test: 下——在总结中引用该行,让人清楚知道被评测的具体对象。

第二步:准备设备与夹具。

iOS:

  • Device Hub(Xcode 27)必须关闭——pgrep dtuhidd 应为空。若在 Device Hub 打开时启动模拟器,其旧版 HID 会断开,sim-use 的守卫会(正确地)让该设备上的每个用例失败。若 dtuhidd 在运行:退出 Device Hub,然后 shutdown && boot 模拟器。
  • 启动模拟器并等待:xcrun simctl boot <UDID> && xcrun simctl bootstatus <UDID>。
  • 必须安装 Playground 夹具。检查:xcrun simctl listapps <UDID> | grep -c com.cameroncooke.SimUsePlayground——若缺失,用 scripts/test-runner.sh -b 安装(构建 sim-use + Playground,约 2-3 分钟)。

Android:

  • 启动模拟器(默认不在 PATH 中:~/Library/Android/sdk/emulator/emulator -avd <AVD> &),等待 adb shell getprop sys.boot_completed 返回 1。
  • 两个夹具包都必须存在:adb shell pm list packages | grep -c com.linecorp.simuse 应为 2(playground + device bridge)。若缺失,用 make e2e-android 安装它们。
  • 来自旧 CLI 版本的陈旧 bridge 无妨——版本一致性检查会触发,智能体应通过 sim-use android init 恢复(该恢复过程本身也是评测所检验的内容之一)。

第三步:运行。

make eval # quick 标签,所有可达平台,花费前会询问 make eval ARGS="-y -t quick" # 跳过成本提示(发布门禁风格) make eval ARGS="-p ios -b .build/out/Products/Debug/sim-use" # 开发构建,单一平台 scripts/eval.sh -- --cases <id> # 单个用例(原始 run.py 参数)

成本:每个用例是真实的 claude -p 智能体(约 1-3 分钟,真实 API 计费;包装脚本会打印估算并在未加 -y 时询问)。除非用户在本对话中已批准花费,否则绝不要传 -y。

第四步:解读与报告。报告落在 e2e/agent-evals/reports/<timestamp>/(已被 git 忽略)。

  • 全部 PASS → 报告判定表、sim-use under test 行以及报告路径。
  • FAIL → 在得出结论前先阅读该用例的记录,并分类:
    • 技能文案漂移——智能体选错动词或漏掉了技能本应引导其规避的已记录陷阱 → 修改 skills/sim-use/SKILL.md,而非用例。
    • CLI 回归——正确动词失败 → 视为产品缺陷;提交前先用 sim-use 直接复现。
    • 环境/夹具噪声——重启未稳定、Playground 缺失、Device-Hub 污染的启动 → 修复环境后重跑;若耦合是固有的,给用例打上 fragile 标签(带 fragile 标签的用例从不用作运行门禁)。
  • ERROR → 测试框架自身损坏(重置失败、claude 缺失);修复环境,不要动用例。

适用场景

当用户运行 /run-evals 或要求针对某个选定的 sim-use 二进制运行 LLM 驱动的智能体评测时使用。用于验证智能体在阅读 SKILL.md 后能否选用正确动词并规避文档记录的陷阱,可在 iOS 和 Android 平台上针对 Playground 夹具应用执行。

限制与禁止事项

  • 不要在未说明被测二进制的情况下运行评测。
  • 除非用户已批准成本,否则不要传 -y。
  • 不要为让运行变绿而编辑或删除评测用例——红色用例是信号,应先分类(第四步)。
  • 不要提交 e2e/agent-evals/reports/ 下的任何内容(该目录故意被 git 忽略)。