选择断言类型
| 目标 | 推荐机制 |
|---|---|
| 回复包含固定字段 | includes / matches |
| 结构化 JSON 完全匹配 | equals |
| 工具调用是否发生 | t.calledTool / t.notCalledTool |
| 输出是否语义正确 | t.judge.* |
| 代码是否工作 | EVAL.ts 或 t.check(await t.sandbox.runCommand("npm", ["test"], { cwd: "/workspace" }), commandSucceeded()) |
| 成本是否可控 | t.maxTokens / t.maxCost |
值断言
作用域断言
LLM-as-judge
Gate 和 soft 的取舍
gate:失败就是失败。soft:保留分数,用于比较质量。
代码任务用测试评分
在 fixture 的EVAL.ts 里写真实测试:
成本和效率
实用建议
- 先写 1-2 个 gate,保证任务底线。
- 再加 soft 分数比较质量。
- 复杂语义用 judge,但让 judge 有明确 rubric。
- coding-agent 结果尽量用真实测试验证。
- 把失败消息写清楚,方便从报告直接定位问题。