bigonotes
AIWorkflows

Evaluator-Optimizer

One model drafts, an evaluator checks it against a rubric, and the loop repeats until it passes. Why the rubric matters and how to cap the loop.

2 min readLast updated

In the evaluator-optimizer pattern, one model drafts, another checks the draft, and the loop repeats until the quality is good enough.

The loop#

The generator writes a draft, the evaluator checks it against a rubric; a pass ends the loop, and a fail sends specific feedback back to the generator to revise
  1. The generator produces a draft.
  2. The evaluator scores the draft against a rubric.
  3. If it passes, you are done.
  4. If not, the evaluator's feedback goes back to the generator.
  5. The generator revises, and the loop goes back to step 2.

The rubric is the key#

The evaluator needs explicit criteria to check, not "is this good?" Vague criteria produce vague feedback, and the generator spins without improving.

Example: generating a product description. The evaluator checks three things:

Criterion Pass when
Length Under 50 words
Content It mentions the key feature
Style It avoids jargon

If one fails, the generator gets that specific feedback, for example "62 words, cut to under 50", and rewrites. The same rules for writing a good rubric apply as for an LLM judge.

The trade-off#

Every loop adds another generator call and another evaluator call. Two settings keep it in check:

  • A maximum number of iterations, so it cannot loop forever. The same idea as the iteration cap in tool calling limits.
  • A clear pass threshold, so an evaluator that is too strict does not reject drafts that are good enough.

The evaluator does not have to be a model#

If you can check quality in code, do that. It is faster and cheaper than a model call.

  • Count the words.
  • Validate the JSON.
  • Run the tests on generated code.

Use a model as the evaluator only for criteria that code cannot check, such as tone or whether the key feature is described well.

Short line#

Evaluator-optimizer loops a generator and an evaluator: draft, check against a clear rubric, send specific feedback, revise. Cap the iterations, set a pass threshold, and use code as the evaluator wherever a check can be written in code.

Key takeaways#

  • The generator drafts, the evaluator scores against a rubric, and failing drafts get feedback and a rewrite.
  • The rubric must be explicit. Vague criteria give vague feedback.
  • Each loop costs a generator call and an evaluator call.
  • Set a maximum number of iterations and a clear pass threshold.
  • Prefer code checks, such as word count, JSON validation or tests, over a model evaluator.
Revision notes · 1 min

Core idea#

One model drafts, an evaluator checks it against a rubric, and the loop repeats until it passes.

Loop#

  1. The generator writes a draft.
  2. The evaluator scores it against the rubric.
  3. Pass: done. Fail: specific feedback goes back.
  4. The generator revises.

Example rubric: product description#

Criterion Pass when
Length Under 50 words
Content Mentions the key feature
Style No jargon

Key points#

  • The rubric must be explicit. Vague criteria give vague feedback.
  • Each loop costs a generator call and an evaluator call.
  • Set a maximum number of iterations and a clear pass threshold.
  • Use code as the evaluator when you can: word count, JSON validation, tests.

Pitfalls#

  • Do not ask the evaluator "is this good?"
  • Do not let the loop run without a cap.
  • Do not make the evaluator so strict that good drafts fail.

Short line#

Draft, check against a clear rubric, revise. Cap the loop and prefer code checks.

Found a mistake? Email ask@bigonotes.com