Guide

Validating LLM Answers Without Ground Truth: Cross-Model Disagreement as a Health Signal

Published Jul 18, 2026

A held-out benchmark works because someone, somewhere, has the answer key. A production memory system running against a firm's own private data has no such luxury — there's no ground truth to score against, because if there were, the system wouldn't need to answer the question in the first place. DecisionSynth Bench's cross-provider create/validate pattern is a concrete method for exactly this situation: instead of checking an answer against a known-correct value, a different model family checks whether the answer is actually supported by what the system retrieved. It's not a substitute for real ground-truth scoring when ground truth is available — but where it isn't, its disagreement rate has been shown to track real exact-match scores closely enough to serve as a genuine health signal.

The create/validate pattern

The method is deliberately simple: whichever model family generated a system's answers, a different family audits them. The validator sees exactly what the answering system saw — the question and the memory content it actually retrieved — plus the proposed answer, and judges whether that answer is supported by that retrieved content. It never sees the ground-truth answer key, and it never modifies the answer being checked; its only output is a verdict and a disagreement report published alongside the score.

The distinction the validator is asked to make is narrow and specific on purpose: judge whether the retrieved content supports the answer, not whether the answer is true in the real world. A validator has no independent access to the underlying record, so 'true' isn't even a question it could answer reliably — 'supported by what was actually retrieved' is the question it's positioned to answer well, and if the retrieved content doesn't contain the information and the system guessed anyway, that counts as unsupported.

// Illustrative — the real mechanism ships as bench/validate.py
function auditAnswer(question, retrievedContext, proposedAnswer) {
  // The validator model NEVER receives the ground-truth answer key.
  const verdict = judgeModel.evaluate({
    question,
    context: retrievedContext,   // exactly what the answering system saw
    answer: proposedAnswer,
    instruction:
      "Judge ONLY whether this answer is supported by the context " +
      "above. Judge support, not real-world truth — you have no " +
      "access to the underlying records.",
  });
  return { supported: verdict.supported, reason: verdict.reason };
}

Why the family has to be different

The audit only means something if the validator's judgment is genuinely independent of whatever produced the answer. A model auditing its own family's output risks sharing the same blind spots that produced the answer in the first place — a systematic misreading that led the answering model astray could just as easily lead the same family's judge to the same misreading. Cross-family validation (one provider's model creates the answer, a different provider's model audits it) is what makes the check worth running: the two model families arrived at their behavior through different training, so agreement between them is closer to real corroboration, and disagreement is closer to a real signal rather than a coin flip.

Does it actually track quality? Checking against real ground truth

The method is only useful if its disagreement rate actually correlates with real correctness — otherwise it's just a second opinion with no calibration behind it. DecisionSynth Bench checked this directly by running the cross-validator on systems where the real exact-match score, against genuine ground truth, was also known. The disagreement rates ordered the systems the same way the real exact-match scores did:

  • ·An archival, near-verbatim-storage system — the strongest performer on real exact-match — showed the lowest cross-validator disagreement of any system tested, 0.087–0.129 depending on which model created its answers
  • ·A fact-extraction system — a mid-tier performer on real exact-match — showed correspondingly mid-tier disagreement, 0.386–0.492
  • ·A temporal-graph system's weakest configuration — the lowest real exact-match score in the comparison — showed the highest disagreement observed, up to 0.908

Running it on your own system

The practical setup mirrors the create/validate framing directly: pick two genuinely independent model families (DecisionSynth Bench's own runs use Gemini and Claude in each direction), have one produce your system's answers along with the retrieved context behind each one, and have the other audit every answer against only that retrieved context — never against a ground-truth key, because in the scenario this method is built for, one doesn't exist.

  1. Capture the retrieved context alongside every answer, not just the answer itself — the validator needs to see exactly what the system saw, or it can't judge support at all
  2. Run the audit with a genuinely different model family than the one that produced the answers — same-family auditing undermines the independence the method depends on
  3. Instruct the validator explicitly to judge support against the retrieved content, not real-world plausibility — a validator left to judge plausibility will reward answers that sound right over answers that are actually grounded in what was retrieved
  4. Aggregate the disagreement rate per task type, the same way exact-match is reported per task type, so a spike in one category is visible rather than averaged into a single number

Where this fits relative to real ground-truth scoring

Cross-model disagreement is a monitoring and triage tool, not a replacement for scoring against genuine ground truth wherever ground truth is available. Held-out evaluation with a real answer key remains the standard for a published benchmark score, precisely because it checks something the validator structurally cannot: whether the answer is actually correct, not just whether it's supported by whatever the system happened to retrieve. The validator's real value shows up specifically in the gap real ground-truth scoring can't reach — ongoing production monitoring, private-corpus health checks, or any setting where withholding the answer key is the whole point.

Key takeaways

  • Cross-model disagreement lets a different model family audit an answer against exactly the retrieved content the answering system saw, without ever seeing a ground-truth key.
  • The validator is explicitly instructed to judge support (is this answer backed by what was retrieved), not real-world truth — it has no independent access to the underlying record to judge truth against.
  • The two model families must be genuinely independent — a model auditing its own family's output risks sharing the same blind spots that produced the answer.
  • Disagreement rates have been shown to order systems the same way real exact-match scores do, from lowest disagreement on the strongest real performer to highest disagreement on the weakest — evidence the method tracks quality, not just noise.
  • This is a monitoring and triage tool for settings without ground truth, not a substitute for held-out scoring against a real answer key wherever one is available.

FAQ

Does the validator ever see the ground-truth answer key?+

No, by design — it sees the question, the retrieved context, and the proposed answer, and nothing else. Its entire value depends on being usable in situations where no ground-truth key exists at all, so the method has to work without one from the start.

What if both model families share the same blind spot?+

That's a real limitation worth naming honestly. Cross-model disagreement catches disagreement between two independent families — it doesn't catch an error pattern common to both. It's a genuine health signal, not a guarantee of correctness, and shouldn't be treated as equivalent to scoring against real ground truth.

Which two model families does DecisionSynth Bench actually use?+

Gemini (gemini-2.5-flash) and Anthropic Claude (claude-haiku-4-5) — whichever family created a system's answers, the harness runs the audit through the other one, so every configuration gets checked by a genuinely different provider than the one that produced it.

Can this method work with only one model family?+

No — the entire method rests on genuine independence between the model that produced the answer and the model auditing it. A model checking its own family's work isn't independent verification; it's closer to asking the same reasoning process to grade itself.

Is a high disagreement rate proof a system is bad?+

It's evidence worth taking seriously, especially when it's consistent with other signals about the system, but not proof on its own — it's a correlational health signal validated against real scores in one setting, not a formal guarantee that transfers to every possible system or corpus without any calibration check of your own.