Lattice
Skip to content
← Fix a symptom

Band III · Control · “unreliable, unmeasured”

How do I know if my LLM changes actually helped?

Short answer

You need an eval set: real inputs from production with a way to score each output. Start from failures you have actually seen, score them with code checks where possible and a model grader where not, and run the set on every prompt, model or retrieval change. Traces show what happened; only evals show whether it got better.

By Lattice editorial · Tool facts verified · method

Check in this order

  1. 01

    Capture production traces you can sample from

    Layer 09 · Evaluation & Observability

    An eval set built from invented inputs measures your imagination. Real traffic is where the failures are.

    • Langfuse
      Use when
      Self-hostable tracing, prompts and evals in one place.
      Skip when
      You want a fully managed product with a support contract.
    • Arize Phoenix
      Use when
      OpenTelemetry-native evaluation you can run yourself.
      Skip when
      You want a vendor support contract behind it.
    • Helicone
      Use when
      Gateway-level observability with per-request cost and latency.
      Skip when
      You need eval primitives more than traffic logs.
  2. 02

    Turn real failures into a scored golden set

    Layer 09 · Evaluation & Observability

    Start small and real. A golden set that is never updated becomes a benchmark you overfit to.

    • Braintrust
      Use when
      Making evaluation, rather than tracing, the primary workflow.
      Skip when
      You need open formats and self-hosting.
    • promptfoo
      Use when
      Declarative red-teaming and regression tests that run in CI.
      Skip when
      You need a managed UI rather than a test runner.
  3. 03

    Score with code first, a model grader second

    Layer 09 · Evaluation & Observability

    Deterministic checks are cheap and do not drift. Reserve model graders for what code cannot judge, and spot-check them.

    • DeepEval
      Use when
      pytest-style evaluation you can run next to your unit tests.
      Skip when
      You need a platform rather than a library.
    • promptfoo
      Use when
      Declarative red-teaming and regression tests that run in CI.
      Skip when
      You need a managed UI rather than a test runner.
  4. 04

    Version prompts so every score maps to a change

    Layer 08 · Prompt Engineering

    A score you cannot tie to a specific prompt version is an anecdote.

    • Agenta
      Use when
      Open-source prompt management with a playground and versioning.
      Skip when
      You need eval depth rather than prompt ergonomics.
    • PromptLayer
      Use when
      A prompt registry with request logging and regression tests.
      Skip when
      You need self-hosting.

Looks like a fix, is not

  • Judging a change by reading a handful of outputs by eye.
  • Treating a public benchmark score as a proxy for your task.
  • Building a dashboard of traffic metrics and calling it evaluation.

Quick answers

What should I check first?
Capture production traces you can sample from. An eval set built from invented inputs measures your imagination. Real traffic is where the failures are.
What looks like a fix but is not?
Judging a change by reading a handful of outputs by eye. Treating a public benchmark score as a proxy for your task. Building a dashboard of traffic metrics and calling it evaluation.