Grade the landing, not the flight path
Agent evals fail in two opposite ways. Path graders demand an exact
tool choreography and punish creative-but-correct solutions.
Transcript graders trust the model’s closing sentence (“refund
done”) while the database still says otherwise. Both miss the
product: did the world change the way the user needed?
First principle: separate three layers. The
agent harness is how the model acts (tools, loop, memory).
The eval harness is how you run trials and collect
artifacts. The grader scores those artifacts. Anthropic’s
vocabulary is useful here: a trial’s transcript is the full
message/tool history; the outcome is final environment state. Opus
finding a better booking policy than the benchmark author imagined
is only a “failure” if you graded the path instead of the user’s
goal.
Non-determinism is not noise to ignore—it is a product requirement
in disguise. pass@k rises with more attempts (good when one working
patch is enough). pass^k falls with more attempts (the right bar
for a support agent that must work every time). Pick the metric
that matches the user promise, then size trials accordingly. Start
small: 20–50 tasks converted from real bugs beat a 500-task suite
nobody trusts. Each task needs a reference solution that passes
every grader, so a 0% score is more often a broken task than a weak
model.
Prefer deterministic outcome checks (SQL row, file tree, HTTP
status, unit tests) when you can. Use LLM rubrics for tone and
open-ended synthesis, calibrated against humans, with an escape
hatch like “Unknown.” Give partial credit across steps so “found
the bug, failed the fix” is distinguishable from total miss. Keep
trials isolated—shared git history and leftover files turn your
suite into an accidental open-book exam.
Checklist
-
For each task, write the outcome assertion first; only then
decide if any path checks are truly required.
-
Store a reference solution that passes all graders before you
trust a 0% model score.
-
Label the product bar: one-success (pass@k) vs always-works
(pass^k), and report both when useful.
-
Isolate trials: clean env, no shared caches, no prior-run git
clues.
-
Balance positive and negative cases (when to act and when not
to).
-
Calibrate LLM rubrics on a human-scored holdout; allow
“Unknown.”
-
Log transcript + outcome side by side so “said yes / did no” is
one glance.
Before your next agent change ships, add one grader that inspects
environment state after the run—and delete one grader that only
matches a preferred tool order.
Further read:
Demystifying evals for AI agents
·
Effective harnesses for long-running agents
·
τ-Bench (pass^k)