Skip to content
AI

AI features that survive production: how to evaluate LLM applications with evals, guardrails and monitoring

Demos are easy. Reliable language model features are a discipline. How to evaluate LLM applications before launch, guard them in production and keep them honest.

The Caudify CRMS model card calibration table, asking whether the predicted percentage is honest, circled in marker.
AI

It has never been easier to build an impressive AI demo, and it has never been harder to keep one working once real users arrive. The gap between the two is mostly about evaluation and guardrails: knowing, with numbers, whether a change made the feature better or worse, and stopping the failures you cannot afford before they reach a user.

Key takeaways
  • Separate offline evals (before release) from guardrails (inline, on live traffic). They do different jobs.
  • Build a golden dataset from real inputs, including the failures you have already seen.
  • Score correctness, faithfulness, relevance and safety separately; one blended score hides problems.
  • Run evals in CI so a prompt or model change that lowers quality cannot merge.
  • Sample live traffic, score it, and turn every confirmed failure into a new test case.

Why AI demos fail in production

A demo is tuned on a handful of inputs the builder chose. Production is everything else: typos, other languages, half finished sentences, adversarial users and data the prompt never anticipated. Model providers also update models, and a prompt that worked last month can quietly drift. Without measurement, you find out from a customer.

Evals and guardrails are different tools

The two words are often used interchangeably, but they solve different problems. An evaluation scores quality after the fact, across many examples, so you can compare versions. A guardrail runs inline on a single request and blocks or rewrites a specific failure before the user sees it.

Offline evals vs production guardrails
Offline evalsGuardrails
When it runsBefore release and in CIOn every live request
What it answersIs version B better than version A?Is this response safe to show?
Speed budgetMinutes are fineMilliseconds
Typical checksCorrectness, faithfulness, relevancePII, prompt injection, policy, format

Step 1: build a golden dataset

If you cannot measure whether a change made your feature better or worse, you are guessing. Start with a set of representative examples with known good answers. Pull them from real usage wherever possible, not from your imagination.

  • Common cases: the requests most users actually make.
  • Hard cases: ambiguous, long or multi part inputs.
  • Known failures: every bug report becomes a test case.
  • Adversarial cases: prompt injection, attempts to extract data, off topic requests.

A few hundred well chosen examples beat thousands of synthetic ones. Keep the set versioned alongside the code.

Step 2: choose how to score

There are three common ways to score outputs, and most teams use all three:

  1. Reference based checks for constrained outputs: exact match, JSON schema validity, a required field present.
  2. LLM as a judge for open ended quality: a separate model grades the answer against a rubric. Cheap and flexible, but calibrate it against human labels.
  3. Human review to establish ground truth on a sample, and to catch what automated graders miss.

Score each dimension separately: correctness, faithfulness to the source documents (for retrieval augmented generation), relevance and safety. A single blended number lets a big safety regression hide behind a small helpfulness gain.

Step 3: run evals in CI

Treat prompts, retrieval settings and model versions like code. Every pull request that changes them runs the eval suite, and a drop below an agreed threshold blocks the merge. This turns "I think the new prompt is better" into a number reviewers can see.

Run the full suite before switching model versions too. Upgrades are where silent regressions most often come from.

Step 4: guardrails, not hope

Constrain what the model can do, validate what it returns, and always have a graceful fallback for when it gets something wrong. Users forgive a system that fails clearly far more than one that fails confidently.

Input guardrails

  • Strip or mask personal data that the model does not need.
  • Detect prompt injection attempts in user input and retrieved documents.
  • Reject requests outside the feature's scope with a helpful message.

Output guardrails

  • Validate structure: parse JSON, check types, enforce allowed values.
  • Check claims against retrieved sources when the answer must be grounded.
  • Block policy violations, and fall back to a safe default rather than an empty screen.

Inline checks add latency, so keep blocking guardrails for failures that must never reach a user, and score everything else asynchronously.

Step 5: monitor live traffic and close the loop

Inputs change without any code change: new customers, new use cases, new attack patterns. Sample a slice of production traffic, score it with the same graders you use offline, and alert on drift. Every confirmed failure goes back into the golden dataset, so the offline suite gets stronger every week.

Make probabilities honest

When a feature shows a number, such as a confidence or a probability, users will treat it as true. In Caudify CRMS, every workspace gets its own deal scoring model, and each deal is scored by a model that never saw it during training. The model card shows the evidence behind every score, including a calibration check that asks a simple question: when the model says 70%, do deals like that actually close about that often? That is a guardrail on trust, not just on output format.

Frequently asked questions

How many examples does an LLM evaluation set need?

Fewer than most teams think, as long as they are representative. A few hundred carefully chosen examples covering common cases, hard cases, known failures and adversarial inputs will catch most regressions. Add every confirmed production failure to the set, and the suite becomes more valuable each week without growing unmanageably.

Can an LLM grade another LLM's output?

Yes, and LLM as a judge is now a standard technique for open ended quality. It is cheap and flexible, but it has biases of its own. Calibrate the judge against a sample of human labels, keep rubrics specific, and score separate dimensions such as correctness and faithfulness instead of asking for one overall grade.

What is the difference between AI evals and AI guardrails?

Evals measure quality across many examples, offline or on sampled traffic, so you can compare versions and catch regressions. Guardrails run inline on each live request and block or repair a specific failure, such as leaked personal data or invalid output, before the user sees it. Production AI needs both.

From party trick to product

Treated this way, language model features stop being a party trick and become dependable parts of a product you can stand behind: measured before release, guarded in production and improved from real failures.

Our AI product development team builds the evaluation suite before the feature, and our agentic AI work adds step level tracing and approval gates for agents that take actions. If you are deciding between an agent, a chatbot or plain automation, start with AI agents vs chatbots vs workflow automation.

Written byThe Caudify team

Written by the engineers and designers who build Caudify's own products, Caudilysis and Caudify CRMS, and ship custom software, SaaS and AI for clients.

From the studio

Rather talk than read?

Book a free assessment and get our point of view on your product, directly from the people who write these essays.