行为评估与 EDK
编写验证工具行为的 eval,使用静态校验、重复运行和 JSON 报告检查质量。
This page has not been translated into English yet. The original Chinese version is shown below.
行为评估验证代理做了什么,例如调用哪些工具、调用顺序与参数,而不是逐字匹配最终回答。官方 eval 位于 evals,文件后缀为 .eval.ts 或 .eval.tsx。
编写一个评估
明确目标工具行为,为读写场景在 files 元数据中准备工作区,再通过 rig.waitForToolCall 或工具参数断言验证执行。不要仅断言回答里包含某句话,也不要只写文件却不验证真实模型行为。
元数据需使用静态 suiteName、suiteType 与用例名称,每个用例提供非空 prompt。文件操作限制在 rig.testDir 内,保持默认工具集合,不通过覆盖 settings.tools.core 人为删减工具。
选择稳定性策略
允许的 policy 为 ALWAYS_PASSES、USUALLY_PASSES、USUALLY_FAILS。官方接受标准要求新 eval 从 USUALLY_PASSES 开始,在 nightly 数据证明稳定后再提升;不要仅凭一次本地通过标记 ALWAYS_PASSES。
本地运行示例:
RUN_EVALS=true npx vitest run evals/my-test.eval.ts至少重复 3 次,检查模型波动,再执行静态校验。这与集成测试新增用例至少五次 deflake 的要求不同。
EDK 工具
| 命令 | 作用 |
|---|---|
npm run eval:inventory | 静态扫描评估文件,生成清单 |
npm run eval:inventory -- --json | 输出机器可读清单 |
npm run eval:inventory -- --root /path/to/other/repo | 指定其他根目录 |
npm run eval:validate | 检查结构和评估规范 |
npm run eval:validate -- evals/my-test.eval.ts | 校验单文件 |
npm run eval:report | 默认递归收集 evals/logs 下的 report.json 并按模型汇总 |
npm run eval:report -- /path/to/logs | 指定报告目录 |
npm run eval:report -- --json | 输出 JSON 汇总 |
校验错误和警告
错误包括文件命名、非法 policy、缺失静态元数据、缺失 prompt、动态用例名、无效工具引用、缺少正向工具断言,以及读写场景未配置 files。错误会返回退出码 1 并阻断相应 CI。
new-evals-policy 是警告级别,提示新用例不应直接采用 ALWAYS_PASSES;它不会仅凭这一条返回 1。静态校验通过也不能代替实际运行或稳定性验证。
汇总评估结果
先让 Vitest 输出 JSON report.json,再用 eval:report 关联清单中的 policy 并计算各模型通过率。官方提供指定 evals/vitest.config.ts、模型环境变量和输出目录的工作流示例;模型需采用当前可用值。
报告聚合示例:
npm run eval:report -- evals/logs --json > aggregated_report.json将模型、运行条件和重复次数一起保留,避免把不同条件的通过率直接比较。EDK 的静态 inventory/validate 与模型实际评估是不同步骤,前者不会自动证明代理满足行为目标。