Evaluating prompts
“It looks better” is not an evaluation. Without a repeatable way to score outputs, every prompt tweak is a gamble, and a fix for one case silently breaks another. Evals turn prompt engineering into engineering.
1. Build a test set
Start small and real. Gather 10–50 representative inputs — including the awkward ones: empty input, very long input, ambiguous cases, and adversarial input. For each, record what a good output looks like (or the property it must satisfy). This set is your regression suite; grow it every time you find a failure in production.
2. Prefer machine-checkable checks
Deterministic checks are cheap, fast, and unambiguous. Lean on them:
- is-valid-json — the output parses.
- schema-match — it matches your output contract.
- contains / not-contains — a required phrase is present, a forbidden one absent.
- regex — it matches a pattern (a date, an id, a format).
- length — within bounds.
- equals / one-of — for classification, the label is correct.
Convert fuzzy goals into concrete proxies where you can: “is it concise?” → length <= 40 words; “does it give steps?” → regex for a numbered list of 3–5 items.
You can generate a starter rubric for any prompt with the free Eval Rubric Generator.
3. Use LLM-as-judge sparingly
Some qualities — helpfulness, tone, faithfulness — resist regex. For those, a second model can grade outputs against a rubric (“Rate 1–5 whether the answer is supported by the sources”). It’s useful but noisy and biased, so:
- Give the judge a specific rubric, not “is this good?”
- Run it on a sample, not everything.
- Anchor to deterministic checks first; use the judge as a supplement.
- Watch for known biases (length, position, self-preference).
4. Score, don’t eyeball
Run the whole set and report pass rates per check, not a gut feeling. A prompt that goes from 82% → 91% on your schema check is progress you can defend; “seems better” is not.
5. Run evals on every change — prompt and model
The two things that silently change output quality are a prompt edit and a model change (including a provider updating a model behind the same name, or deprecating it). Re-run your evals on both. A prompt tuned on one model can score very differently on another — which is exactly why you test across the models you target rather than assume portability. See Model-agnostic prompts.
6. Close the loop
When something slips through to production, add it to the test set. Over time your suite becomes a precise map of what your prompt must handle, and regressions get caught before customers see them.
Checklist
- A test set of real inputs, including edge and adversarial cases.
- Deterministic pass/fail checks for format and content.
- LLM-as-judge only where needed, with a rubric and on a sample.
- Pass rates reported per check, not judged by eye.
- Evals re-run on every prompt and model change.
- Production failures fed back into the test set.
Ship these practices, don't just read them
VernaOne turns prompts into versioned, model-agnostic endpoints with structured output, evals, and automatic fallback — so the best practices here become defaults, not discipline.
Try VernaOne free →