« Phase 11 README · Warmup · Deep Dive · Principal Deep Dive · Core Contributor · Staff Notes
Phase 11 — Hitchhiker's Guide
The compressed practitioner tour. Read the WARMUP for the derivations; this is the stuff you say in the meeting.
30-second mental model
An eval is a dataset + a scorer + an aggregate. The dataset — your golden set — is the moat: curated, versioned, labelled, grown from every incident, measuring your task not a public benchmark. Score with the cheapest reliable rung: programmatic checks (exact/ contains/numeric/rubric) before a calibrated LLM-judge before a human. Grade the path, not just the answer (trajectory eval — tools + order). An LLM-judge is a model that is biased (position/verbosity/self-preference), so validate it against humans with Cohen's κ ≥ 0.6 before it gates anything. Run the golden set on every commit as a CI gate; break out a per-label view because one number hides regressions; keep safety a hard gate, not a term in an average.
The numbers to tattoo on your arm
| Number | Meaning |
|---|---|
| κ ≥ 0.6 | "substantial" judge↔human agreement — the bar to gate CI on a judge |
κ = (p_o − p_e) / (1 − p_e) | agreement corrected for chance (raw agreement overcounts) |
| 90% + 90% → 81% by chance | why raw agreement lies; κ subtracts this floor |
F1 = 2PR/(P+R) | harmonic mean — a great P can't paper over a terrible R |
trajectory exact = 0, set = 1 | same tools, wrong order — grade the path |
| programmatic > judge > human | the scoring ladder, cheapest reliable rung first |
| safety = 0 failures, not 99.5% | safety is a gate, not a weighted average |
| one number hides regressions | always slice by label |
Framework one-liners
- OpenAI Evals = a registry of datasets + graders (
match,includes,fuzzy, model-graded); the open-source shape ofrun_suite. - LangSmith / Braintrust = hosted datasets + evaluators (string, trajectory, LLM-judge)
- experiment tracking + regression diffs across runs.
- ragas = RAG-specific metrics: faithfulness, answer-relevance, context-precision/recall — the retrieval-vs-generation split.
- G-Eval / MT-Bench = the LLM-as-judge recipes (pointwise CoT scoring; pairwise arena).
- CheckList = behavioral testing (invariance / directional / minimum-functionality tests) — the academic root of "re-run the golden set every change."
- All of them are elaborations of
for case in golden_set: score(agent(case.input), case.reference).
War stories
- The judge that loved long answers. A team gated releases on an LLM-judge's helpfulness score and "improved" by making answers wordier. Users hated it; the judge had verbosity bias and nobody had checked κ. The fix was one afternoon: control for length, re-validate against humans.
- The 1% improvement that broke refunds. Overall pass rate went up 1% after a prompt tweak; the refund slice had quietly dropped from 94% to 61%. No per-label breakdown, so it shipped. The customers found it before the dashboard did.
- The agent that guessed right. Final-answer eval was green for months. Trajectory eval revealed it was returning cached values without calling the pricing tool — correct by luck, one stale cache away from wrong. Grade the path.
- The safety case averaged away. A "99.7% pass" release leaked an account id on one case. It was one row in a mean, so the aggregate gate let it through. Safety has been a separate hard gate ever since.
Vocabulary
Golden dataset (curated/versioned eval set) · EvalCase (input + reference + expected trajectory + labels) · Scorer (output→[0,1]) · Scoring ladder (programmatic→judge→human) · Rubric (weighted programmatic checks) · Trajectory eval (grade the tool sequence) · Precision/Recall/F1 (set-task metrics) · LLM-as-judge (a model that grades) · Pointwise vs pairwise (grade one vs compare two) · Position/Verbosity/Self-preference bias (the judge's systematic errors) · Cohen's κ (chance-corrected agreement) · Regression gate (fail on a pass-rate drop) · Safety gate (hard-fail on any safety miss) · Offline vs online eval · Feedback loop (thumbs/A-B → new golden cases).
Beginner mistakes
- Reaching for an LLM-judge when a programmatic check would do.
- Trusting a judge you never validated against humans (no κ).
- Reading raw agreement as if it weren't inflated by chance.
- Grading only the final answer and missing wrong-path bugs.
- Shipping on one aggregate number with no per-label breakdown.
- Averaging a safety failure into the mean instead of gating it hard.
- Evaluating on a public benchmark instead of your own golden set.
- Treating evals as a pre-launch checklist instead of a standing CI gate + online loop.